dvipng-1.15/ 0000775 0001750 0001750 00000000000 12475135515 012221 5 ustar janla64 janla64 dvipng-1.15/dvipng.h 0000644 0001750 0001750 00000041760 12475135444 013670 0 ustar janla64 janla64 /* dvipng.h */
/************************************************************************
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
.
Copyright (C) 2002-2015 Jan-Åke Larsson
************************************************************************/
#ifndef DVIPNG_H
#define DVIPNG_H
#include "config.h"
#define STRSIZE 255 /* stringsize for file specifications */
#define FIRSTFNTCHAR 0
#define LASTFNTCHAR 255
#define NFNTCHARS LASTFNTCHAR+1
#define STACK_SIZE 100 /* DVI-stack size */
#define DEFAULT_GAMMA 1.0
/* Name of the program which is called to generate missing pk files */
#define MAKETEXPK "mktexpk"
#ifdef HAVE_INTTYPES_H
# include
#else /* HAVE_INTTYPES_H */
# ifndef __sgi
/* IRIX has the following types typedef'd in sys/types.h already,
* i.e., _old_ IRIX systems; newer ones have a working inttypes.h */
typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t;
#endif /* ! __sgi */
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef long long int64_t;
typedef unsigned long long uint64_t;
#endif /* HAVE_INTTYPES_H */
#ifndef INT32_MIN
#define INT32_MIN (-2147483647-1)
#endif
#ifndef INT32_MAX
#define INT32_MAX (2147483647)
#endif
#include
#ifdef HAVE_KPATHSEA_KPATHSEA_H
# include
#else
# error: kpathsea/kpathsea.h is missing from your system
#endif
#ifdef HAVE_FT2
#include
#include FT_FREETYPE_H
#endif
#ifdef HAVE_STDBOOL_H
# include
#else
# ifdef HAVE_KPATHSEA_KPATHSEA_H
/* boolean is an enum type from kpathsea/types.h loaded in
kpathsea/kpathsea.h, use it as fallback */
# define bool boolean
# else
typedef int bool;
# define true (bool) 1
# define false (bool) 0
# endif
#endif
#ifndef HAVE_VPRINTF
# ifdef HAVE_DOPRNT
# define vfprintf(stream, message, args) _doprnt(message, args, stream)
# else
# error: vfprintf AND _doprnt are missing!!!
/* If we have neither, should fall back to fprintf with fixed args. */
# endif
#endif
/*************************************************************/
/************************* protos.h ************************/
/*************************************************************/
typedef int pixels;
typedef int32_t subpixels;
typedef int32_t dviunits;
#define MM_TO_PXL(x) (int)(((x)*resolution*10)/254)
#define PT_TO_PXL(x) (int)((int32_t)((x)*resolution*100l)/7224)
#define PT_TO_DVI(x) (int32_t)((x)*65536l)
/*#define PIXROUND(x,c) ((((double)x+(double)(c>>1))/(double)c)+0.5)*/
/*#define PIXROUND(x,c) (((x)+c)/(c))*/
/*#define PIXROUND(x,c) ((x+c-1)/(c))*/
/*#define PIXROUND(x,c) ((x)/(c))*/
/* integer round to the nearest number, not towards zero */
#define PIXROUND(num,den) ((num)>0 ? ((num)+(den)/2)/(den) : -(((den)/2-(num))/(den)))
/********************************************************/
/*********************** dvi.h ************************/
/********************************************************/
#define DVI_TYPE 0
struct dvi_data { /* dvi entry */
int type; /* This is a DVI */
struct dvi_data *next;
uint32_t num, den, mag; /* PRE command parameters */
int32_t conv; /* computed from num and den */
/* divide dvi units (sp) with conv to get mf device resolution */
/* divide further with shrinkfactor to get true resolution */
char * name; /* full name of DVI file */
char * outname; /* output filename (basename) */
FILE * filep; /* file pointer */
time_t mtime; /* modification time */
struct font_num *fontnump; /* DVI font numbering */
struct page_list *pagelistp; /* DVI page list */
#define DVI_PREVIEW_LATEX_TIGHTPAGE 1
#define DVI_PREVIEW_BOP_HOOK (1<<1)
uint32_t flags; /* Preview-latex flags */
};
#define PAGE_POST INT32_MAX
#define PAGE_LASTPAGE INT32_MAX-1
#define PAGE_MAXPAGE INT32_MAX-2 /* assume no pages out of this range */
#define PAGE_FIRSTPAGE INT32_MIN
#define PAGE_MINPAGE INT32_MIN+1 /* assume no pages out of this range */
struct dvi_color {
int red,green,blue;
};
struct page_list {
struct page_list* next;
int offset; /* file offset to BOP */
int32_t count[11]; /* 10 dvi counters + absolute pagenum in file */
int csp; /* color stack pointer at BOP */
struct dvi_color cstack[2]; /* color stack at BOP, may be longer */
};
struct dvi_data* DVIOpen(char*,char*);
void DVIClose(struct dvi_data*);
bool DVIReOpen(struct dvi_data*);
struct page_list*FindPage(struct dvi_data*, int32_t, bool);
struct page_list*NextPage(struct dvi_data*, struct page_list*);
struct page_list*PrevPage(struct dvi_data*, struct page_list*);
int SeekPage(struct dvi_data*, struct page_list*);
bool DVIFollowToggle(void);
unsigned char* DVIGetCommand(struct dvi_data*);
bool DVIIsNextPSSpecial(struct dvi_data*);
uint32_t CommandLength(unsigned char*);
void ClearPSHeaders(void);
/********************************************************/
/********************** misc.h ************************/
/********************************************************/
struct filemmap {
#ifdef WIN32
HANDLE hFile;
HANDLE hMap;
#else /* WIN32 */
int fd;
#endif /* WIN32 */
char* data;
size_t size;
};
bool DecodeArgs(int, char *[]);
void DecodeString(char *);
bool MmapFile (char *filename,struct filemmap *fmmap);
void UnMmapFile(struct filemmap* fmmap);
void Message(int, const char *fmt, ...);
void Warning(const char *fmt, ...);
void Fatal(const char *fmt, ...);
int32_t SNumRead(unsigned char*, register int);
uint32_t UNumRead(unsigned char*, register int);
bool MmapFile (char *filename,struct filemmap *fmmap);
void UnMmapFile(struct filemmap* fmmap);
/********************************************************/
/*********************** font.h ***********************/
/********************************************************/
struct encoding {
struct encoding* next;
char* name;
char* charname[257];
};
struct subfont {
struct subfont* next;
char* name;
char* infix;
int encoding;
int32_t charindex[256];
};
#ifdef HAVE_FT2
struct psfontmap {
struct psfontmap *next;
char *line,*psfile,*tfmname,*encname,*end;
struct encoding* encoding;
FT_Matrix* ft_transformp;
FT_Matrix ft_transform;
struct subfont* subfont;
};
#endif
#define FONT_TYPE_PK 1
#define FONT_TYPE_VF 2
#define FONT_TYPE_FT 3
struct char_entry { /* PK/FT Glyph/VF Macro */
dviunits tfmw; /* TFM width */
unsigned char *data; /* glyph data, either pixel data
* (0=transp, 255=max ink) or VF macro */
uint32_t length; /* Length of PK data or VF macro */
/* Only used in pixel fonts */
pixels w,h; /* width and height in pixels */
subpixels xOffset, yOffset; /* x offset and y offset in subpixels */
/* Only used in PK fonts */
unsigned char *pkdata; /* Points to beginning of PK data */
unsigned char flag_byte; /* PK flagbyte */
};
struct font_entry { /* font entry */
int type; /* PK/VF/Type1 ... */
struct font_entry *next;
uint32_t c, s, d;
uint8_t a, l;
char n[STRSIZE]; /* FNT_DEF command parameters */
int dpi; /* computed from s and d */
char * name; /* full name of PK/VF file */
struct filemmap fmmap; /* file memory map */
uint32_t magnification; /* magnification read from font file */
uint32_t designsize; /* design size read from font file */
void * chr[NFNTCHARS]; /* character information */
#ifdef HAVE_FT2
FT_Face face; /* Freetype2 face */
struct psfontmap* psfontmap; /* Font transformation */
#endif
struct font_num *vffontnump; /* VF local font numbering */
int32_t defaultfont; /* VF default font number */
};
struct font_num { /* Font number. Different for VF/DVI, and several
font_num can point to one font_entry */
struct font_num *next;
int32_t k;
struct font_entry *fontp;
};
void CheckChecksum(uint32_t, uint32_t, const char*);
void InitPK (struct font_entry *newfontp);
void DonePK(struct font_entry *oldfontp);
void InitVF (struct font_entry *newfontp);
void DoneVF(struct font_entry *oldfontp);
void FontDef(unsigned char*, void* /* dvi/vf */);
void ClearFonts(void);
void SetFntNum(int32_t, void* /* dvi/vf */);
void FreeFontNumP(struct font_num *hfontnump);
#ifdef HAVE_FT2
char* copyword(char* orig);
struct psfontmap *NewPSFont(struct psfontmap* copyfrom);
void InitPSFontMap(void);
void ClearPSFontMap(void);
struct psfontmap* FindPSFontMap(char*);
struct encoding* FindEncoding(char*);
void ClearEncoding(void);
bool ReadTFM(struct font_entry *, char*);
bool InitFT(struct font_entry *);
void DoneFT(struct font_entry *tfontp);
void LoadFT(int32_t, struct char_entry *);
struct psfontmap* FindSubFont(struct psfontmap* entry, char* fontname);
void ClearSubfont(void);
#endif
/********************************************************/
/********************* ppagelist.h ********************/
/********************************************************/
bool ParsePages(const char*);
void FirstPage(int32_t,bool);
void LastPage(int32_t,bool);
void ClearPpList(void);
void Reverse(bool);
struct page_list* NextPPage(void* /* dvi */, struct page_list*);
#ifdef MAIN
#define EXTERN
#define INIT(x) =x
#else
#define EXTERN extern
#define INIT(x)
#endif
/********************************************************/
/********************** draw.h ************************/
/********************************************************/
#include "commands.h"
void CreateImage(pixels width, pixels height);
void DestroyImage(void);
void DrawCommand(unsigned char*, void* /* dvi/vf */);
void DrawPages(void);
void WriteImage(char*, int);
void LoadPK(int32_t, register struct char_entry *);
int32_t SetChar(int32_t);
dviunits SetGlyph(struct char_entry *ptr, int32_t hh,int32_t vv);
void Gamma(double gamma);
int32_t SetVF(struct char_entry *ptr);
int32_t SetRule(int32_t, int32_t, int32_t, int32_t);
void SetSpecial(char *, char *, int32_t, int32_t);
void BeginVFMacro(struct font_entry*);
void EndVFMacro(void);
/**************************************************/
void handlepapersize(const char*,int32_t*,int32_t*);
void stringrgb(const char* colorstring,int *r,int *g,int *b);
void background(const char *);
void initcolor(void);
void popcolor(void);
void pushcolor(const char *);
void resetcolorstack(const char *);
void StoreColorStack(struct page_list *tpagep);
void ReadColorStack(struct page_list *tpagep);
void StoreBackgroundColor(struct page_list *tpagep);
void ClearColorNames(void);
void InitXColorPrologue(const char* prologuename);
/**********************************************************************/
/************************* Global Variables *************************/
/**********************************************************************/
#ifdef MAKETEXPK
#ifdef HAVE_LIBKPATHSEA
EXTERN bool makeTexPK INIT(MAKE_TEX_PK_BY_DEFAULT);
#else
EXTERN bool makeTexPK INIT(_TRUE);
#endif
#endif
EXTERN uint32_t usermag INIT(0); /* user specified magstep */
EXTERN struct font_entry *hfontptr INIT(NULL); /* font list pointer */
EXTERN struct internal_state {
struct font_entry* currentfont;
} current_state;
#define BE_NONQUIET 1
#define BE_VERBOSE (1<<1)
#define PARSE_STDIN (1<<2)
#define EXPAND_BBOX (1<<3)
#define TIGHT_BBOX (1<<4)
#define FORCE_TRUECOLOR (1<<5)
#define USE_FREETYPE (1<<6)
#define REPORT_HEIGHT (1<<7)
#define REPORT_DEPTH (1<<8)
#define REPORT_WIDTH (1<<9)
#define DVI_PAGENUM (1<<10)
#define MODE_PICKY (1<<11)
#define GIF_OUTPUT (1<<12)
#define MODE_STRICT (1<<13)
#define NO_GHOSTSCRIPT (1<<14)
#define NO_GSSAFER (1<<15)
#define BG_TRANSPARENT (1<<16)
#define BG_TRANSPARENT_ALPHA (1<<17)
#define FORCE_PALETTE (1<<18)
#define NO_RAW_PS (1<<19)
EXTERN uint32_t option_flags INIT(BE_NONQUIET | USE_FREETYPE);
#define PAGE_GAVE_WARN 1
#define PAGE_PREVIEW_BOP (1<<1)
#define PAGE_TRUECOLOR (1<<2)
EXTERN uint32_t page_flags INIT(0);
#ifdef DEBUG
EXTERN unsigned int debug INIT(0);
#define DEBUG_PRINT(a,b) if (debug & a) { printf b; fflush(stdout); }
#define DEBUG_DVI 1
#define DEBUG_VF (1<<1)
#define DEBUG_PK (1<<2)
#define DEBUG_TFM (1<<3)
#define DEBUG_GLYPH (1<<4)
#define DEBUG_FT (1<<5)
#define DEBUG_ENC (1<<6)
#define DEBUG_COLOR (1<<7)
#define DEBUG_GS (1<<8)
#define LASTDEBUG DEBUG_GS
#define DEBUG_DEFAULT DEBUG_DVI
#else
#define DEBUG_PRINT(a,b)
#endif
/************************timing stuff*********************/
#ifdef TIMING
# ifdef TIME_WITH_SYS_TIME
# include
# include
# else
# ifdef HAVE_SYS_TIME_H
# include
# else
# include
# endif
# endif
EXTERN double timer INIT(0);
EXTERN double my_tic,my_toc INIT(0);
EXTERN int ndone INIT(0); /* number of pages converted */
# ifdef HAVE_GETTIMEOFDAY
EXTERN struct timeval Tp;
# define TIC { gettimeofday(&Tp, NULL); \
my_tic= Tp.tv_sec + Tp.tv_usec/1000000.0;}
# define TOC { gettimeofday(&Tp, NULL); \
my_toc += Tp.tv_sec + Tp.tv_usec/1000000.0 - my_tic;}
# else
# ifdef HAVE_FTIME
EXTERN struct timeb timebuffer;
# define TIC() { ftime(&timebuffer); \
my_tic= timebuffer.time + timebuffer.millitm/1000.0;
# define TOC() { ftime(&timebuffer); \
my_toc += timebuffer.time + timebuffer.millitm/1000.0 - my_tic;}
# else
# define TIC()
# define TOC()
# endif
# endif
#endif /* TIMING */
EXTERN char* user_mfmode INIT(NULL);
EXTERN int user_bdpi INIT(0);
EXTERN int dpi INIT(100);
#ifdef HAVE_GDIMAGEPNGEX
EXTERN int compression INIT(1);
#endif
#undef min
#undef max
# define max(x,y) if ((y)>(x)) x = y
# define min(x,y) if ((y)<(x)) x = y
/* These are in pixels*/
EXTERN int x_min INIT(0);
EXTERN int y_min INIT(0);
EXTERN int x_max INIT(0);
EXTERN int y_max INIT(0);
/* Page size: default set by -T */
EXTERN int x_width_def INIT(0);
EXTERN int y_width_def INIT(0);
/* Offset: default set by -O and -T bbox */
EXTERN int x_offset_def INIT(0);
EXTERN int y_offset_def INIT(0);
/* Preview-latex's tightpage */
EXTERN int x_width_tightpage INIT(0);
EXTERN int y_width_tightpage INIT(0);
EXTERN int x_offset_tightpage INIT(0);
EXTERN int y_offset_tightpage INIT(0);
/* Paper size: set by -t, for cropmark purposes only */
/* This has yet to be written */
EXTERN int x_pwidth INIT(0);
EXTERN int y_pwidth INIT(0);
/* The transparent border preview-latex desires */
EXTERN int borderwidth INIT(0);
/* fallback color for transparent background */
EXTERN bool userbordercolor INIT(FALSE); /* if true, use user-supplied color */
EXTERN struct dvi_color bordercolor;
EXTERN gdImagePtr page_imagep INIT(NULL);
EXTERN int32_t shrinkfactor INIT(4);
EXTERN struct dvi_color cstack[STACK_SIZE];
EXTERN int csp INIT(1);
EXTERN struct font_entry* currentfont;
EXTERN struct dvi_data* dvi INIT(NULL);
#ifdef HAVE_FT2
EXTERN FT_Library libfreetype INIT(NULL);
#endif
#define EXIT_FATAL EXIT_FAILURE+1
EXTERN int exitcode INIT(EXIT_SUCCESS);
#endif /* DVIPNG_H */
dvipng-1.15/dvipng.texi 0000644 0001750 0001750 00000112521 12475135444 014404 0 ustar janla64 janla64 \input texinfo
@setfilename dvipng.info
@settitle A DVI-to-PNG translator
@ifset man
@c man begin SYNOPSIS
dvipng [options] filename
dvipng [options] [filename] -
@c man end
@end ifset
@set version 1.15
@set month-year February 2015
@c Put everything in one index (arbitrarily chosen to be the concept index).
@syncodeindex fn cp
@syncodeindex ky cp
@syncodeindex pg cp
@syncodeindex vr cp
@include macros.texi
@iftex
@tolerance 10000 @emergencystretch 3em
@end iftex
@dircategory TeX
@direntry
* DVI-to-PNG: (dvipng). Translating TeX DVI files to Portable Network Graphics (PNG).
* dvipng: (dvipng). A DVI-to-PNG translator.
@end direntry
@finalout
@titlepage
@title dvipng
@subtitle A DVI-to-PNG Translator
@subtitle Version @value{version}
@author by Jan-@AA{}ke Larsson.
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 2002-2015 Jan-@AA{}ke Larsson
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.
@ignore
Permission is granted to process this file through TeX and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).
@end ignore
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that the
section entitled ``Copying'' is included exactly as in the original, and
provided that the entire resulting derived work is distributed under the
terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation
approved by the Free Software Foundation.
@end titlepage
@page
@c @summarycontents
@contents
@ifnottex
@node Top
@top dvipng
This manual documents dvipng, a program to translate a DVI (DeVice
Independent) file into PNG (Portable Network Graphics).
This file documents dvipng version @value{version}
Corrections or perhaps rewrites of sections are @emph{very welcome}.
Jan-@AA{}ke Larsson
@end ifnottex
@menu
* Introduction:: Introduction
* Installation:: How to compile and install dvipng
* Basic usage:: First things first
* Command-line options:: Advanced usage
* Graphics:: Including PostScript and/or bitmaps
* Color:: Using color with dvipng
* Diagnosing problems:: Problems?
* Credits:: People who have contributed
* Copying:: GNU Lesser General Public License
* Index:: General index
@end menu
@node Introduction
@chapter Introduction
@c man begin DESCRIPTION
@include readme.texi
@c man end
@node Installation
@chapter Installation
@cindex configuration, of dvipng
@cindex compilation
@cindex installation, of dvipng
@include install.texi
@node Basic usage
@chapter Basic usage of dvipng
@cindex invoking dvipng
To use dvipng at its simplest, simply type
@example
dvipng foo
@end example
@noindent
where @file{foo.dvi} is the output of @TeX{} that you want to convert to
PNG format. If there are four pages in @file{foo.dvi}, those pages will
be output as @file{foo1.png}, @file{foo2.png}, @file{foo3.png}, and
@file{foo4.png}, respectively.
If you have enabled the PostScript font support (via FreeType),
fonts will be rendered as they are needed. Otherwise, dvipng will use
bitmapped (PK) fonts, and if you use PK fonts that have not been used on
your system before, they may be automatically generated; this process
can take a few minutes, so progress reports appear by default. The next
time the same font is used, it will have been saved on disk, so
rendering will go much faster. (If dvipng tries to endlessly generate
the same fonts over and over again, something is wrong. @xref{Unable to
generate fonts,,, kpathsea, Kpathsea}.)
Many options are available (see the next section). For a brief summary
of available options, just type
@example
dvipng --help
@end example
@node Command-line options
@chapter Command-line options
@cindex command-line options
@cindex options, dvipng
dvipng has a plethora of command line options. Reading through this
section will give a good idea of the capabilities of the driver.
@menu
* Option summary:: Quick listing, from dvipng --help.
* Option details:: More information about each option.
@end menu
@node Option summary
@section Option summary
@cindex options, summary
Here is a handy summary of the options; it is printed out when you run
dvipng with no arguments or with the standard @samp{--help} option.
@example
@include dvipng.help
@end example
@node Option details
@section Option details
@cindex option, details of
@c man begin OPTIONS
Many of the parameterless options listed here can be turned off by
suffixing the option with a zero (@samp{0}); for instance, to turn off
page reversal, use @samp{-r0}. Such options are marked with a trailing
@samp{*}.
@table @samp
@item -
@cindex options, reading from standard input
@cindex standard input, reading options from
Read additional options from standard input after processing the command
line.
@item --help
Print a usage message and exit.
@item --version
Print the version number and exit.
@item -bd @var{num}
@item -bd @var{color_spec}
@item -bd '@var{num} @var{color_spec}'
@cindex transparent border width
@cindex transparent border fallback color
Set the pixel width of the transparent border (default 0). Using this
option will make the image edges transparent, but it only affects pixels
with the background color. Giving a @var{color_spec} will set the
fallback color, to be used in viewers that cannot handle transparency
(the default is the background color). The color spec should be in
@TeX{} color \special syntax, e.g., 'rgb 1.0 0.0 0.0'. Setting the
fallback color makes the default border width 1 px. @xref{Color}.
@item --bdpi @var{num}
@cindex base resolution, setting
This option only has an effect when using bitmapped (PK) fonts. The
option sets the base (Metafont) resolution, both horizontal and
vertical, to @var{num} dpi (dots per inch). This option is necessary
when manually selecting Metafont mode with the --mode option (see
below).
@item -bg @var{color_spec}
@cindex background color (option)
Choose background color for the images. This option will be ignored if
there is a background color \special in the DVI. The color spec should
be in @TeX{} color \special syntax, e.g., 'rgb 1.0 0.0 0.0'. You can
also specify 'Transparent' or 'transparent' which will give you a
transparent background with the normal background as a fallback color. A
capitalized 'Transparent' will give a full-alpha transparency, while an
all-lowercase 'transparent' will give a simple fully transparent
background with non-transparent antialiased pixels. The latter would be
suitable for viewers who cannot cope with a true alpha channel. GIF
images do not support full alpha transparency, so in case of GIF output,
both variants will use the latter behaviour. @xref{Color}.
@item -d @var{num}
@cindex debugging
Set the debug flags, showing what dvipng (thinks it) is doing. This will
work unless dvipng has been compiled without the @code{DEBUG} option
(not recommended). Set the flags as you need them, use @samp{-d -1} as
the first option for maximum output. @xref{Debug options}.
@item -D @var{num}
@cindex output resolution, setting
Set the output resolution, both horizontal and vertical, to @var{num}
dpi (dots per inch).
One may want to adjust this to fit a certain text font size (e.g., on
a web page), and for a text font height of @var{font_px} pixels (in
Mozilla) the correct formula is
@example
@var{dpi} = @var{font_px} * 72.27 / 10 [px * @TeX{}pt/in / @TeX{}pt]
@end example
The last division by ten is due to the standard font height 10pt in
your document, if you use 12pt, divide by 12. Unfortunately, some
proprietary browsers have font height in pt (points), not pixels. You
have to rescale that to pixels, using the screen resolution (default
is usually 96 dpi) which means the formula is
@example
@var{font_px} = @var{font_pt} * 96 / 72 [pt * px/in / (pt/in)]
@end example
On some high-res screens, the value is instead 120 dpi. Good luck!
@item --depth*
@cindex baseline reporting
@cindex depth reporting
Report the depth of the image. This only works reliably when the
@LaTeX{} style @file{preview.sty} from @previewlatex{} is used with
the @samp{active} option. It reports the number of pixels from the
bottom of the image to the baseline of the image. This can be used for
vertical positioning of the image in, e.g., web documents, where one
would use (Cascading StyleSheets 1)
@example
@end example
The depth is a negative offset in this case, so the minus sign is
necessary, and the unit is pixels (px).
@item --dvinum*
Set this option to make the output page number be the @TeX{} page
numbers rather than the physical page number. See the @samp{-o} switch.
@ignore
@item -e @var{num}
@cindex maxdrift
@cindex accuracy in positioning
@cindex positioning accuracy
Maximum drift in pixels of each character from its `true'
resolution-independent position on the page. The default value of this
parameter is resolution dependent (it is the number of entries in the
list [100, 200, 300, 400, 500, 600, 800, 1000, 1200, 1600, 2000, 2400,
2800, 3200, @dots{}] that are less than or equal to the resolution in
dots per inch). Allowing individual characters to `drift' from their
correctly rounded positions by a few pixels, while regaining the true
position at the beginning of each new word, improves the spacing of
letters in words.
@item -f*
@cindex filter, running as a
@cindex standard I/O
@cindex pipes, not readable
@vindex PRINTER@r{, avoided with @samp{-f}}
Run as a filter. Read the DVI file from standard input and write the
PostScript to standard output. The standard input must be seekable, so
it cannot be a pipe. If your input must be a pipe, write a shell script
that copies the pipe output to a temporary file and then points dvipng at
this file. This option also disables the automatic reading of the
@code{PRINTER} environment variable; use @samp{-P$PRINTER} after the
@samp{-f} to read it anyway. It also turns off the automatic sending of
control-D if it was turned on with the @samp{-F} option or in the
configuration file; use @samp{-F} after the @samp{-f} to send it anyway.
@item -k*
@cindex cropmarks
Print crop marks. This option increases the paper size (which should be
specified, either with a paper size special or with the @samp{-T}
option) by a half inch in each dimension. It translates each page by a
quarter inch and draws cross-style crop marks. It is mostly useful with
typesetters that can set the page size automatically. This works by
downloading @file{crop.pro}.
@end ignore
@item -fg @var{color_spec}
@cindex foreground color (option)
Choose foreground color for the images. This option will be ignored if
there is a foreground color \special in the DVI. The color spec should
be in @TeX{} color \special syntax, e.g., 'rgb 1.0 0.0 0.0'.
@xref{Color}.
@item --follow*
@cindex follow mode
Wait for data at end-of-file. One of the benefits of dvipng is that it
does not read the postamble, so it can be started before @TeX{}
finishes. This switch makes dvipng wait at end-of-file for further
output, unless it finds the POST marker that indicates the end of the
DVI. This is similar to @samp{tail -f} but for DVI-to-PNG conversion.
@item --freetype*
@cindex FreeType font rendering
Enable/disable FreeType font rendering (default on). This option is
available if the FreeType2 font library was present at compilation time.
If this is the case, dvipng will have direct support for PostScript
Type1 and TrueType fonts internally, rather than using @samp{gsftopk}
for rendering the fonts. If you have PostScript versions of Computer
Modern installed, there will be no need to generate bitmapped (PK)
variants on disk of these. Then, you can render images at different (and
unusual) resolutions without cluttering the disk with lots of bitmapped
fonts.
@item --gamma @var{num}
@cindex gamma
@cindex dark fonts
@cindex light fonts
@cindex fuzzy images
Control the interpolation of colors in the greyscale anti-aliasing
color palette. Default value is 1.0. For 0 < @var{num} < 1, the
fonts will be lighter (more like the background), and for @var{num} >
1, the fonts will be darker (more like the foreground).
@item --gif*
@cindex GIF image format
The images are output in the GIF format, if GIF support is enabled.
This is the default for the @samp{dvigif} binary, which only will be
available when GIF support is enabled. GIF images are palette images
(see the @samp{--palette} option) and does not support true alpha
channels (see the @samp{--bg} option). See also the @samp{--png}
option.
@item --height*
@cindex baseline reporting
@cindex height reporting
Report the height of the image. This only works reliably when the
@LaTeX{} style @file{preview.sty} from @previewlatex{} is used with
the @samp{active} option. It reports the number of pixels from the top
of the image to the baseline of the image. The total height of the
image is obtained as the sum of the values reported from
@samp{--height} and @samp{--depth}.
@item -l [=]@var{num}
@cindex last page printed
@cindex page, last printed
@cindex physical page number, and @samp{-l}
@cindex absolute page number, and @samp{-l}
The last page printed will be the first one numbered @var{num}. Default
is the last page in the document. If @var{num} is prefixed by an equals
sign, then it (and the argument to the @samp{-p} option, if specified)
is treated as a physical (absolute) page number, rather than a value to
compare with the @TeX{} @samp{\count0} values stored in the DVI file.
Thus, using @samp{-l =9} will end with the ninth page of the document,
no matter what the pages are actually numbered.
@item --mode @var{mode}
@cindex mode name, specifying
@cindex Metafont mode, specifying
This option only has an effect when using bitmapped (PK) fonts. Use
@var{mode} as the Metafont device name for the PK fonts (both for path
searching and font generation). This needs to be augmented with the base
device resolution, given with the @samp{--bdpi} option. See the file
@url{ftp://ftp.tug.org/tex/modes.mf} for a list of resolutions and mode
names for most devices. @xref{Unable to generate fonts,,, kpathsea,
Kpathsea}.
@item -M*
@cindex font generation, avoiding
@pindex mktexpk@r{, avoiding}
@c this description repeated in kpathsea.texi
This option only has an effect when using bitmapped (PK) fonts. It turns
off automatic PK font generation (@file{mktexpk}).
@ignore
@flindex missfont.log
If @code{mktexpk}, the invocation is appended to a file
@file{missfont.log} (by default) in the current directory. You can then
execute the log file to create the missing files after fixing the
problem.
@vindex TEXMFOUTPUT
@vindex MISSFONT_LOG
If the current directory is not writable and the environment variable or
configuration file value @samp{TEXMFOUTPUT} is set, its value is used.
Otherwise, nothing is written. The name @samp{missfont.log} is
overridden by the @samp{MISSFONT_LOG} environment variable or
configuration file value.
@end ignore
@item --nogs*
@cindex GhostScript, turning off
This switch prohibits the internal call to GhostScript for displaying
PostScript specials. @samp{--nogs0} turns the call back on.
@item --nogssafer*
@cindex GhostScript and -dSAFER
@cindex -dSAFER
Normally, if GhostScript is used to render PostScript specials, the
GhostScript interpreter is run with the option @samp{-dSAFER}. The
@samp{--nogssafer} option runs GhostScript without @samp{-dSAFER}. The
@samp{-dSAFER} option in Ghostscript disables PostScript operators such
as deletefile, to prevent possibly malicious PostScript programs from
having any effect.
@item --norawps*
@cindex PostScript, turning off raw PostScript specials
Some packages generate raw PostScript specials, even non-rendering such
specials. This switch turns off the internal call to GhostScript
intended to display these raw PostScript specials. @samp{--norawps0}
turns the call back on.
@item -o @var{name}
@cindex output, redirecting
@cindex standard output, output to
Send output to the file @var{name}. A single occurrence of @samp{%d} or
@samp{%01d}, @dots{}, @samp{%09d} will be exchanged for the physical
page number (this can be changed, see the @samp{--dvinum} switch). The
default output filename is @samp{@var{file}%d.png} where the input DVI
file was @samp{@var{file}.dvi}.
@item -O @var{x-offset},@var{y-offset}
@cindex offset pages
Move the origin by @var{x-offset},@var{y-offset}, a comma-separated
pair of dimensions such as @samp{.1in,-.3cm}.
@c (@pxref{papersize special}).
The origin of the page is shifted from the default position
(of one inch down, one inch to the right from the upper left corner of
the paper) by this amount.
@item -p [=]@var{num}
@cindex first page printed
@cindex page, first printed
@cindex physical page number, and @samp{-p}
@cindex absolute page number, and @samp{-p}
The first page printed will be the first one numbered @var{num}. Default
is the first page in the document. If @var{num} is prefixed by an
equals sign, then it (and the argument to the @samp{-l} option, if
specified) is treated as a physical (absolute) page number, rather than
a value to compare with the @TeX{} @samp{\count0} values stored in the
DVI file. Thus, using @samp{-p =3} will start with the third page of
the document, no matter what the pages are actually numbered.
@item --palette*
@cindex forcing palette output
When an external image is included, @samp{dvipng} will automatically
switch to truecolor mode, to avoid unnecessary delay and quality
reduction, and enable the EPS translator to draw on a transparent
background and outside of the boundingbox. This switch will force
palette (256-color) output and make @samp{dvipng} revert to opaque
clipped image inclusion. This will also override the @samp{--truecolor}
switch if present.
@item --picky*
@cindex no erroneous images
No images are output when a warning occurs. Normally, dvipng will
output an image in spite of a warning, but there may be something
missing in this image. One reason to use this option would be if you
have a more complete but slower fallback converter. Mainly, this is
useful for failed figure inclusion and unknown \special occurrences,
but warnings will also occur for missing or unknown color specs and
missing PK fonts.
@item --png*
@cindex PNG image format
The images are output in the PNG format. This is the default for the
@samp{dvipng} binary. See also the @samp{--gif} option.
@item -pp @var{firstpage}-@var{lastpage}
@cindex page range
Print pages @var{firstpage} through @var{lastpage}; but not quite
equivalent to @samp{-p @var{firstpage} -l @var{lastpage}}. For example,
when rendering a book, there may be several instances of a page in the
DVI file (one in @code{\frontmatter}, one in @code{\mainmatter}, and one
in @code{\backmatter}). In case of several pages matching, @samp{-pp
@var{firstpage}-@var{lastpage}} will render @emph{all} pages that
matches the specified range, while @samp{-p @var{firstpage} -l
@var{lastpage}} will render the pages from the @emph{first} occurrence
of @var{firstpage} to the @emph{first} occurrence of @var{lastpage}.
This is the (undocumented) behaviour of dvips. In dvipng you can give
both kinds of options, in which case you get all pages that matches the
range in @samp{-pp} between the pages from @samp{-p} to @samp{-l}. Also
multiple @samp{-pp} options accumulate, unlike @samp{-p} and @samp{-l}.
The @samp{-} separator can also be @samp{:}. Note that @samp{-pp -1}
will be interpreted as "all pages up to and including 1", if you want a
page numbered -1 (only the table of contents, say) put @samp{-pp -1--1},
or more readable, @samp{-pp -1:-1}.
@item -q*
@cindex quiet operation
@cindex silent operation
@cindex warnings, suppressing
Run quietly. Don't chatter about pages converted, etc.@: to standard
output; report no warnings (only errors) to standard error.
@item -Q @var{num}
@cindex antialiasing levels@r{, number of}
@cindex quality
Set the quality to @var{num}. That is, choose the number of antialiasing
levels for bitmapped fonts (PK), to be
@var{num}*@var{num}+1. The default value is 4 which gives 17 levels of
antialiasing for antialiased fonts from these two. If FreeType is
available, its rendering is unaffected by this option.
@item -r*
@cindex reverse pagination
Toggle output of pages in reverse/forward order. By default, the first
page in the DVI is output first.
@ignore
@item -R
@cindex security
@cindex shell command execution, disabling
@cindex absolute filenames, disabling
@cindex pipes, disabling output to
Run securely. This disables shell command execution in @code{\special}
(via @samp{`}, @pxref{Dynamic creation of graphics}) and config files
(via the @samp{E} option, @pxref{Configuration file commands}), pipes as
output files, and opening of any absolute filenames.
@item -t @var{papertype}
@cindex paper type
@cindex media
@cindex letter papertype
@cindex legal papertype
@cindex ledger papertype
@cindex a4 papertype
@cindex a3 papertype
@cindex landscape papertype
Set the paper type to @var{papertype}.
@c usually defined in one of the
@c configuration files, along with the appropriate PostScript code to
@c select it (@pxref{Config file paper sizes}).
You can also specify a @var{papertype} of @samp{landscape}, which
rotates a document by 90 degrees. To rotate a document whose paper type
is not the default, you can use the @samp{-t} option twice, once for the
paper type, and once for @samp{landscape}.
@end ignore
@item --strict*
@cindex exit on erroneous images
The program exits when a warning occurs. Normally, dvipng will output
an image in spite of a warning, but there may be something missing in
this image. One reason to use this option would be if you have a more
complete but slower fallback converter. See the @samp{--picky} option
above for a list of when warnings occur.
@item -T @var{image_size}
Set the image size to @var{image_size} which can be either of
@samp{bbox}, @samp{tight}, or a comma-separated pair of dimensions
@var{hsize},@var{vsize} such as @samp{.1in,.3cm}. The default is
@samp{bbox} which produces a PNG that includes all ink put on the page
and in addition the DVI origin, located 1in from the top and 1in from
the left edge of the paper. This usually gives whitespace above and to
the left in the produced image. The value @samp{tight} will make dvipng
only include all ink put on the page, producing neat images.
@c (@pxref{papersize special}).
@c This option overrides any papersize special in the DVI file.
@item --truecolor*
@cindex truecolor output
This will make @samp{dvipng} generate truecolor output. Note that
truecolor output is automatic if you include an external image in your
DVI, e.g., via a PostScript special (i.e., the @samp{graphics} or
@samp{graphicx} package). This switch is overridden by the
@samp{--palette} switch.
@item -v*
Enable verbose operation. This will currently indicate what fonts is
used, in addition to the usual output.
@item --width*
@cindex width reporting
Report the width of the image. See also @samp{--height} and
@samp{--depth}.
@item -x @var{num}
@cindex magnification, overriding DVI
This option is deprecated; it should not be used. It is much better to
select the output resolution directly with the @samp{-D} option. This
option sets the magnification ratio to @math{@var{num}/1000} and
overrides the magnification specified in the DVI file. Must be between
10 and 100000. It is recommended that you use standard magstep values
(1095, 1200, 1440, 1728, 2074, 2488, 2986, and so on) to help reduce the
total number of PK files generated. @var{num} may be a real number, not
an integer, for increased precision.
@item -z @var{num}
@cindex compression
Set the PNG compression level to @var{num}. This option is enabled if
your @samp{libgd} is new enough. The default compression level is 1,
which selects maximum speed at the price of slightly larger PNGs. For an
older @samp{libgd}, the hard-soldered value 5 is used. The include file
@samp{png.h} says
@ifclear man
@quotation
Currently, valid values range from 0 - 9, corresponding directly to the
zlib compression levels 0 - 9 (0 - no compression, 9 - "maximal"
compression). Note that tests have shown that zlib compression levels
3-6 usually perform as well as level 9 for PNG images, and do
considerably fewer calculations. In the future, these values may not
correspond directly to the zlib compression levels.
@end quotation
@end ifclear
@ifset man
``Currently, valid values range from 0 - 9, corresponding directly to
the zlib compression levels 0 - 9 (0 - no compression, 9 - "maximal"
compression). Note that tests have shown that zlib compression levels
3-6 usually perform as well as level 9 for PNG images, and do
considerably fewer calculations. In the future, these values may not
correspond directly to the zlib compression levels.''
@end ifset
@end table
@c man end
@node Graphics
@chapter Graphics
@samp{dvipng} attempts to handle graphics as included by the
@samp{graphicx} and @samp{graphics} packages, without the need of
specifying a driver to these packages. This means that it recognizes
the encapsulated postscript inclusion meant for @samp{dvips}, but is
also able (from version 1.8) to include bitmapped graphics. It also
tries to handle some of the raw PostScript that is output from various
packages. Some of the possibilities and problems are mentioned below.
@menu
* Encapsulated PostScript:: An internal call to GhostScript
* Bitmapped graphics:: PNG, JPEG and GIF
* Raw PostScript:: Ignore or give to GhostScript
@end menu
@node Encapsulated PostScript
@section Encapsulated PostScript
When an EPS file is included, a call to GhostScript is performed to
produce a bitmapped image that can be included. The default is to
produce an image with transparent background, at the same size as the
DVI page currently being converted to PNG, and include that as
foreground on the PNG. Of course, if the image is to be cropped, that
is done. The included image will be a truecolor image, so for maximum
performance the output PNG will be in truecolor mode as well.
This conversion needs the @samp{pngalpha} output device to be present
in your copy of GhostScript. If that device is not present, or you use
the @samp{--palette} switch or request GIF output, the fallback is to
use the @samp{png16m} device to produce a cropped opaque image for
inclusion. Other relevant switches are @samp{--noghostscript} and
@samp{--nogssafer}. @xref{Option details}.
@cindex PostScript inclusion problems
The most common problem with including graphics is an incorrect
bounding box. Complain to whoever wrote the software that generated
the file if the bounding box is indeed incorrect. An adjusted
boundingbox can be specified in the @samp{\includegraphics} call, as
in this example (using @samp{graphicx}):
@example
\includegraphics[bb=10 20 100 200]@{imagename.eps@}
@end example
@node Bitmapped graphics
@section Bitmapped graphics
dvipng can include PNG, JPEG and GIF graphics. When including such
images via @samp{\includegraphics} you need to specify the bounding
box since @TeX{} itself cannot read them from the files in question.
The bounding box size should be given as @samp{0 0 w h} in pixels,
e.g., if the file @samp{imagename.png} is 300x400 pixels, the
inclusion would read
@example
\includegraphics[bb=0 0 300 400]@{imagename.png@}
@end example
The default size is the image size in bp (``big points'' in TeX
nomenclature or PostScript points as other people have it, 72 per inch).
That is, default resolution will be 72 dpi for included bitmaps, which
is the default size in the few other bitmap-capable drivers that are
known to me (dvipdfm and PDFLaTeX).
If you want 100 dpi you need to specify the width accordingly. You
just divide your image width by 100: a 135 pixel wide image at 100 dpi
will take up 1.35 inches. If you want 200 dpi you divide by 200, and
so on. Simple, eh? The example above at 200 dpi would be 1.5 inches
wide:
@example
\includegraphics[bb=0 0 300 400,witdh=1.5in]@{imagename.png@}
@end example
@node Raw PostScript
@section Raw PostScript
dvipng attempts to handle raw PostScript. Rendering raw PostScript
specials is done on top of the page by including a transparent image
generated by the @samp{pngalpha} device in GhostScript (automatically
selecting @samp{truecolor} mode in dvipng).
Included PostScript headers are respected, and if the header
@samp{tex.pro} is included, dvipng also throws in @samp{color.pro} and
@samp{special.pro}. The package @samp{xcolor} includes its own headers
with color names, and this is not only kept as a PostScript header, but
is also read and interpreted by dvipng itself. An attempt is also made
to respect the PGF header. The non-rendering specials from
@samp{hyperref} are handled via some heuristics and do not give an
error.
Really rendering and moving things with raw PostScript specials is more
troublesome. The \rotatebox macro serves as a good example. The dvips
driver of the graphicx package surrounds DVI glyphs with PostScript code
so that after conversion by dvips, the glyphs (now themselves in
PostScript) will be rotated in the desired way. dvipng does not handle
this, at present. An attempt has been made to handle the rendering
specials output by PGF (tikz), and also PSTricks. Some things work, but
others do not. This is especially clear when mixing PostScript and DVI
rendering commands such as glyphs. dvipng cannot at present detect if
PostScript code moves @samp{currentpoint} or rotates the frame since
GhostScript does not return such information. A recommendation would be
to produce images from these packages as EPS files and include them into
your document in the standard manner.
Another way to handle this would be to use a slower fallback (with dvips
and gs, for example). If you want to disable raw PostScript handling in
dvipng, use the switch @samp{--norawps}. This switch turns off the
internal call to GhostScript intended to display these raw PostScript
specials. Further, when dvipng encounters raw PostScript and the gs call
is turned off, it gives a warning. It is now possible to use the switch
@samp{--picky} to disable page rendering of pages with warnings, and use
the slower fallback for these pages.
@node Color
@chapter Color
To support color, dvipng recognizes a certain set of specials as
generated by the @samp{color} and @samp{xcolor} style files. These
specials start with the keyword @samp{color} or the keyword
@samp{background}, followed by a color specification.
@menu
* Color specifications::
* Color specials::
@end menu
@node Color specifications
@section Color specifications
@cindex color specifications
The color specification supported by dvipng is by-value or by-name. The
by-value spec starts with the name of a color model (one of @samp{rgb},
@samp{hsb}, @samp{cmy}, @samp{cmyk}, or @samp{gray}) followed by the
appropriate number of parameters. Thus, the color specification
@samp{rgb 0.3 0.4 0.5} would correspond to the color that is @samp{0.3
0.4 0.5} in its red, blue and green values. The color model used
internally in dvipng is @samp{RGB} (discretized to 256 levels), for
details on the formulas used in conversion, see the @samp{xcolor}
documentation.
By-name color specifications are single (case-dependent) words and are
compared with color names defined in @samp{dvipsnam.def} (from the
@samp{graphics} bundle), @samp{svgnam.def} and @samp{xcolor.sty} (from
the @samp{xcolor} bundle). See the @samp{xcolor} documentation for a
list of names and the corresponding colors.
On the command-line, the name @samp{Transparent} can also be used as
an argument to @samp{--bg} to choose transparent background.
@xref{Option details}.
@node Color specials
@section Color specials
We will describe @samp{background} first, since it is the simplest. The
@samp{background} keyword must be followed by a color specification.
That color specification is used as a fill color for the background. The
last @samp{background} special on a page is the one that gets used, and
is used for the whole of the page image. (This is possible because the
prescan phase of dvipng notices all of the color specials so that the
appropriate information can be written out during the second phase.)
The @samp{color} special itself has three forms. The first is just
@samp{color} followed by a color specification. In this case, the
current global color is set to that color; the color stack must be empty
when such a command is executed.
The second form is @samp{color push} followed by a color specification.
This saves the current color on the color stack and sets the color to be
that given by the color specification. This is the most common way to
set a color.
The final form of the @samp{color} special is just @samp{color pop},
with no color specification; this says to pop the color last pushed on
the color stack from the color stack and set the current color to be
that color.
dvipng correctly handles these color specials across pages, even when
the pages are rendered repeatedly or in reverse order.
@node Diagnosing problems
@chapter Diagnosing problems
@cindex problems
@cindex trouble
@cindex debugging
You've gone through all the trouble of installing dvipng, carefully read
all the instructions in this manual, and still can't get something to
work. The following sections provide some helpful hints if you find
yourself in such a situation.
@menu
* Contact information:: Who to ask.
* Debug options:: Getting diagnostics.
@end menu
@node Contact information
@section Contact information
Bug reports should be sent to
@email{dvipng@@nongnu.org}.
Questions, suggestions for new features, pleas for help, and/or praise
should go to @email{dvipng@@nongnu.org}. For more information on this
mailing list, send a message with just the word `help' as subject or
body to @email{dvipng-request@@nongnu.org} or look at
@url{http://lists.nongnu.org/mailman/listinfo/dvipng}.
Offers to support further development will be appreciated. For developer
access, ask on @email{dvipng@@nongnu.org}.
For details on the @TeX{} path-searching library, and @code{mktexpk}
problems, @pxref{Common problems,,, kpathsea, Kpathsea}.
@node Debug options
@section Debug options
The @samp{-d} flag to dvipng helps in tracking down certain errors. The
parameter to this flag is an integer that tells what errors are
currently being tracked. To track a certain class of debug messages,
simply provide the appropriate number given below; if you wish to track
multiple classes, sum the numbers of the classes you wish to track. To
track all classes, you can use @code{-1}.
Some of these debugging options are actually provided by Kpathsea
(@pxref{Debugging, , , kpathsea, Kpathsea}).
The classes are:
@table @asis
@item 1
Normal dvi op-codes
@item 2
Virtual fonts
@item 4
PK fonts
@item 8
TFM files
@item 16
Glyph rendering
@item 32
FreeType calls
@item 64
Encoding loads
@item 128
Color specials
@item 256
GhostScript specials
@item 512
Kpathsea @code{stat} calls
@item 1024
Kpathsea hash table lookups
@item 2048
Kpathsea path element expansion
@item 4096
Kpathsea path searches
@ignore
@item 8192
@item 16384
@end ignore
@end table
@node Credits
@chapter Credits
A number of persons have contributed, if I forget to mention someone,
I apologize. First and foremost we have David Kastrup whose
@previewlatex{} project provided the incentive to write this program.
There is also a number of people who have contributed by reporting
bugs and suggesting improvements as the thing has evolved. These
include but is perhaps not limited to (in semi-random order): Thomas
Esser (te@TeX{}), Christian Schenk (MIK@TeX{}), Brian R Furry (debian
package), Angus Leeming (LyX), Thomas Boutell (libgd), John Jones
(first user report), Uwe Kern (xcolor), Karl Berry and Peter
Breitenlohner (@TeX{} Live), David Harvey (hinting in Freetype), Neal
Harmon, Alan Shutko, Reiner Stieb, Nick Alcock, Adam Buchbinder, Svend
Tollak Munkejord, James Longstreet, Bernhard Simon, Bob McElrath,
Georg Schwarz, Jason Farmer, Brian V. Smith, Samuel Hathaway, Thomas
R. Shemanske, Stephen Gibson, Christian Ridderstr@"om, Ezra Peisach,
William H Wheeler, Thomas Klausner, Harald Koenig, Adrian Bunk, Kevin
Smith, Jason Riedy, Wolfram Krause, Reinhard Kotucha, Takeshi Abe, and
Waldeck Schutzer.
@ifset man
@c man begin NOTES
The full manual is accessible in info format, on most systems by typing
@example
info dvipng
@end example
@c man end
@c man begin COPYRIGHT
This program is released under the GNU Lesser General Public License
version 3, see the COPYING file in the dvipng distribution or
@url{http://www.gnu.org/licenses/gpl.html}.
Copyright @copyright{} 2002-2015 Jan-@AA{}ke Larsson
@c man end
@end ifset
@node Copying
@chapter Copying
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
.
@sp 2
@noindent
Copyright @copyright{} 2002-2015 Jan-@AA{}ke Larsson
@node Index
@unnumbered Index
@printindex cp
@bye
dvipng-1.15/install-sh 0000775 0001750 0001750 00000012736 12475135444 014237 0 ustar janla64 janla64 #!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5 (mit/util/scripts/install.sh).
#
# Copyright 1991 by the Massachusetts Institute of Technology
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of M.I.T. not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission. M.I.T. makes no representations about the
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
transformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-d) dir_arg=true
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
chmodcmd=""
else
instcmd=mkdir
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
# Skip lots of stat calls in the usual case.
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift
if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi
pathcomp="${pathcomp}/"
done
fi
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi
# Make a temp file name in the proper directory.
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
# and set any options; do chmod last to preserve setuid bits
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
exit 0
dvipng-1.15/papersiz.c 0000664 0001750 0001750 00000004162 12475135444 014226 0 ustar janla64 janla64 /* 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
.
Copyright (C) 2002-2010 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 */
*p=q;
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) ;
}
dvipng-1.15/RELEASE 0000664 0001750 0001750 00000001021 12475135444 013217 0 ustar janla64 janla64 Release notes for version 1.15 of the dvipng package:
This program makes PNG graphics from DVI files as obtained from TeX
and its relatives.
This is a bugfix release that removes the unnecessarily long delay in --follow
mode and a few segfaults on out-of-memory or missing standard-latex files, and
adds some documentation improvements. It also removes support for libt1, which
is reportedly not developed anymore, and not needed since Freetype does a much
better job.
Report any bugs you find, see README for instructions.
dvipng-1.15/miktex.mak 0000664 0001750 0001750 00000015150 12475135444 014217 0 ustar janla64 janla64 ## miktex.mak: dvipng
##
## Copyright (C) 2004 Christian Schenk
##
## This file 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, or (at your
## option) any later version.
##
## This file 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
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this file; if not, write to the Free Software
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
## 02110-1301 USA.
miktex_cc_no_warnings = 1
miktex_cc_disable_optimization = 1
!include ..\miktex.inc
objects = \
$(outdir)\color.obj \
$(outdir)\draw.obj \
$(outdir)\dvi.obj \
$(outdir)\dvipng.obj \
$(outdir)\font.obj \
$(outdir)\misc.obj \
$(outdir)\papersiz.obj \
$(outdir)\pk.obj \
$(outdir)\ppagelist.obj \
$(outdir)\set.obj \
$(outdir)\special.obj \
$(outdir)\vf.obj \
$(wrapper_obj) \
sources = \
color.c \
draw.c \
dvi.c \
dvipng.c \
font.c \
misc.c \
papersiz.c \
pk.c \
ppagelist.c \
set.c \
special.c \
vf.c \
extra_cdefines = \
-Dalloca=_alloca \
-DUSE_MIKTEX_EXIT \
extra_cincludes = \
-I$(gdlibdir) \
-I$(kpslibdir) \
.c{$(outdir)\}.obj:
$(cc) $(cstandard) \
$(extra_cdefines) \
$(extra_cincludes) \
$(ccopt_output_directory)$(outdir)\ $<
binaries = $(outdir)\dvipng.exe
all: common-all $(binaries)
install: common-install install-binaries
qrt: common-qrt
# -----------------------------------------------------------------------------
# dvipng
# -----------------------------------------------------------------------------
libs = \
$(miktex_lib) \
$(gd_lib) \
$(kps_lib) \
$(gnu_lib) \
$(texmf_lib) \
$(outdir)\dvipng.exe: \
$(outdir) \
$(objects) \
$(libs) \
$(outdir)\dvipng.res \
$(link) $(lstandard) \
-out:$@ \
$(objects) \
$(libs) \
$(outdir)\dvipng.res \
$(outdir)\dvipng.res: \
$(libdir)\miktex-version.h \
$(outdir) \
dvipng-version.h \
dvipng.rc \
$(rc) $(rcstandard) $(rcopt_output_file)$@ dvipng.rc
# -----------------------------------------------------------------------------
# clean-up
# -----------------------------------------------------------------------------
mostlyclean: common-mostlyclean
clean: common-clean mostlyclean
distclean: common-distclean clean
realclean: common-realclean distclean
# -----------------------------------------------------------------------------
# dependencies
# -----------------------------------------------------------------------------
!include ..\common-dependencies.inc
depend: $(sources)
$(MAKEDEPEND1) $(extra_cincludes) $(extra_cdefines) $(sources)
# DO NOT DELETE
$(outdir)\color.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h
$(outdir)\color.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h
$(outdir)\color.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\color.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\color.obj: ..\lib\miktex-features.h commands.h
$(outdir)\draw.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h
$(outdir)\draw.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h
$(outdir)\draw.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\draw.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\draw.obj: ..\lib\miktex-features.h commands.h
$(outdir)\dvi.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h
$(outdir)\dvi.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h
$(outdir)\dvi.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\dvi.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\dvi.obj: ..\lib\miktex-features.h commands.h ..\libgnu\gnu-miktex.h
$(outdir)\dvipng.obj: dvipng.h config.h .\inttypes.h
$(outdir)\dvipng.obj: $(gdlibdir)\gd.h $(gdlibdir)\gd_io.h
$(outdir)\dvipng.obj: $(gdlibdir)\gdfx.h
$(outdir)\dvipng.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\dvipng.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\dvipng.obj: ..\lib\miktex-features.h commands.h
$(outdir)\font.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h
$(outdir)\font.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h
$(outdir)\font.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\font.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\font.obj: ..\lib\miktex-features.h commands.h
$(outdir)\misc.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h
$(outdir)\misc.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h
$(outdir)\misc.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\misc.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\misc.obj: ..\lib\miktex-features.h commands.h
$(outdir)\misc.obj: ..\libgnu\gnu-miktex.h
$(outdir)\papersiz.obj: dvipng.h config.h .\inttypes.h
$(outdir)\papersiz.obj: $(gdlibdir)\gd.h
$(outdir)\papersiz.obj: $(gdlibdir)\gd_io.h
$(outdir)\papersiz.obj: $(gdlibdir)\gdfx.h
$(outdir)\papersiz.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\papersiz.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\papersiz.obj: ..\lib\miktex-features.h commands.h
$(outdir)\pk.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h
$(outdir)\pk.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h
$(outdir)\pk.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\pk.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\pk.obj: ..\lib\miktex-features.h commands.h
$(outdir)\ppagelist.obj: dvipng.h config.h .\inttypes.h
$(outdir)\ppagelist.obj: $(gdlibdir)\gd.h
$(outdir)\ppagelist.obj: $(gdlibdir)\gd_io.h
$(outdir)\ppagelist.obj: $(gdlibdir)\gdfx.h
$(outdir)\ppagelist.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\ppagelist.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\ppagelist.obj: ..\lib\miktex-features.h commands.h
$(outdir)\set.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h
$(outdir)\set.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h
$(outdir)\set.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\set.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\set.obj: ..\lib\miktex-features.h commands.h
$(outdir)\special.obj: dvipng.h config.h .\inttypes.h
$(outdir)\special.obj: $(gdlibdir)\gd.h $(gdlibdir)\gd_io.h
$(outdir)\special.obj: $(gdlibdir)\gdfx.h
$(outdir)\special.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\special.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\special.obj: ..\lib\miktex-features.h commands.h
$(outdir)\vf.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h
$(outdir)\vf.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h
$(outdir)\vf.obj: $(kpslibdir)\kpathsea\kpathsea.h
$(outdir)\vf.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h
$(outdir)\vf.obj: ..\lib\miktex-features.h commands.h
dvipng-1.15/readme.texi 0000644 0001750 0001750 00000010641 12475135444 014352 0 ustar janla64 janla64 @c readme.texi
@c
@c Part of the dvipng distribution
@ifclear man
@include macros.texi
@ifset rawfile
@chapter dvipng
@end ifset
@end ifclear
@c -----------------------
This program makes PNG and/or GIF graphics from DVI files as obtained
from @TeX{} and its relatives.
If GIF support is enabled, GIF output is chosen by using the
@samp{dvigif} binary or with the @samp{--gif} option.
@ifclear man
It is intended to produce anti-aliased screen-resolution images as fast
as is possible. The target audience is people who need to generate and
regenerate many images again and again. The primary target is the
@previewlatex{} (X)Emacs package, a package to preview formulas from
within (X)Emacs. Yes, you get to see your formulas in the (X)Emacs
buffer, see @url{http://www.gnu.org/software/auctex/preview-latex.html}.
Another example is WeBWorK, an internet-based method for delivering
homework problems to students over the internet, giving students
instant feedback as to whether or not their answers are correct, see
@url{http://webwork.math.rochester.edu}.
A more recent addition to the dvipng-using applications out there is
MediaWiki, the software behind Wikipedia and many other wikis out
there. Dvipng is used to render mathematical formulae from version
1.8.0 of MediaWiki, see @url{http://www.mediawiki.org}.
Other applications may also benefit, like web applications as latex2html
and WYSIWYG editors like LyX.
@ifset rawfile
@section Benefits of dvipng
@end ifset
@end ifclear
The benefits of @samp{dvipng}/@samp{dvigif} include
@itemize @bullet
@item
Speed. It is a very fast bitmap-rendering code for DVI files, which
makes it suitable for generating large amounts of images on-the-fly,
as needed in @previewlatex{}, WeBWorK and others.
@item
It does not read the postamble, so it can be started before @TeX{}
finishes. There is a @samp{--follow} switch that makes dvipng wait at
end-of-file for further output, unless it finds the POST marker that
indicates the end of the DVI.
@item
Interactive query of options. dvipng can read options interactively
through stdin, and all options are usable. It is even possible to change
the input file through this interface.
@item
Supports PK, VF, PostScript Type1, and TrueType fonts, subfonts (i.e.,
as used in CJK-@LaTeX{}), color specials, and inclusion of PostScript,
PNG, JPEG or GIF images.
@item
and more...
@end itemize
@ifset rawfile
@section Installation
Read @file{INSTALL}, included in the distribution.
@section Usage
To use dvipng at its simplest, simply type
@example
dvipng foo
@end example
@noindent
where @file{foo.dvi} is the output of @TeX{} that you want to convert to
PNG format. If there are four pages in @file{foo.dvi}, those pages will
be output as @file{foo1.png}, @file{foo2.png}, @file{foo3.png}, and
@file{foo4.png}, respectively.
Many options are available (see the info manual). For a brief summary
of available options, just type
@example
dvipng --help
@end example
@section Availability
The dvipng package is available at Savannah, the GNU project site. Since
dvipng is not part of the GNU project, although released under the GNU
GPL, the web address is
@url{http://savannah.nongnu.org/projects/dvipng}. Instructions for
anonymous CVS access can be found at
@url{http://savannah.nongnu.org/cvs/?group=dvipng}.
@section Contacts
Bug reports should be sent to @email{dvipng@@nongnu.org}.
Questions, suggestions for new features, pleas for help, and/or praise
should go to @email{dvipng@@nongnu.org}. For more information on this
mailing list, send a message with just the word `help' as subject or
body to @email{dvipng-request@@nongnu.org} or look at
@url{http://lists.nongnu.org/mailman/listinfo/dvipng}.
Offers to support further development will be appreciated. For developer
access, ask on @email{dvipng@@nongnu.org}.
@section Copying
This program is released under the GNU Lesser General Public License
version 3, see the COPYING file in the dvipng distribution or
@url{http://www.gnu.org/licenses/}.
Copyright @copyright{} 2002-2014 Jan-@AA{}ke Larsson
@section Todo
@itemize @bullet
@item
Use gs interpreter library for speed and possibly for functionality.
@item
Add more color models for xcolor compatibility
@item
Enable a named pipe as DVI
@item
Further speed improvements.
@item
Other output specials and source specials.
@item
Clean internal structures. Overhaul file handling.
@item
Fix the SELFAUTO stuff at runtime rather than at build time
@end itemize
@end ifset
dvipng-1.15/COPYING.gd 0000664 0001750 0001750 00000004225 12475135444 013651 0 ustar janla64 janla64 The below is the copyright notice of the gd library.
----------------------------------------------------
Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002 by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188
by the National Institutes of Health.
Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 by
Boutell.Com, Inc.
Portions relating to GD2 format copyright 1999, 2000, 2001, 2002
Philip Warner.
Portions relating to PNG copyright 1999, 2000, 2001, 2002 Greg
Roelofs.
Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002 John
Ellson (ellson@lucent.com).
Portions relating to gdft.c copyright 2001, 2002 John Ellson
(ellson@lucent.com).
Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Pierre-Alain Joye (pierre@libgd.org).
Portions relating to JPEG and to color quantization copyright 2000,
2001, 2002, Doug Becker and copyright (C) 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, Thomas G. Lane. This software is
based in part on the work of the Independent JPEG Group. See the
file README-JPEG.TXT for more information.
Portions relating to WBMP copyright 2000, 2001, 2002 Maurice
Szmurlo and Johan Van den Brande.
Permission has been granted to copy, distribute and modify gd in
any context without fee, including a commercial application,
provided that this notice is present in user-accessible supporting
documentation.
This does not affect your ownership of the derived work itself, and
the intent is to assure proper credit for the authors of gd, not to
interfere with your productive use of gd. If you have questions,
ask. "Derived works" includes all programs that utilize the
library. Credit must be given in user-accessible documentation.
This software is provided "AS IS." The copyright holders disclaim
all warranties, either express or implied, including but not
limited to implied warranties of merchantability and fitness for a
particular purpose, with respect to this code and accompanying
documentation.
Although their code does not appear in gd, the authors wish to thank
David Koblas, David Rowley, and Hutchison Avenue Software Corporation
for their prior contributions.
dvipng-1.15/macros.texi 0000664 0001750 0001750 00000002715 12475135444 014406 0 ustar janla64 janla64 @ignore
macros.texi
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
.
Copyright @copyright{} 2002-2008 Jan-@AA{}ke Larsson
@end ignore
@ifclear macros
@set macros
@macro AUCTeX {}
AUC@TeX{}
@end macro
@ifnottex
@macro LaTeX {}
La@TeX{}
@end macro
@macro previewlatex {}
preview-latex
@end macro
@ifset no-acronym
@clear no-acronym
@macro acronym {text}
@sc{\text\}
@end macro
@end ifset
@ifset no-env
@clear no-env
@macro env {text}
@code{\text\}
@end macro
@end ifset
@ifset no-option
@clear no-option
@macro option {text}
@samp{\text\}
@end macro
@end ifset
@end ifnottex
@tex
\gdef\LaTeX{L\kern-.36em\raise.3ex\hbox{\sc{a}}\kern-.15em\TeX}
\gdef\previewlatex{Preview-\LaTeX}
\ifx\acronym\undefined \gdef\acronym#1{{\smallcaps \lowercase{#1}}} \fi
\ifx\env\undefined \global\let\env=\code \fi
\ifx\option\undefined \global\let\option=\samp \fi
@end tex
@end ifclear
dvipng-1.15/dvipng.c 0000644 0001750 0001750 00000007663 12475135444 013667 0 ustar janla64 janla64 /* dvipng.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
.
Copyright (C) 2002-2015 Jan-Åke Larsson
************************************************************************/
/* This program translates TeX's DVI-Code into Portable Network Graphics. */
#define MAIN
#include "dvipng.h"
#ifdef MIKTEX
# define main __cdecl Main
#endif /* MIKTEX */
/**********************************************************************/
/******************************* main *******************************/
/**********************************************************************/
int main(int argc, char ** argv)
{
bool parsestdin;
#ifdef TIMING
# ifdef HAVE_GETTIMEOFDAY
gettimeofday(&Tp, NULL);
timer = Tp.tv_sec + Tp.tv_usec / 1000000.0;
# else
# ifdef HAVE_FTIME
ftime(&timebuffer);
timer = timebuffer.time + timebuffer.millitm / 1000.0;
# endif
# endif
#endif
/* setbuf(stderr, NULL); */
#ifdef HAVE_LIBKPATHSEA
/* Use extra paths as used by dvips */
kpse_set_program_name(argv[0],"dvips");
/* If dvipng is not installed in the texmf tree, and _only_
* SELFAUTO... is used in texmf.cnf, kpathsea will not find a)
* Virtual fonts b) ps2pk.map or psfonts.map c) PostScript fonts
*
* We adjust these things here
*/
/* char selfautodir[MAXPATHLEN];
FILE *self;
self = popen("kpsewhich -expand-var='$SELFAUTODIR'", "r");
if (!self)
...
if (!fgets(selfautodir, MAXPATHLEN, self))
...
fclose(self); */
# ifdef ENV_SELFAUTOLOC
putenv(ENV_SELFAUTOLOC);
# endif
# ifdef ENV_SELFAUTODIR
putenv(ENV_SELFAUTODIR);
# endif
# ifdef ENV_SELFAUTOPARENT
putenv(ENV_SELFAUTOPARENT);
# endif
kpse_set_program_enabled (kpse_pk_format, makeTexPK, kpse_src_compile);
#endif
initcolor();
parsestdin = DecodeArgs(argc, argv);
#ifdef HAVE_LIBKPATHSEA
if (user_mfmode)
if (user_bdpi)
kpse_init_prog("DVIPNG", user_bdpi, user_mfmode, "cmr10");
else {
Warning("--mfmode given without --bdpi");
/* this will give a lot of warnings but... */
kpse_init_prog("DVIPNG", 300, user_mfmode, "cmr10");
}
else
kpse_init_prog("DVIPNG", 300, "cx", "cmr10");
#endif
#ifdef HAVE_FT2
InitPSFontMap();
#endif
DrawPages();
if (parsestdin) {
char line[STRSIZE];
printf("%s> ",dvi!=NULL?dvi->name:"");
while(fgets(line,STRSIZE,stdin)) {
DecodeString(line);
if (dvi!=NULL) {
DVIReOpen(dvi);
DrawPages();
}
printf("%s> ",dvi!=NULL?dvi->name:"");
}
printf("\n");
}
#ifdef TIMING
# ifdef HAVE_GETTIMEOFDAY
gettimeofday(&Tp, NULL);
timer = Tp.tv_sec + Tp.tv_usec/1000000.0 - timer;
# else
# ifdef HAVE_FTIME
ftime(&timebuffer);
timer = timebuffer.time + timebuffer.millitm/1000.0 - timer;
# endif
# endif
if (ndone > 0)
fprintf(stderr,
"Time of complete run: %.2f s, %d page(s), %.4f s/page.\n",
timer, ndone, timer / ndone);
if (my_toc >= 0.0001)
fprintf(stderr,
"Thereof in TIC/TOC region %.5f s.\n",my_toc);
#endif
ClearFonts();
DVIClose(dvi);
ClearColorNames();
#ifdef HAVE_FT2
ClearPSFontMap();
ClearEncoding();
ClearSubfont();
if (libfreetype!=NULL && FT_Done_FreeType(libfreetype))
Fatal("an error occured during freetype destruction");
libfreetype = NULL;
#endif
exit(exitcode);
}
dvipng-1.15/fontmap.c 0000644 0001750 0001750 00000023055 12475135444 014035 0 ustar janla64 janla64 /* fontmap.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
.
Copyright (C) 2002-2015 Jan-Åke Larsson
************************************************************************/
#include "dvipng.h"
static struct filemmap psfont_mmap;
#ifdef HAVE_FT2
static struct filemmap ttfont_mmap;
#endif
static struct psfontmap *psfontmap=NULL;
static char* newword(char** buffer, char* end)
{
char *word,*pos=*buffer;
while(posline = copyfrom->line;
newentry->tfmname = copyword(copyfrom->tfmname);
newentry->psfile = copyword(copyfrom->psfile);
newentry->encname = copyword(copyfrom->encname);
newentry->encoding = copyfrom->encoding;
#ifdef HAVE_FT2
newentry->ft_transformp = copyfrom->ft_transformp;
newentry->subfont = copyfrom->subfont;
#endif
newentry->end = copyfrom->end;
} else {
newentry->line = NULL;
newentry->tfmname = NULL;
newentry->psfile = NULL;
newentry->encname = NULL;
newentry->encoding = NULL;
#ifdef HAVE_FT2
newentry->ft_transformp = NULL;
newentry->subfont = NULL;
#endif
newentry->end = NULL;
}
newentry->next=psfontmap;
psfontmap=newentry;
return(newentry);
}
static struct psfontmap *SearchPSFontMap(char* fontname,
struct filemmap* search_mmap)
{
static char *pos=NULL,*end=NULL;
static struct filemmap* searching_mmap=NULL;
struct psfontmap *entry=NULL;
if (pos==end && search_mmap!=searching_mmap) {
searching_mmap=search_mmap;
pos=searching_mmap->data;
end=searching_mmap->data+searching_mmap->size;
}
while(postfmname,fontname)!=0)) {
while(pos < end
&& (*pos=='\r' || *pos=='\n' || *pos==' ' || *pos=='\t'
|| *pos=='%' || *pos=='*' || *pos==';' || *pos=='#')) {
while(pos < end && *pos!='\r' && *pos!='\n') pos++; /* skip comments/empty rows */
pos++;
}
if (pos < end) {
entry=NewPSFont(NULL);
entry->line = pos;
/* skip tfmname = newword(&pos,end);
while(pos < end && *pos!='\r' && *pos!='\n') pos++;
entry->end = pos;
}
pos++;
}
if (entry!=NULL && strcmp(entry->tfmname,fontname)!=0)
entry=NULL;
return(entry);
}
void ClearPSFontMap(void)
{
struct psfontmap *entry;
while(psfontmap!=NULL) {
entry=psfontmap;
psfontmap=psfontmap->next;
free(entry->tfmname);
if (entry->psfile!=NULL)
free(entry->psfile);
if (entry->encname!=NULL)
free(entry->encname);
free(entry);
}
UnMmapFile(&psfont_mmap);
#ifdef HAVE_FT2
UnMmapFile(&ttfont_mmap);
#endif
}
static void ReadPSFontMap(struct psfontmap *entry)
{
char *pos,*end,*psname;
int nameno = 0;
DEBUG_PRINT(DEBUG_FT,("\n PSFONTMAP: %s ",entry->tfmname));
pos=entry->line;
end=entry->end;
while(pos < end) {
if (*pos=='<') { /* filename follows */
pos++;
if (pospsfile = newword((char**)&pos,end);
DEBUG_PRINT(DEBUG_FT,("<%s ",entry->psfile));
} else if (posencname = newword((char**)&pos,end);
DEBUG_PRINT(DEBUG_FT,("<[%s ",entry->encname));
} else { /* encname=word;
DEBUG_PRINT(DEBUG_FT,("<[%s ",entry->encname));
} else { /* psfile=word;
DEBUG_PRINT(DEBUG_FT,("<%s ",entry->psfile));
}
}
} else if (*pos=='"') { /* PS code: reencoding/tranformation exists */
char *word;
double cxx=1.0,cxy=0.0;
pos++;
DEBUG_PRINT(DEBUG_FT,("\""));
while(pos < end && *pos!='"') {
word=newword((char**)&pos,end);
while(pos < end && (*pos==' ' || *pos=='\t')) pos++;
if (pos+10ft_transformp=&(entry->ft_transform);
entry->ft_transform.xx=(FT_Fixed)(cxx*0x10000);
entry->ft_transform.xy=(FT_Fixed)(cxy*0x10000);
entry->ft_transform.yx=0;
entry->ft_transform.yy=0x10000;
#endif
DEBUG_PRINT(DEBUG_FT,("\" "));
pos++;
} else { /* bare word */
switch (++nameno) {
case 1: /* first word is tfmname and perhaps psname, NOT psfile */
while(postfmname;
break;
case 2: /* second word is psname, NOT psfile */
psname = newword((char**)&pos,end);
DEBUG_PRINT(DEBUG_FT,("(%s) ",psname));
free(psname);
break;
case 3: /* third word is encoding */
entry->encname = newword((char**)&pos,end);
DEBUG_PRINT(DEBUG_FT,("<[%s ",entry->encname));
break;
default:
while(pospsfile==NULL) {
/* No psfile-name given, use tfmname */
entry->psfile=copyword(entry->tfmname);
DEBUG_PRINT(DEBUG_FT,(" <%s ",entry->psfile));
}
if (entry->encname!=NULL
&& (entry->encoding=FindEncoding(entry->encname))==NULL)
Warning("unable to load font encoding '%s' for %s",
entry->encname,entry->tfmname);
}
struct psfontmap* FindPSFontMap(char* fontname)
{
struct psfontmap *entry;
static struct filemmap* search_mmap_p=&psfont_mmap;
entry=psfontmap;
while(entry!=NULL && strcmp(entry->tfmname,fontname)!=0)
entry=entry->next;
if(entry==NULL) {
entry=SearchPSFontMap(fontname,search_mmap_p);
#ifdef HAVE_FT2
if(entry==NULL && search_mmap_p!=&ttfont_mmap) {
search_mmap_p=&ttfont_mmap;
entry=SearchPSFontMap(fontname,search_mmap_p);
}
}
if(entry==NULL) {
struct psfontmap* entry_subfont=NULL;
entry=psfontmap;
while(entry!=NULL && strcmp(entry->tfmname,fontname)!=0) {
while(entry!=NULL && strchr(entry->tfmname,'@')==NULL)
entry=entry->next;
if (entry!=NULL) {
entry_subfont=FindSubFont(entry,fontname);
if (entry_subfont!=NULL)
entry=entry_subfont;
else
entry=entry->next;
}
}
#endif
}
if (entry!=NULL && entry->psfile==NULL)
ReadPSFontMap(entry);
if (entry!=NULL && entry->encname!=NULL && entry->encoding==NULL)
/* Encoding given but it cannot be found. Unusable font */
return(NULL);
return(entry);
}
dvipng-1.15/misc.c 0000644 0001750 0001750 00000061115 12475135444 013323 0 ustar janla64 janla64 /* misc.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
.
Copyright (C) 2002-2015 Jan-Åke Larsson
************************************************************************/
#include "dvipng.h"
#ifdef HAVE_LIBGEN_H
# include
#else
#define basename xbasename
#endif
#include /* open/close */
#ifdef HAVE_MMAP
#include
#endif
#include
static char *programname;
/*-->DecodeArgs*/
/*********************************************************************/
/***************************** DecodeArgs ****************************/
/*********************************************************************/
bool DecodeArgs(int argc, char ** argv)
{
int i; /* argument index for options */
bool ppused=false; /* Flag when -pp is used */
int32_t number; /* Temporary storage for numeric parameter */
char *dviname=NULL; /* Name of dvi file */
char *outname=NULL; /* Name of output file */
if (argv[0]) {
#ifdef HAVE_GDIMAGEGIF
programname=strrchr(argv[0],'/');
if (programname!=NULL)
programname++;
else
programname=argv[0];
if (strncmp(programname,"dvigif",6)==0)
option_flags |= GIF_OUTPUT;
#endif
programname=argv[0];
Message(BE_NONQUIET,"This is %s",programname);
if (strcmp(basename(programname),PACKAGE_NAME)!=0)
Message(BE_NONQUIET," (%s)", PACKAGE_NAME);
Message(BE_NONQUIET," %s Copyright 2002-2015 Jan-Ake Larsson\n",
PACKAGE_VERSION);
}
for (i=1; i'9' && *p!='-') {
if (strncmp(p,"vinum",5)==0) {
if (p[5] != '0') {
option_flags |= DVI_PAGENUM;
Message(PARSE_STDIN,"DVI page number output on\n",p);
} else {
option_flags &= ~DVI_PAGENUM;
Message(PARSE_STDIN,"DVI page number output off\n");
}
break;
} else if (strncmp(p,"epth",4)==0) { /* Depth reporting */
if (p[4] != '0') {
option_flags |= REPORT_DEPTH;
Message(PARSE_STDIN,"Depth reporting on\n",p);
} else {
option_flags &= ~REPORT_DEPTH;
Message(PARSE_STDIN,"Depth reporting off\n");
}
break;
}
goto DEFAULT;
} else {
#ifdef DEBUG
if (*p == 0 && argv[i+1])
p = argv[i+1];
debug = atoi(p);
if (debug > 0) {
if (p == argv[i+1]) i++;
} else
debug = DEBUG_DEFAULT;
Message(PARSE_STDIN,"Debug output enabled\n");
#ifdef HAVE_LIBKPATHSEA
kpathsea_debug = debug / LASTDEBUG / 2 ;
#endif
#else
Warning("This instance of %s was compiled without the debug (-d) option",
programname);
#endif
break;
}
case 'o': /* Output file is specified */
if (*p == 0 && argv[i+1])
p = argv[++i] ;
outname=p;
/* remove .png extension */
Message(PARSE_STDIN,"Output file: %s\n",
outname);
break;
#ifdef MAKETEXPK
case 'M':
/* -M, -M1 => don't make font; -M0 => do. */
makeTexPK = (*p == '0');
#ifdef HAVE_LIBKPATHSEA
kpse_set_program_enabled (kpse_pk_format, makeTexPK, kpse_src_cmdline);
#endif
if (makeTexPK)
Message(PARSE_STDIN,"MakeTeXPK enabled\n");
else
Message(PARSE_STDIN,"MakeTeXPK disabled\n");
break;
#endif /* MAKETEXPK */
case 'm':
if (strcmp(p,"ode") == 0 ) {
if (argv[i+1])
user_mfmode = argv[++i] ;
Message(PARSE_STDIN,"MetaFont mode: %s\n",user_mfmode);
break;
}
goto DEFAULT;
case 'h':
if (strcmp(p,"elp") == 0 ) {
break;
} else if (strncmp(p,"eight",5) == 0 ) { /* Height reporting */
if (p[5] != '0') {
option_flags |= REPORT_HEIGHT;
Message(PARSE_STDIN,"Height reporting on\n",p);
} else {
option_flags &= ~REPORT_HEIGHT;
Message(PARSE_STDIN,"Height reporting off\n");
}
break;
}
goto DEFAULT;
case 'O' : /* Offset */
if (*p == 0 && argv[i+1])
p = argv[++i] ;
handlepapersize(p, &x_offset_def, &y_offset_def) ;
Message(PARSE_STDIN,"Offset: (%d,%d)\n",x_offset_def,y_offset_def);
break ;
case 'e':
if (strncmp(p,"xpand-bbox",10) == 0 ) {
if (p[10] != '0') {
option_flags |= EXPAND_BBOX;
Message(PARSE_STDIN,"BBox expansion on\n",p);
} else {
option_flags &= ~EXPAND_BBOX;
Message(PARSE_STDIN,"BBox expansion off\n");
}
break;
}
goto DEFAULT;
case 'T' :
if (*p == 0 && argv[i+1])
p = argv[++i];
if (strcmp(p,"bbox")==0) {
x_width_def=0;
y_width_def=0;
Message(PARSE_STDIN,"Pagesize: (bbox)\n");
} else if (strcmp(p,"tight")==0) {
x_width_def=-1;
y_width_def=-1;
Message(PARSE_STDIN,"Pagesize: (tight bbox)\n");
} else {
handlepapersize(p, &x_width_def, &y_width_def) ;
Message(PARSE_STDIN,"Pagesize: (%d,%d)\n",
x_width_def,y_width_def);
}
break ;
case 't': /* specify paper format, only for cropmarks */
#ifdef HAVE_GDIMAGECREATETRUECOLOR
/* Truecolor */
if (strncmp(p,"ruecolor",8)==0) {
if (p[8] != '0') {
option_flags |= FORCE_TRUECOLOR;
Message(PARSE_STDIN,"Truecolor mode on\n",p);
} else {
option_flags &= ~FORCE_TRUECOLOR;
Message(PARSE_STDIN,"Truecolor mode off\n");
}
} else
#endif
{ /* cropmarks not implemented yet */
if (*p == 0 && argv[i+1])
p = argv[++i] ;
if (strcmp(p,"a4")==0) {
handlepapersize("210mm,297mm",&x_pwidth,&y_pwidth);
} else if (strcmp(p,"letter")==0) {
handlepapersize("8.5in,11in",&x_pwidth,&y_pwidth);
} else if (strcmp(p,"legal")==0) {
handlepapersize("8.5in,14in",&x_pwidth,&y_pwidth);
} else if (strcmp(p,"executive")==0) {
handlepapersize("7.25in,10.5in",&x_pwidth,&y_pwidth);
} else
Fatal("papersize %s is not implemented",p);
Message(PARSE_STDIN,"Papersize: %s\n",p);
}
break;
/* case 'c': */
/* if (strncmp(p,"acheimages",10)==0) { */
/* if (p[10] != '0') { */
/* option_flags |= CACHE_IMAGES; */
/* Message(PARSE_STDIN,"Caching images\n",p); */
/* } else { */
/* option_flags &= ~CACHE_IMAGES; */
/* Message(PARSE_STDIN,"Not caching images\n"); */
/* } */
/* break; */
/* } */
/* goto DEFAULT; */
case 'b':
if ( *p == 'g' ) { /* -bg background color */
p++;
if (*p == 0 && argv[i+1])
p = argv[++i] ;
if (strncmp(p,"Transparent",11) == 0 )
option_flags |= BG_TRANSPARENT_ALPHA;
else if (strncmp(p,"transparent",11) == 0 )
option_flags |= BG_TRANSPARENT;
else
background(p);
if (option_flags & BG_TRANSPARENT)
Message(PARSE_STDIN,"Transp. background (fallback rgb %d,%d,%d)\n",
cstack[0].red,cstack[0].green,cstack[0].blue);
else
Message(PARSE_STDIN,"Background: rgb %d,%d,%d\n",
cstack[0].red,cstack[0].green,cstack[0].blue);
break;
} else if (strcmp(p, "dpi")==0) {
p+=3;
if (*p == 0 && argv[i+1])
p = argv[++i];
number = atoi(p);
if (number < 10 || number > 10000)
Warning("Bad --bdpi parameter, ignored");
else {
user_bdpi=number;
Message(PARSE_STDIN,"Bdpi: %d\n",user_bdpi);
}
break;
} else if ( *p == 'd' ) { /* -bd border width */
int tmpi;
char* tmps;
p++;
if (*p == 0 && argv[i+1])
p = argv[++i] ;
tmpi = strtol(p, &tmps, 10);
if (p 1000000)
Warning("Bad magnification parameter (-x or -y), ignored");
else {
usermag=number;
Message(PARSE_STDIN,"Magstep: %d\n",usermag);
/*overridemag = (c == 'x' ? 1 : -1) ;*/
}
break ;
case 'g' :
if (strncmp(p,"amma",4)==0) { /* --gamma correction */
double gamma=0.0;
p+=4;
if (*p == 0 && argv[i+1])
p = argv[++i];
if (p!=NULL)
gamma=atof(p);
if (gamma==0.0) {
Warning("Bad gamma value, default is %f",DEFAULT_GAMMA);
gamma=DEFAULT_GAMMA;
}
Gamma(gamma);
Message(PARSE_STDIN,"Gamma value is %s\n", gamma);
break;
#ifdef HAVE_GDIMAGEGIF
} else if (strncmp(p,"if",2)==0) { /* --gif output */
option_flags |= GIF_OUTPUT;
Message(PARSE_STDIN,"GIF output\n");
break;
#endif
}
goto DEFAULT;
case 'p' :
if (*p == 'p') { /* a -pp specifier for a page list */
ppused=true;
p++ ;
if (*p == 0 && argv[i+1])
p = argv[++i];
Message(PARSE_STDIN,"Page list: %s\n",p);
if (ParsePages(p))
Fatal("bad page list specifier (-pp)");
} else if (strncmp(p,"ng",2)==0) { /* --png output */
option_flags &= ~GIF_OUTPUT;
Message(PARSE_STDIN,"PNG output\n");
} else if (strncmp(p,"icky",4)==0) {
if (p[4] != '0') {
option_flags |= MODE_PICKY;
Message(PARSE_STDIN,"No images output for pages with warnings\n",p);
} else {
option_flags &= ~MODE_PICKY;
Message(PARSE_STDIN,"Images output even for pages with warnings\n");
}
} else if (strncmp(p,"alette",6)==0) {
if (p[6] != '0') {
option_flags |= FORCE_PALETTE;
Message(PARSE_STDIN,"Forcing 256-color PNG output\n",p);
} else {
option_flags &= ~FORCE_PALETTE;
Message(PARSE_STDIN,"Allows truecolor PNG output\n");
}
} else { /* a -p specifier for first page */
int32_t firstpage;
bool abspage=false;
if (*p == 0 && argv[i+1])
p = argv[++i] ;
if (*p == '=') {
abspage=true;
p++ ;
}
if ((*p>='0'&&*p<='9') || (*p=='-' && *(p+1)>='0' && *(p+1)<='9')) {
firstpage = atoi(p);
FirstPage(firstpage,abspage);
Message(PARSE_STDIN,"First page: %d\n",firstpage);
} else
Warning("Bad firstpage (-p) parameter, ignored");
}
break ;
case 's' :
if (strncmp(p,"trict",5)==0) {
if (p[5] != '0') {
option_flags |= MODE_STRICT;
Message(PARSE_STDIN,"Warnings are fatal\n",p);
} else {
option_flags &= ~MODE_STRICT;
Message(PARSE_STDIN,"Warnings are not fatal\n");
}
} else
goto DEFAULT;
break ;
case 'n' :
if (strncmp(p,"oghostscript",12)==0) {
if (p[12] != '0') {
option_flags |= NO_GHOSTSCRIPT;
Message(PARSE_STDIN,"No GhostScript calls\n",p);
} else {
option_flags &= ~NO_GHOSTSCRIPT;
Message(PARSE_STDIN,"GhostScript calls made\n");
}
} else if (strncmp(p,"ogssafer",8)==0) {
if (p[8] != '0') {
option_flags |= NO_GSSAFER;
Message(PARSE_STDIN,"GhostScript calls does not use -dSAFER\n",p);
} else {
option_flags &= ~NO_GSSAFER;
Message(PARSE_STDIN,"GhostScript calls use -dSAFER\n");
}
} else if (strncmp(p,"ogs",3)==0) {
if (p[3] != '0') {
option_flags |= NO_GHOSTSCRIPT;
Message(PARSE_STDIN,"No GhostScript calls\n",p);
} else {
option_flags &= ~NO_GHOSTSCRIPT;
Message(PARSE_STDIN,"GhostScript calls made\n");
}
} else if (strncmp(p,"orawps",6)==0) {
if (p[6] != '0') {
option_flags |= NO_RAW_PS;
Message(PARSE_STDIN,"Conversion of raw PostScript will not be attempted\n",p);
} else {
option_flags &= ~NO_RAW_PS;
Message(PARSE_STDIN,"Conversion of raw PostScript will be attempted\n",p);
}
} else
goto DEFAULT;
break ;
case 'l':
{
int32_t lastpage;
bool abspage=false;
if (*p == 0 && argv[i+1])
p = argv[++i] ;
if (*p == '=') {
abspage=true;
p++ ;
}
if ((*p>='0'&&*p<='9') || (*p=='-' && *(p+1)>='0' && *(p+1)<='9')) {
lastpage = atoi(p);
LastPage(lastpage,abspage);
Message(PARSE_STDIN,"Last page: %d\n",lastpage);
} else
Warning("Bad lastpage (-l) parameter, ignored");
}
break ;
case 'q': /* quiet operation */
if (*p != '0')
option_flags &= (~BE_NONQUIET & ~BE_VERBOSE);
else
option_flags |= BE_NONQUIET;
break;
case 'r': /* process pages in reverse order */
if (*p != '0') {
Message(PARSE_STDIN,"Reverse order\n");
Reverse(true);
} else {
Message(PARSE_STDIN,"Normal order\n");
Reverse(false);
}
break;
case 'v': /* verbatim mode */
if (strcmp(p, "ersion")==0) {
if (strcmp(basename(programname),PACKAGE_NAME)!=0)
printf("%s (%s) %s\n",basename(programname),
PACKAGE_NAME,PACKAGE_VERSION);
else
puts(PACKAGE_STRING);
#ifdef HAVE_LIBKPATHSEA
puts (KPSEVERSION);
#endif
#ifdef HAVE_FT2
printf("Compiled with Freetype %d.%d.%d\n",
FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH);
# ifdef HAVE_FT_LIBRARY_VERSION
if (FT_Init_FreeType( &libfreetype ))
Warning("the Freetype library seems unusable");
else {
FT_Int amajor, aminor, apatch;
FT_Library_Version( libfreetype, &amajor, &aminor, &apatch );
printf("Using libft %d.%d.%d\n",amajor, aminor, apatch);
FT_Done_FreeType(libfreetype);
}
# endif
#endif
puts ("Copyright (C) 2002-2015 Jan-Ake Larsson.\n\
There is NO warranty. You may redistribute this software\n\
under the terms of the GNU Lesser General Public License\n\
version 3, see the COPYING file in the dvipng distribution\n\
or .");
exit (EXIT_SUCCESS);
}
if (*p != '0')
option_flags |= BE_NONQUIET | BE_VERBOSE;
else
option_flags &= ~BE_VERBOSE;
break;
case 'D' :
if (*p == 0 && argv[i+1])
p = argv[++i] ;
number = atoi(p);
if (number < 10 || number > 10000)
Warning("Bad resolution (-D) parameter, ignored") ;
else {
dpi=number;
Message(PARSE_STDIN,"Dpi: %d\n",dpi);
}
break;
case 'Q': /* quality (= shrinkfactor) */
if (*p == 0 && argv[i+1])
p = argv[++i];
if (*p>='0'&&*p<='9') {
shrinkfactor = atoi(p);
Message(PARSE_STDIN,"Quality: %d\n",shrinkfactor);
} else {
Warning("Non-numeric quality (-Q) value, ignored");
}
break;
case 'w':
if (strncmp(p,"idth",4) == 0 ) { /* Width reporting */
if (p[4] != '0') {
option_flags |= REPORT_WIDTH;
Message(PARSE_STDIN,"Width reporting on\n",p);
} else {
option_flags &= ~REPORT_WIDTH;
Message(PARSE_STDIN,"Width reporting off\n");
}
break;
}
goto DEFAULT;
#ifdef HAVE_GDIMAGEPNGEX
case 'z':
if (*p == 0 && argv[i+1])
p = argv[++i];
number = atoi(p);
if (number<1 || number>9)
Warning("Bad compression (-z) value, ignored");
else {
compression=number;
Message(PARSE_STDIN,"Compression: %d\n",shrinkfactor);
}
break;
#endif
case '\0':
option_flags |= PARSE_STDIN;
break;
DEFAULT: default:
Warning("%s is not a valid option", argv[i]);
}
} else {
dviname=argv[i];
}
}
if (dviname != NULL) {
if (dvi != NULL && dvi->filep != NULL)
DVIClose(dvi);
dvi=DVIOpen(dviname,outname);
}
if (dvi==NULL) {
fprintf(stdout,"\nUsage: %s [OPTION]... FILENAME[.dvi]\n", programname);
fprintf(stdout,"Options are chosen to be similar to dvips' options where possible:\n");
#ifdef DEBUG
fprintf(stdout," -d # Debug (# is the debug bitmap, 1 if not given)\n");
#endif
fprintf(stdout," -D # Output resolution\n");
fprintf(stdout," -l # Last page to be output\n");
fprintf(stdout," -o f Output file, '%%d' is pagenumber\n");
fprintf(stdout," -O c Image offset\n");
fprintf(stdout," -p # First page to be output\n");
fprintf(stdout," -pp #,#.. Page list to be output\n");
fprintf(stdout," -q* Quiet operation\n");
fprintf(stdout," -T c Image size (also accepts '-T bbox' and '-T tight')\n");
fprintf(stdout," -v* Verbose operation\n");
fprintf(stdout," - Interactive query of options\n");
fprintf(stdout,"\nThese do not correspond to dvips options:\n");
fprintf(stdout," -bd # Transparent border width in dots\n");
fprintf(stdout," -bd s Transparent border fallback color (TeX-style color)\n");
fprintf(stdout," -bg s Background color (TeX-style color or 'Transparent')\n");
fprintf(stdout," --depth* Output the image depth on stdout\n");
fprintf(stdout," --dvinum* Use TeX page numbers in output filenames\n");
fprintf(stdout," -fg s Foreground color (TeX-style color)\n");
fprintf(stdout," --follow* Wait for data at end-of-file\n");
#ifdef HAVE_FT2
fprintf(stdout," --freetype* FreeType font rendering (preferred, default on)\n");
#endif
fprintf(stdout," --gamma # Control color interpolation\n");
#ifdef HAVE_GDIMAGEGIF
fprintf(stdout," --gif Output GIF images (dvigif default)\n");
#endif
fprintf(stdout," --height* Output the image height on stdout\n");
fprintf(stdout," --nogs* Don't use ghostscript for PostScript specials\n");
fprintf(stdout," --nogssafer* Don't use -dSAFER in ghostscript calls\n");
fprintf(stdout," --norawps* Don't convert raw PostScript specials\n");
#ifdef HAVE_GDIMAGECREATETRUECOLOR
fprintf(stdout," --palette* Force palette output\n");
#endif
fprintf(stdout," --picky When a warning occurs, don't output image\n");
#ifdef HAVE_GDIMAGEGIF
fprintf(stdout," --png Output PNG images (dvipng default)\n");
#endif
fprintf(stdout," --strict When a warning occurs, exit\n");
#ifdef HAVE_GDIMAGECREATETRUECOLOR
fprintf(stdout," --truecolor* Truecolor output\n");
#endif
fprintf(stdout," -Q # Quality (PK subsampling)\n");
fprintf(stdout," --width* Output the image width on stdout\n");
#ifdef HAVE_GDIMAGEPNGEX
fprintf(stdout," -z # PNG compression level\n");
#endif
fprintf(stdout,"\n # = number f = file s = string * = suffix, '0' to turn off\n");
fprintf(stdout," c = comma-separated dimension pair (e.g., 3.2in,-32.1cm)\n\n");
/*#ifdef HAVE_LIBKPATHSEA
{
extern DllImport char *kpse_bug_address;
putc ('\n', stdout);
fputs (kpse_bug_address, stdout);
}
#endif*/
if ((option_flags & PARSE_STDIN) == 0) {
exit(EXIT_SUCCESS);
}
}
if ((option_flags & PARSE_STDIN) == 0 && (!ppused))
ParsePages("-");
return((option_flags & PARSE_STDIN) != 0);
}
void DecodeString(char *string)
{
#define PARSEARGS 10
char *strv[PARSEARGS];
int strc=1;
strv[0]=NULL; /* No program name */
while (*string==' ' || *string=='\t' || *string=='\r' || *string=='\n')
string++;
while (*string!='\0') {
strv[strc++]=string;
if (*string!='\'') {
/* Normal split at whitespace */
while (*string!=' ' && *string!='\t' \
&& *string!='\n' && *string!='\r' && *string!='\0')
string++;
} else {
/* String delimiter found , so search for next */
strv[strc-1]=++string;
while (*string!='\'' && *string!='\0')
string++;
}
if (*string!='\0')
*string++='\0';
while (*string==' ' || *string=='\t' || *string=='\r' || *string=='\n')
string++;
}
if (strc>1) /* Nonempty */
(void) DecodeArgs(strc,strv);
}
uint32_t UNumRead(unsigned char* current, register int n)
{
uint32_t x = (unsigned char) *(current)++; /* number being constructed */
while(--n)
x = (x << 8) | *(current)++;
return(x);
}
int32_t SNumRead(unsigned char* current, register int n)
{
int32_t x = (signed char) *(current)++; /* number being constructed */
while(--n)
x = (x << 8) | *(current)++;
return(x);
}
/**********************************************************************/
/****************************** Fatal *******************************/
/**********************************************************************/
void Fatal (const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
fflush(stdout);
fprintf(stderr, "\n");
fprintf(stderr, "%s: Fatal error, ", programname);
vfprintf(stderr, fmt, args);
fprintf(stderr, "\n\n");
va_end(args);
ClearFonts();
#ifdef HAVE_FT2
if (libfreetype)
(void) FT_Done_FreeType(libfreetype); /* at this point, ignore error */
#endif
exit(EXIT_FATAL);
}
/*-->Warning*/
/**********************************************************************/
/***************************** Warning ******************************/
/**********************************************************************/
void Warning(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
if ( option_flags & BE_NONQUIET ) {
fflush(stdout);
fprintf(stderr, "%s warning: ", programname);
vfprintf(stderr, fmt, args);
fprintf(stderr, " ");
}
va_end(args);
}
/*-->Message*/
/**********************************************************************/
/***************************** Message ******************************/
/**********************************************************************/
void Message(int activeflags, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
if ( option_flags & activeflags ) {
vfprintf(stdout, fmt, args);
}
va_end(args);
}
bool MmapFile (char *filename,struct filemmap *fmmap)
{
#ifndef WIN32
struct stat stat;
#endif
DEBUG_PRINT(DEBUG_DVI,("\n OPEN FILE:\t'%s'", filename));
fmmap->data=NULL;
#ifndef WIN32
if ((fmmap->fd = open(filename,O_RDONLY)) == -1) {
Warning("cannot open file <%s>", filename);
return(true);
}
fstat(fmmap->fd,&stat);
fmmap->size=stat.st_size;
# ifdef HAVE_MMAP
fmmap->data = mmap(NULL,fmmap->size, PROT_READ, MAP_SHARED,fmmap->fd,0);
if (fmmap->data == (char*)-1) {
Warning("cannot mmap file <%s>",filename);
fmmap->data=NULL;
close(fmmap->fd);
return(true);
}
# else /* HAVE_MMAP */
if ((fmmap->data = malloc(fmmap->size+1)) == NULL) {
Warning("cannot malloc space for <%s>",filename);
close(fmmap->fd);
return(true);
}
if (read(fmmap->fd,fmmap->data,fmmap->size)size) {
Warning("too little data in <%s>",filename);
free(fmmap->data);
fmmap->data=NULL;
close(fmmap->fd);
return(true);
}
close(fmmap->fd);
# endif /* HAVE_MMAP */
#else /* WIN32 */
fmmap->hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0,
OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, 0);
if (fmmap->hFile == INVALID_HANDLE_VALUE) {
Warning("cannot open file <%s>", filename);
return(true);
}
fmmap->size = GetFileSize(fmmap->hFile, 0);
fmmap->hMap = CreateFileMapping(fmmap->hFile, 0, PAGE_READONLY, 0, 0, 0);
if (fmmap->hMap == 0) {
CloseHandle (fmmap->hFile);
Warning("cannot CreateFileMapping() file <%s>", filename);
return(true);
}
fmmap->data = MapViewOfFile(fmmap->hMap, FILE_MAP_READ, 0, 0, 0);
if (fmmap->data == NULL) {
Warning("cannot MapViewOfFile() file <%s>", filename);
CloseHandle (fmmap->hMap);
CloseHandle (fmmap->hFile);
return(true);
}
#endif /* WIN32 */
return(false);
}
void UnMmapFile(struct filemmap* fmmap)
{
if (fmmap->data!=NULL) {
#ifndef WIN32
# ifdef HAVE_MMAP
if (munmap(fmmap->data,fmmap->size))
Warning("cannot munmap file at 0x%X",fmmap->data);
if (close(fmmap->fd))
Warning("cannot close file descriptor %d",fmmap->fd);
# else /* HAVE_MMAP */
free(fmmap->data);
# endif /* HAVE_MMAP */
#else /* WIN32 */
UnmapViewOfFile (fmmap->data);
CloseHandle (fmmap->hMap);
CloseHandle (fmmap->hFile);
#endif /* WIN32 */
}
fmmap->data=NULL;
}
dvipng-1.15/COPYING 0000664 0001750 0001750 00000104513 12475135444 013261 0 ustar janla64 janla64 GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program 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 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
Copyright (C)
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
.
dvipng-1.15/pk.c 0000644 0001750 0001750 00000026600 12475135444 013002 0 ustar janla64 janla64 /* pk.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
.
Copyright (C) 2002-2009 Jan-Åke Larsson
************************************************************************/
#include "dvipng.h"
#define PK_POST 245
#define PK_PRE 247
#define PK_ID 89
unsigned char dyn_f;
int repeatcount;
int poshalf;
static unsigned char getnyb(unsigned char** pos)
{
if (poshalf == 0) {
poshalf=1;
return(**pos / 16);
} else {
poshalf=0;
return(*(*pos)++ & 15);
}
}
static uint32_t pk_packed_num(unsigned char** pos)
{
register int i;
uint32_t j;
i = (int)getnyb(pos);
if (i == 0) {
do {
j = (uint32_t)getnyb(pos);
i++;
} while (j == 0);
while (i > 0) {
j = j * 16 + (uint32_t)getnyb(pos);
i--;
};
return (j - 15 + (13 - dyn_f) * 16 + dyn_f);
} else if (i <= (int)dyn_f) {
return ((uint32_t)i);
} else if (i < 14) {
return ((i-(uint32_t)dyn_f - 1) * 16 + (uint32_t)getnyb(pos)
+ dyn_f + 1);
} else {
if (i == 14) {
repeatcount = (int)pk_packed_num(pos);
} else {
repeatcount = 1;
}
return (pk_packed_num(pos)); /* tail end recursion !! */
}
}
static unsigned char* skip_specials(unsigned char* pos)
{
uint32_t i;
while (*pos >= 240 && *pos != PK_POST) {
i=0;
switch (*pos++) {
case 243:
i = *pos++;
case 242:
i = 256 * i + *pos++;
case 241:
i = 256 * i + *pos++;
case 240:
i = 256 * i + *pos++;
DEBUG_PRINT(DEBUG_PK,("\n PK SPECIAL\t'%.*s' ",(int)i,pos));
pos += i;
break;
case 244:
#ifdef DEBUG
{
uint32_t c;
c=UNumRead(pos,4);
DEBUG_PRINT(DEBUG_PK,("\n PK SPECIAL\t%d",c));
}
#endif
pos += 4;
break;
case 245:
break;
case 246:
DEBUG_PRINT(DEBUG_PK,("\n PK\tNOP "));
break;
case 247: case 248: case 249: case 250:
case 251: case 252: case 253: case 254:
case 255:
Fatal("unexpected PK flagbyte %d", (int)*pos);
}
}
return(pos);
}
void LoadPK(int32_t c, register struct char_entry * ptr)
{
unsigned short shrunk_width,shrunk_height;
unsigned short width,height;
short xoffset,yoffset;
unsigned short i_offset,j_offset;
int i,j,k,n;
int count=0;
bool paint_switch;
unsigned char *pos,*buffer;
DEBUG_PRINT(DEBUG_PK,("\n LOAD PK CHAR\t%d",c));
pos=ptr->pkdata;
if ((ptr->flag_byte & 7) == 7) n=4;
else if ((ptr->flag_byte & 4) == 4) n=2;
else n=1;
dyn_f = ptr->flag_byte / 16;
paint_switch = ((ptr->flag_byte & 8) != 0);
/*
* Read character preamble
*/
if (n != 4) {
ptr->tfmw = UNumRead(pos, 3);
/* +n: vertical escapement not used */
pos+=3+n;
} else {
ptr->tfmw = UNumRead(pos, 4);
/* +4: horizontal escapement not used */
/* +n: vertical escapement not used */
pos+=8+n;
}
DEBUG_PRINT(DEBUG_PK,(" %d",ptr->tfmw));
ptr->tfmw = (dviunits)
((int64_t) ptr->tfmw * currentfont->s / 0x100000 );
DEBUG_PRINT(DEBUG_PK,(" (%d)",ptr->tfmw));
width = UNumRead(pos, n);
height = UNumRead(pos+=n, n);
DEBUG_PRINT(DEBUG_PK,(" %dx%d",width,height));
if (width > 0x7fff || height > 0x7fff)
Fatal("character %d too large in file %s", c, currentfont->name);
/*
* Hotspot issues: Shrinking to the topleft corner rather than the
hotspot will displace glyphs a fraction of a pixel. We deal with
this in as follows: The glyph is shrunk to its hotspot by
offsetting the bitmap somewhat to put the hotspot in the lower
left corner of a "shrink square". Shrinking to the topleft corner
will then act as shrinking to the hotspot. This may enlarge the
bitmap somewhat, of course. (Also remember that the below
calculation of i/j_offset is in integer arithmetics.)
There will still be a displacement from rounding the dvi
position, but vertically it will be equal for all glyphs on a
line, so we displace a whole line vertically by fractions of a
pixel. This is acceptible, IMHO. Sometime there will be support
for subpixel positioning, horizontally. Will do for now, I
suppose.
*/
xoffset = SNumRead(pos+=n, n);
i_offset = ( shrinkfactor - xoffset % shrinkfactor ) % shrinkfactor;
width += i_offset;
ptr->xOffset = xoffset+i_offset;
yoffset = SNumRead(pos+=n, n);
j_offset = ( shrinkfactor - (yoffset-(shrinkfactor-1)) % shrinkfactor )
% shrinkfactor;
height += j_offset;
ptr->yOffset = yoffset+j_offset;
DEBUG_PRINT(DEBUG_PK,(" (%dx%d)",width,height));
/*
Extra marginal so that we do not crop the image when shrinking.
*/
shrunk_width = (width + shrinkfactor - 1) / shrinkfactor;
shrunk_height = (height + shrinkfactor - 1) / shrinkfactor;
ptr->w = shrunk_width;
ptr->h = shrunk_height;
pos+=n;
if ((buffer = calloc(shrunk_width*shrunk_height*
shrinkfactor*shrinkfactor,sizeof(char)))==NULL)
Fatal("cannot allocate space for pk buffer");
DEBUG_PRINT(DEBUG_GLYPH,("\nDRAW GLYPH %d\n", (int)c));
/* Raster char */
if (dyn_f == 14) { /* get raster by bits */
int bitweight = 0;
for (j = j_offset; j < (int) height; j++) { /* get all rows */
for (i = i_offset; i < (int) width; i++) { /* get one row */
bitweight /= 2;
if (bitweight == 0) {
count = *pos++;
bitweight = 128;
}
if (count & bitweight) {
buffer[i+j*width]=1;
#ifdef DEBUG
DEBUG_PRINT(DEBUG_GLYPH,("+"));
} else {
DEBUG_PRINT(DEBUG_GLYPH,(" "));
#endif
}
}
DEBUG_PRINT(DEBUG_GLYPH,("|\n"));
}
} else { /* get packed raster */
poshalf=0;
repeatcount = 0;
for(i=i_offset, j=j_offset; j 0) {
if (i+count < width) {
if (paint_switch)
for(k=0;k0; repeatcount--,j++) {
for (i = i_offset; i0) {
DEBUG_PRINT(DEBUG_GLYPH,("="));
} else {
DEBUG_PRINT(DEBUG_GLYPH,(" "));
}
#endif
}
DEBUG_PRINT(DEBUG_GLYPH,("|\n"));
}
i=i_offset;
}
}
paint_switch = 1 - paint_switch;
}
if (i>i_offset)
Fatal("wrong number of bits stored: char. %c, font %s",
(char)c, currentfont->name);
if (j>height)
Fatal("bad PK file %s, too many bits", currentfont->name);
}
/*
Shrink raster while doing antialiasing. (See above. The
single-glyph output seems better than what xdvi at 300 dpi,
shrinkfactor 3 produces.)
*/
if ((ptr->data = calloc(shrunk_width*shrunk_height,sizeof(char))) == NULL)
Fatal("unable to malloc image space for char %c", (char)c);
for (j = 0; j < (int) height; j++) {
for (i = 0; i < (int) width; i++) {
/* if (((i % shrinkfactor) == 0) && ((j % shrinkfactor) == 0))
ptr->data[i/shrinkfactor+j/shrinkfactor*shrunk_width] =
buffer[i+j*width];
else */
ptr->data[i/shrinkfactor+j/shrinkfactor*shrunk_width] +=
buffer[i+j*width];
}
}
for (j = 0; j < shrunk_height; j++) {
for (i = 0; i < shrunk_width; i++) {
ptr->data[i+j*shrunk_width] = ptr->data[i+j*shrunk_width]
*255/shrinkfactor/shrinkfactor;
DEBUG_PRINT(DEBUG_GLYPH,("%3u ",ptr->data[i+j*shrunk_width]));
}
DEBUG_PRINT(DEBUG_GLYPH,("|\n"));
}
free(buffer);
}
void InitPK(struct font_entry * tfontp)
{
unsigned char* position;
struct char_entry *tcharptr; /* temporary char_entry pointer */
uint32_t hppp, vppp, packet_length;
uint32_t c;
DEBUG_PRINT((DEBUG_DVI|DEBUG_PK),("\n OPEN FONT:\t'%s'", tfontp->name));
Message(BE_VERBOSE,"<%s>", tfontp->name);
if (MmapFile(tfontp->name,&(tfontp->fmmap)))
Fatal("font file %s unusable", tfontp->name);
position=(unsigned char*)tfontp->fmmap.data;
if (tfontp->fmmap.size < 2 || tfontp->fmmap.size < 3+*(position+2)+16)
Fatal("PK file %s ends prematurely",tfontp->name);
if (*position++ != PK_PRE)
Fatal("unknown font format in file %s",tfontp->name);
if (*position++ != PK_ID)
Fatal( "wrong version %d of PK file %s (should be 89)",
(int)*(position-1),tfontp->name);
DEBUG_PRINT(DEBUG_PK,("\n PK_PRE:\t'%.*s'",(int)*position, position+1));
position += *position + 1;
tfontp->designsize = UNumRead(position, 4);
DEBUG_PRINT(DEBUG_PK,(" %d", tfontp->designsize));
tfontp->type = FONT_TYPE_PK;
c = UNumRead(position+4, 4);
DEBUG_PRINT(DEBUG_PK,(" %d", c));
CheckChecksum (tfontp->c, c, tfontp->name);
hppp = UNumRead(position+8, 4);
vppp = UNumRead(position+12, 4);
DEBUG_PRINT(DEBUG_PK,(" %d %d", hppp,vppp));
if (hppp != vppp)
Warning("aspect ratio is %d:%d (should be 1:1)", hppp, vppp);
tfontp->magnification = (uint32_t)((uint64_t)hppp * 7227 * 5 / 65536l + 50)/100;
position+=16;
/* Read char definitions */
position = skip_specials(position);
while (*position != PK_POST) {
DEBUG_PRINT(DEBUG_PK,("\n @%ld PK CHAR:\t%d",
(long)position - (long)tfontp->fmmap.data, *position));
if ((tcharptr = malloc(sizeof(struct char_entry))) == NULL)
Fatal("cannot allocate space for char_entry");
tcharptr->flag_byte = *position;
tcharptr->data = NULL;
tcharptr->tfmw = 0;
if ((*position & 7) == 7) {
packet_length = UNumRead(position+1,4);
c = UNumRead(position+5, 4);
position += 9;
} else if (*position & 4) {
packet_length = (*position & 3) * 65536l +
UNumRead(position+1, 2);
c = UNumRead(position+3, 1);
position += 4;
} else {
packet_length = (*position & 3) * 256 +
UNumRead(position+1, 1);
c = UNumRead(position+2, 1);
position += 3;
}
DEBUG_PRINT(DEBUG_PK,(" %d %d",packet_length,c));
if (c > (LASTFNTCHAR))
Fatal("PK font %s exceeds char numbering limit",tfontp->name);
tcharptr->length = packet_length;
tcharptr->pkdata = position;
tfontp->chr[c]=tcharptr;
position += packet_length;
position = skip_specials(position);
}
}
static void UnLoadPK(struct char_entry *ptr)
{
if (ptr->data!=NULL)
free(ptr->data);
ptr->data=NULL;
}
void DonePK(struct font_entry *tfontp)
{
int c=FIRSTFNTCHAR;
UnMmapFile(&(tfontp->fmmap));
while(c<=LASTFNTCHAR) {
if (tfontp->chr[c]!=NULL) {
UnLoadPK((struct char_entry*)tfontp->chr[c]);
free(tfontp->chr[c]);
}
c++;
}
if (tfontp->name!=NULL)
free(tfontp->name);
tfontp->name=NULL;
}
dvipng-1.15/font.c 0000644 0001750 0001750 00000024550 12475135444 013340 0 ustar janla64 janla64 /* font.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
.
Copyright (C) 2002-2015 Jan-Åke Larsson
************************************************************************/
#include "dvipng.h"
void CheckChecksum(uint32_t c1, uint32_t c2, const char* name)
{
/* Report a warning if both checksums are nonzero, they don't match,
and the user hasn't turned it off. */
if (c1 && c2 && c1 != c2
#ifdef HAVE_LIBKPATHSEA
&& !kpse_tex_hush ("checksum")
#endif
) {
Warning ("checksum mismatch in %s", name) ;
}
}
static double ActualFactor(uint32_t unmodsize)
/* compute the actual size factor given the approximation */
/* actually factor * 1000 */
{
double realsize; /* the actual magnification factor */
realsize = (double)unmodsize / 1000.0;
if (abs((int)(unmodsize - 1095l))<2)
realsize = 1.095445115; /*stephalf*/
else if (abs((int)(unmodsize - 1315l))<2)
realsize = 1.31453414; /*stepihalf*/
else if (abs((int)(unmodsize - 1577l))<2)
realsize = 1.57744097; /*stepiihalf*/
else if (abs((int)(unmodsize - 1893l))<2)
realsize = 1.89292916; /*stepiiihalf*/
else if (abs((int)(unmodsize - 2074l))<2)
realsize = 2.0736; /*stepiv*/
else if (abs((int)(unmodsize - 2488l))<2)
realsize = 2.48832; /*stepv*/
else if (abs((int)(unmodsize - 2986l))<2)
realsize = 2.985984; /*stepvi*/
/* the remaining magnification steps are represented with sufficient
accuracy already */
return(realsize);
}
void FontDef(unsigned char* command, void* parent)
{
int32_t k;
uint32_t c, s, d;
uint8_t a, l;
unsigned char* current;
struct font_entry *tfontptr; /* temporary font_entry pointer */
struct font_num *tfontnump = NULL; /* temporary font_num pointer */
unsigned short i;
current = command + 1;
k = UNumRead(current, (int)*command - FNT_DEF1 + 1);
current += (int)*command - FNT_DEF1 + 1;
c = UNumRead(current, 4); /* checksum */
s = UNumRead(current+4, 4); /* space size */
d = UNumRead(current+8, 4); /* design size */
a = UNumRead(current+12, 1); /* length for font name */
l = UNumRead(current+13, 1); /* device length */
if (((struct font_entry*)parent)->type==FONT_TYPE_VF) {
DEBUG_PRINT(DEBUG_VF,(" %d %d %d",k,c,s));
/* Rescale. s is relative to the actual scale /(1<<20) */
s = (uint32_t)((uint64_t) s * (((struct font_entry*) parent)->s)
/ (1<<20));
DEBUG_PRINT(DEBUG_VF,(" (%d) %d",s,d));
/* Oddly, d differs in the DVI and the VF that my system produces */
d = (uint32_t)((uint64_t) d * ((struct font_entry*)parent)->d
/ ((struct font_entry*)parent)->designsize);
DEBUG_PRINT(DEBUG_VF,(" (%d)",d));
DEBUG_PRINT(DEBUG_VF,(" %d %d '%.*s'",a,l,a+l,current+14));
#ifdef DEBUG
} else {
DEBUG_PRINT(DEBUG_DVI,(" %d %d %d %d %d %d '%.*s'",k,c,s,d,a,l,
a+l,current+14));
#endif
}
if (a+l > STRSIZE-1)
Fatal("too long font name for font %ld",k);
/* Find entry with this font number in use */
switch (((struct font_entry*)parent)->type) {
case FONT_TYPE_VF:
tfontnump = ((struct font_entry*)parent)->vffontnump;
break;
case DVI_TYPE:
tfontnump = ((struct dvi_data*)parent)->fontnump;
}
while (tfontnump != NULL && tfontnump->k != k) {
tfontnump = tfontnump->next;
}
/* If found, return if it is correct */
if (tfontnump!=NULL
&& tfontnump->fontp->s == s
&& tfontnump->fontp->d == d
&& strlen(tfontnump->fontp->n) == a+l
&& strncmp(tfontnump->fontp->n,(char*)current+14,a+l) == 0) {
DEBUG_PRINT((DEBUG_DVI|DEBUG_VF),("\n FONT %d:\tMatch found",k));
return;
}
/* If not found, create new */
if (tfontnump==NULL) {
if ((tfontnump=malloc(sizeof(struct font_num)))==NULL)
Fatal("cannot malloc memory for new font number");
tfontnump->k=k;
switch (((struct font_entry*)parent)->type) {
case FONT_TYPE_VF:
tfontnump->next=((struct font_entry*)parent)->vffontnump;
((struct font_entry*)parent)->vffontnump=tfontnump;
break;
case DVI_TYPE:
tfontnump->next=((struct dvi_data*)parent)->fontnump;
((struct dvi_data*)parent)->fontnump=tfontnump;
}
}
/* Search font list for possible match */
tfontptr = hfontptr;
while (tfontptr != NULL
&& (tfontptr->s != s
|| tfontptr->d != d
|| strlen(tfontptr->n) != a+l
|| strncmp(tfontptr->n,(char*)current+14,a+l) != 0 ) ) {
tfontptr = tfontptr->next;
}
/* If found, set its number and return */
if (tfontptr!=NULL) {
DEBUG_PRINT((DEBUG_DVI|DEBUG_VF),("\n FONT %d:\tMatch found, number set",k));
tfontnump->fontp = tfontptr;
return;
}
DEBUG_PRINT((DEBUG_DVI|DEBUG_VF),("\n FONT %d:\tNew entry created",k));
/* No fitting font found, create new entry. */
if ((tfontptr = calloc(1,sizeof(struct font_entry))) == NULL)
Fatal("cannot malloc space for font_entry");
tfontptr->next = hfontptr;
hfontptr = tfontptr;
tfontnump->fontp = tfontptr;
#ifndef WIN32
tfontptr->fmmap.fd = 0;
#else /* WIN32 */
tfontptr->fmmap.hFile = INVALID_HANDLE_VALUE;
#endif
tfontptr->c = c; /* checksum */
tfontptr->s = s; /* space size */
tfontptr->d = d; /* design size */
tfontptr->a = a; /* length for font name */
tfontptr->l = l; /* device length */
strncpy(tfontptr->n,(char*)current+14,a+l); /* full font name */
tfontptr->n[a+l] = '\0';
tfontptr->name = NULL;
for (i = FIRSTFNTCHAR; i <= LASTFNTCHAR; i++) {
tfontptr->chr[i] = NULL;
}
tfontptr->dpi =
(uint32_t)((ActualFactor((uint32_t)(1000.0*tfontptr->s
/(double)tfontptr->d+0.5))
* ActualFactor(dvi->mag) * dpi*shrinkfactor) + 0.5);
#ifdef HAVE_FT2
tfontptr->psfontmap=NULL;
#endif
}
#ifdef HAVE_FT2
static char* kpse_find_t1_or_tt(char* filename)
{
char* filepath = kpse_find_file(filename, kpse_type1_format, false);
if ((option_flags & USE_FREETYPE) && filepath==NULL)
filepath = kpse_find_file(filename, kpse_truetype_format, false);
return(filepath);
}
#endif
static void FontFind(struct font_entry * tfontptr)
{
kpse_glyph_file_type font_ret;
/* tfontptr->dpi = kpse_magstep_fix (tfontptr->dpi, resolution, NULL); */
DEBUG_PRINT(DEBUG_DVI,("\n FIND FONT:\t%s %d",tfontptr->n,tfontptr->dpi));
tfontptr->name = kpse_find_vf (tfontptr->n);
if (tfontptr->name!=NULL)
InitVF(tfontptr);
#ifdef HAVE_FT2
else if (option_flags & USE_FREETYPE) {
tfontptr->psfontmap = FindPSFontMap(tfontptr->n);
if (tfontptr->psfontmap!=NULL)
tfontptr->name=kpse_find_t1_or_tt(tfontptr->psfontmap->psfile);
else
tfontptr->name=kpse_find_t1_or_tt(tfontptr->n);
if (tfontptr->name!=NULL) {
char* tfmname=kpse_find_file(tfontptr->n, kpse_tfm_format, false);
if (tfmname!=NULL) {
if (!ReadTFM(tfontptr,tfmname)) {
Warning("unable to read tfm file %s", tfmname);
free(tfontptr->name);
tfontptr->name=NULL;
} else if ((option_flags & USE_FREETYPE)==0 || !InitFT(tfontptr)) {
/* if Freetype loading fails for some reason, fall back to PK font */
free(tfontptr->name);
tfontptr->name=NULL;
}
free(tfmname);
}
}
}
#endif /* HAVE_FT2 */
if (tfontptr->name==NULL) {
tfontptr->name=kpse_find_pk (tfontptr->n, tfontptr->dpi, &font_ret);
if (tfontptr->name!=NULL) {
if (!FILESTRCASEEQ (tfontptr->n, font_ret.name)) {
page_flags |= PAGE_GAVE_WARN;
Warning("font %s not found, using %s at %d dpi instead",
tfontptr->n, font_ret.name, font_ret.dpi);
tfontptr->c = 0; /* no checksum warning */
} else if (!kpse_bitmap_tolerance ((double)font_ret.dpi,
(double) tfontptr->dpi)) {
page_flags |= PAGE_GAVE_WARN;
Warning("font %s at %d dpi not found, using %d dpi instead",
tfontptr->n, tfontptr->dpi, font_ret.dpi);
}
InitPK(tfontptr);
} else {
page_flags |= PAGE_GAVE_WARN;
Warning("font %s at %d dpi not found, characters will be left blank",
tfontptr->n, tfontptr->dpi);
#ifndef WIN32
tfontptr->fmmap.fd = 0;
#else /* WIN32 */
tfontptr->fmmap.hFile = INVALID_HANDLE_VALUE;
#endif
tfontptr->magnification = 0;
tfontptr->designsize = 0;
}
}
}
static void DoneFont(struct font_entry *tfontp)
{
switch (tfontp->type) {
case FONT_TYPE_PK:
DonePK(tfontp);
break;
case FONT_TYPE_VF:
DoneVF(tfontp);
break;
#ifdef HAVE_FT2
case FONT_TYPE_FT:
DoneFT(tfontp);
break;
#endif
}
}
void FreeFontNumP(struct font_num *hfontnump)
{
struct font_num *tmp;
while(hfontnump!=NULL) {
tmp=hfontnump->next;
free(hfontnump);
hfontnump=tmp;
}
}
void ClearFonts(void)
{
struct font_entry *tmp;
while(hfontptr!=NULL) {
tmp=hfontptr->next;
DoneFont(hfontptr);
if (hfontptr->name != NULL)
free(hfontptr->name);
free(hfontptr);
hfontptr=tmp;
}
if (dvi!=NULL)
FreeFontNumP(dvi->fontnump);
}
/*-->SetFntNum*/
/**********************************************************************/
/**************************** SetFntNum *****************************/
/**********************************************************************/
void SetFntNum(int32_t k, void* parent /* dvi/vf */)
/* this routine is used to specify the font to be used in printing future
characters */
{
struct font_num *tfontnump=NULL; /* temporary font_num pointer */
switch (((struct font_entry*)parent)->type) {
case FONT_TYPE_VF:
tfontnump = ((struct font_entry*)parent)->vffontnump;
break;
case DVI_TYPE:
tfontnump = ((struct dvi_data*)parent)->fontnump;
}
while (tfontnump != NULL && tfontnump->k != k)
tfontnump = tfontnump->next;
if (tfontnump == NULL)
Fatal("font %d undefined", k);
currentfont = tfontnump->fontp;
if (currentfont->name==NULL)
FontFind(currentfont);
}
dvipng-1.15/sfd.c 0000644 0001750 0001750 00000012651 12475135444 013145 0 ustar janla64 janla64 /* sfd.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
.
Copyright (C) 2002-2008 Jan-Åke Larsson
************************************************************************/
#include "dvipng.h"
struct subfont* subfontp=NULL;
static struct subfont* ReadSubfont(char* sfdname, char *infix)
{
char *pos,*max,*sfdfile=NULL;
struct subfont* sfdp=NULL;
struct filemmap fmmap;
boolean mmapfailed;
/* OK, find subfont and look for correct infix */
#ifdef HAVE_KPSE_ENC_FORMATS
sfdfile=kpse_find_file(sfdname,kpse_sfd_format,false);
#endif
if (sfdfile == NULL) {
Warning("subfont file %s could not be found",sfdname);
return(NULL);
}
DEBUG_PRINT((DEBUG_FT|DEBUG_ENC),("\n OPEN SUBFONT:\t'%s'", sfdfile));
mmapfailed = MmapFile(sfdfile,&fmmap);
free(sfdfile);
if (mmapfailed)
return(NULL);
pos=fmmap.data;
max=fmmap.data+fmmap.size;
while(posname=(char*)sfdp+sizeof(struct subfont);
strcpy(sfdp->name,sfdname);
sfdp->infix=(char*)sfdp+sizeof(struct subfont)+strlen(sfdname)+1;
strcpy(sfdp->infix,infix);
sfdp->encoding=FT_ENCODING_UNICODE;
while (poscharindex[codepoint]=number;
DEBUG_PRINT(DEBUG_ENC,("\n SUBFONT MAP %d %d",codepoint,number));
number++;
codepoint++;
}
default:
if (codepoint<256)
sfdp->charindex[codepoint]=number;
DEBUG_PRINT(DEBUG_ENC,("\n SUBFONT MAP %d %d",codepoint,number));
}
while(postfmname,*sfdwant=fontname,
*sfdname,*infix,*postfix;
while (*sfdspec!='\0' && *sfdspec==*sfdwant) {
sfdspec++;
sfdwant++;
}
/* Find delimiter */
if (*sfdspec!='@')
return(NULL);
sfdspec++;
postfix=sfdspec;
while (*postfix!='\0' && *postfix!='@')
postfix++;
if (*postfix!='@')
return(NULL);
/* Extract subfont name */
if ((sfdname=malloc(postfix-sfdspec+1))==NULL)
Fatal("cannot allocate memory for subfont name");
strncpy(sfdname,sfdspec,postfix-sfdspec);
sfdname[postfix-sfdspec]='\0';
/* Check postfix */
postfix++;
if (strcmp(sfdwant+strlen(sfdwant)-strlen(postfix),postfix)!=0)
return(NULL);
/* Extract infix */
if ((infix=malloc(strlen(sfdwant)-strlen(postfix)+1))==NULL)
Fatal("cannot allocate memory for subfont infix");
strncpy(infix,sfdwant,strlen(sfdwant)-strlen(postfix));
infix[strlen(sfdwant)-strlen(postfix)]='\0';
DEBUG_PRINT(DEBUG_ENC,("\n SUBFONT %s %s %s",fontname,sfdname,infix));
/* Find subfont */
while(temp!=NULL
&& (strcmp(sfdname,temp->name)!=0 || strcmp(infix,temp->infix)!=0))
temp=temp->next;
if (temp==NULL) {
temp=ReadSubfont(sfdname,infix);
if (temp!=NULL) {
temp->next=subfontp;
subfontp=temp;
}
}
entry=NewPSFont(entry);
if (entry!=NULL) {
entry->tfmname=copyword(fontname);
entry->subfont=temp;
}
free(infix);
free(sfdname);
return(entry);
}
void ClearSubfont(void)
{
struct subfont *temp=subfontp;
while(temp!=NULL) {
subfontp=subfontp->next;
free(temp);
temp=subfontp;
}
}
dvipng-1.15/dvi.c 0000644 0001750 0001750 00000033032 12475135444 013147 0 ustar janla64 janla64 /* dvi.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
.
Copyright (C) 2002-2015 Jan-Åke Larsson
************************************************************************/
#include "dvipng.h"
#ifdef MIKTEX
# include
# define USLEEP Sleep
#else /* MIKTEX */
# ifdef HAVE_LIBGEN_H
# include
# else
# define basename xbasename
# endif
# ifdef WIN32
# define USLEEP Sleep
# include
# else
# include
# define USLEEP usleep
# endif /* WIN32 */
#endif /* MIKTEX */
#include
#include
bool followmode=0;
bool DVIFollowToggle(void)
{
return followmode = ! followmode;
}
static unsigned char fgetc_follow(FILE* fp)
{
int got=fgetc(fp),nsleep=1;
while(followmode && got==EOF) {
USLEEP(nsleep/1310); /* After a few trials, poll every 65536/1310=50 usec */
clearerr(fp);
got=fgetc(fp);
if (nsleep<50000)
nsleep*=2;
}
if (got==EOF)
Fatal("DVI file ends prematurely");
return (unsigned char)got;
}
static void DVIInit(struct dvi_data* dvi)
{
int k;
unsigned char* pre;
struct stat stat;
fseek(dvi->filep,0,SEEK_SET);
pre=DVIGetCommand(dvi);
if (*pre != PRE) {
Fatal("PRE does not occur first - are you sure this is a DVI file?");
}
k = UNumRead(pre+1,1);
DEBUG_PRINT(DEBUG_DVI,("DVI START:\tPRE %d",k));
if (k != DVIFORMAT) {
Fatal("DVI format = %d, can only process DVI format %d files",
k, DVIFORMAT);
}
dvi->num = UNumRead(pre+2, 4);
dvi->den = UNumRead(pre+6, 4);
DEBUG_PRINT(DEBUG_DVI,(" %d/%d",dvi->num,dvi->den));
dvi->mag = UNumRead(pre+10, 4); /*FIXME, see font.c*/
DEBUG_PRINT(DEBUG_DVI,(" %d",dvi->mag));
if ( usermag > 0 && usermag != dvi->mag ) {
Warning("DVI magnification of %d over-ridden by user (%ld)",
(long)dvi->mag, usermag );
dvi->mag = usermag;
}
dvi->conv = (1.0/(((double)dvi->num / (double)dvi->den) *
((double)dvi->mag / 1000.0) *
((double)dpi*shrinkfactor/254000.0)))+0.5;
DEBUG_PRINT(DEBUG_DVI,(" (%d)",dvi->conv));
k = UNumRead(pre+14,1);
DEBUG_PRINT(DEBUG_DVI,(" '%.*s'",k,pre+15));
Message(BE_VERBOSE,"'%.*s' -> %s\n",k,pre+15,dvi->outname);
fstat(fileno(dvi->filep), &stat);
dvi->mtime = stat.st_mtime;
dvi->pagelistp=NULL;
dvi->flags = 0;
}
struct dvi_data* DVIOpen(char* dviname,char* outname)
{
char* tmpstring;
struct dvi_data* dvi;
if ((dvi = calloc(1,sizeof(struct dvi_data)))==NULL)
Fatal("cannot allocate memory for DVI struct");
dvi->type = DVI_TYPE;
dvi->fontnump=NULL;
if ((dvi->name = malloc(strlen(dviname)+5))==NULL)
Fatal("cannot allocate space for DVI filename");
strcpy(dvi->name, dviname);
tmpstring = strrchr(dvi->name, '.');
if (tmpstring == NULL || strcmp(tmpstring,".dvi") != 0)
strcat(dvi->name, ".dvi");
if (outname==NULL) {
if ((dvi->outname = malloc(strlen(basename(dviname))+7))==NULL) {
free(dvi->name);
free(dvi);
Fatal("cannot allocate space for output filename");
}
strcpy(dvi->outname,basename(dviname));
tmpstring = strrchr(dvi->outname, '.');
if (tmpstring != NULL && strcmp(tmpstring,".dvi") == 0)
*tmpstring = '\0';
strcat(dvi->outname, "%d.png");
} else {
if ((dvi->outname = malloc(strlen(outname)+1))==NULL) {
free(dvi->name);
free(dvi);
Fatal("cannot allocate space for output filename");
}
strcpy(dvi->outname,outname);
}
if ((dvi->filep = fopen(dvi->name,"rb")) == NULL) {
/* do not insist on .dvi */
tmpstring = strrchr(dvi->name, '.');
*tmpstring='\0';
dvi->filep = fopen(dvi->name,"rb");
}
while((dvi->filep == NULL) && followmode) {
USLEEP(50);
*tmpstring='.';
if ((dvi->filep = fopen(dvi->name,"rb")) == NULL) {
/* do not insist on .dvi */
*tmpstring='\0';
dvi->filep = fopen(dvi->name,"rb");
}
}
if (dvi->filep == NULL) {
free(dvi->name);
free(dvi->outname);
free(dvi);
perror(dviname);
exit (EXIT_FAILURE);
}
DEBUG_PRINT(DEBUG_DVI,("OPEN FILE\t%s", dvi->name));
DVIInit(dvi);
return(dvi);
}
unsigned char* DVIGetCommand(struct dvi_data* dvi)
/* This function reads in and stores the next dvi command. */
/* Mmap is not appropriate here, we may want to read from
half-written files. */
{
static unsigned char* command=NULL;
static uint32_t commlen=0;
unsigned char *current = command;
int length;
uint32_t strlength=0;
if (commlen==0) {
commlen=STRSIZE;
if ((current=command=malloc(commlen))==NULL)
Fatal("cannot allocate memory for DVI command");
}
DEBUG_PRINT(DEBUG_DVI,("\n@%ld ", ftell(dvi->filep)));
*(current++) = fgetc_follow(dvi->filep);
length = dvi_commandlength[*command];
if (length < 0)
Fatal("undefined DVI op-code %d",*command);
while(current < command+length)
*(current++) = fgetc_follow(dvi->filep);
switch (*command) {
case XXX4:
strlength = *(current - 4);
case XXX3:
strlength = strlength * 256 + *(current - 3);
case XXX2:
strlength = strlength * 256 + *(current - 2);
case XXX1:
strlength = strlength * 256 + *(current - 1);
break;
case FNT_DEF1: case FNT_DEF2: case FNT_DEF3: case FNT_DEF4:
strlength = *(current - 1) + *(current - 2);
break;
case PRE:
strlength = *(current - 1);
break;
}
if (strlength > 0) { /* Read string */
if (strlength+1 + (uint32_t)length > commlen) {
/* string + command length exceeds that of buffer */
commlen=strlength+1 + (uint32_t)length;
if ((command=realloc(command,commlen))==NULL)
Fatal("cannot allocate memory for DVI command");
current = command + length;
}
while(current < command+length+strlength)
*(current++) = fgetc_follow(dvi->filep);
*current='\0';
}
return(command);
}
bool DVIIsNextPSSpecial(struct dvi_data* dvi)
/* This function checks if the next dvi command is a raw PS
special */
/* Mmap is not appropriate here, we may want to read from
half-written files. */
{
long fpos;
uint32_t strlength=0;
bool israwps=false;
DEBUG_PRINT(DEBUG_DVI,("\n CHECKING NEXT DVI COMMAND "));
fpos=ftell(dvi->filep);
switch (fgetc_follow(dvi->filep)) {
case XXX4:
strlength = fgetc_follow(dvi->filep);
case XXX3:
strlength = strlength * 256 + fgetc_follow(dvi->filep);
case XXX2:
strlength = strlength * 256 + fgetc_follow(dvi->filep);
case XXX1:
strlength = strlength * 256 + fgetc_follow(dvi->filep);
}
if (strlength > 0) {
switch(fgetc_follow(dvi->filep)) {
case 'p':
if (strlength > 2
&& fgetc_follow(dvi->filep)=='s'
&& fgetc_follow(dvi->filep)==':')
israwps=true;
break;
case '"':
israwps=true;
}
}
fseek(dvi->filep,fpos,SEEK_SET);
return(israwps);
}
uint32_t CommandLength(unsigned char* command)
{
/* generally 2^32+5 bytes max, but in practice 32 bit numbers suffice */
uint32_t length=0;
length = dvi_commandlength[*command];
switch (*command) {
case XXX1: case XXX2: case XXX3: case XXX4:
length += UNumRead(command + 1,length - 1);
break;
case FNT_DEF1: case FNT_DEF2: case FNT_DEF3: case FNT_DEF4:
length += *(command + length - 1) + *(command + length - 2);
break;
case PRE:
length += *(command + length - 1);
break;
}
return(length);
}
static void SkipPage(struct dvi_data* dvi)
{
/* Skip present page */
unsigned char* command;
command=DVIGetCommand(dvi);
while (*command != EOP) {
switch (*command) {
case FNT_DEF1: case FNT_DEF2: case FNT_DEF3: case FNT_DEF4:
DEBUG_PRINT(DEBUG_DVI,("NOSKIP CMD:\t%s", dvi_commands[*command]));
FontDef(command,dvi);
break;
case XXX1: case XXX2: case XXX3: case XXX4:
DEBUG_PRINT(DEBUG_DVI,("NOSKIP CMD:\t%s %d", dvi_commands[*command],
UNumRead(command+1, dvi_commandlength[*command]-1)));
SetSpecial((char*)command + dvi_commandlength[*command],
(char*)command + dvi_commandlength[*command]
+UNumRead(command+1, dvi_commandlength[*command]-1),
0,0);
break;
case BOP: case PRE: case POST: case POST_POST:
Fatal("%s occurs within page", dvi_commands[*command]);
break;
#ifdef DEBUG
default:
DEBUG_PRINT(DEBUG_DVI,("SKIP CMD:\t%s", dvi_commands[*command]));
#endif
}
command=DVIGetCommand(dvi);
} /* while */
DEBUG_PRINT(DEBUG_DVI,("SKIP CMD:\t%s", dvi_commands[*command]));
}
static struct page_list* InitPage(struct dvi_data* dvi)
{
/* Find page start, return pointer to page_list entry if found */
struct page_list* tpagelistp=NULL;
unsigned char* command;
command=DVIGetCommand(dvi);
/* Skip until page start or postamble */
while((*command != BOP) && (*command != POST)) {
switch(*command) {
case FNT_DEF1: case FNT_DEF2: case FNT_DEF3: case FNT_DEF4:
DEBUG_PRINT(DEBUG_DVI,("NOPAGE CMD:\t%s", dvi_commands[*command]));
FontDef(command,dvi);
break;
case NOP:
DEBUG_PRINT(DEBUG_DVI,("NOPAGE CMD:\tNOP"));
break;
default:
Fatal("%s occurs outside page", dvi_commands[*command]);
}
command=DVIGetCommand(dvi);
}
if ((tpagelistp =
malloc(sizeof(struct page_list)
+(csp+1-2)*sizeof(struct dvi_color)))==NULL)
Fatal("cannot allocate memory for new page entry");
tpagelistp->next = NULL;
if ( *command == BOP ) { /* Init page */
int i;
DEBUG_PRINT(DEBUG_DVI,("PAGE START:\tBOP"));
StoreColorStack(tpagelistp);
tpagelistp->offset = ftell(dvi->filep)-45;
for (i = 0; i <= 9; i++) {
tpagelistp->count[i] = UNumRead(command + 1 + i*4, 4);
DEBUG_PRINT(DEBUG_DVI,(" %d",tpagelistp->count[i]));
}
if (dvi->pagelistp==NULL)
tpagelistp->count[10] = 1;
else
tpagelistp->count[10] = dvi->pagelistp->count[10]+1;
DEBUG_PRINT(DEBUG_DVI,(" (%d)", tpagelistp->count[10]));
} else {
DEBUG_PRINT(DEBUG_DVI,("DVI END:\tPOST"));
tpagelistp->offset = ftell(dvi->filep)-1;
tpagelistp->count[0] = PAGE_POST; /* POST */
tpagelistp->count[10] = PAGE_POST; /* POST */
}
return(tpagelistp);
}
int SeekPage(struct dvi_data* dvi, struct page_list* page)
{
ReadColorStack(page);
return(fseek(dvi->filep,
page->offset+((page->count[0]==PAGE_POST) ? 1L : 45L),
SEEK_SET));
}
struct page_list* NextPage(struct dvi_data* dvi, struct page_list* page)
{
struct page_list* tpagelistp;
/* if page points to POST there is no next page */
if (page!=NULL && page->count[0]==PAGE_POST)
return(NULL);
/* If we have read past the last page in our current list or the
* list is empty, sneak a look at the next page
*/
if (dvi->pagelistp==NULL
|| dvi->pagelistp->offset+45L < ftell(dvi->filep)) {
tpagelistp=dvi->pagelistp;
dvi->pagelistp=InitPage(dvi);
dvi->pagelistp->next=tpagelistp;
}
if (page!=dvi->pagelistp) {
/* also works if page==NULL, we'll get the first page then */
tpagelistp=dvi->pagelistp;
while(tpagelistp!=NULL && tpagelistp->next!=page)
tpagelistp=tpagelistp->next;
} else {
/* dvi->pagelistp points to the last page we've read so far,
* the last page that we know where it is, so to speak
* So look at the next
*/
(void)SeekPage(dvi,dvi->pagelistp);
SkipPage(dvi);
tpagelistp=dvi->pagelistp;
dvi->pagelistp=InitPage(dvi);
dvi->pagelistp->next=tpagelistp;
tpagelistp=dvi->pagelistp;
}
return(tpagelistp);
}
struct page_list* PrevPage(struct dvi_data* dvi, struct page_list* page)
{
return(page->next);
}
struct page_list* FindPage(struct dvi_data* dvi, int32_t pagenum, bool abspage)
/* Find first page of certain number,
absolute number if abspage is set */
{
struct page_list* page=NextPage(dvi, NULL);
if (pagenum==PAGE_LASTPAGE || pagenum==PAGE_POST) {
while(page!=NULL && page->count[0]!=PAGE_POST)
page=NextPage(dvi,page);
if (pagenum==PAGE_LASTPAGE)
page=PrevPage(dvi,page);
} else
if (pagenum!=PAGE_FIRSTPAGE)
while(page != NULL && pagenum != page->count[abspage ? 0 : 10])
page=NextPage(dvi,page);
return(page);
}
static void DelPageList(struct dvi_data* dvi)
{
struct page_list* temp;
/* Delete the page list */
temp=dvi->pagelistp;
while(temp!=NULL) {
dvi->pagelistp=dvi->pagelistp->next;
free(temp);
temp=dvi->pagelistp;
}
}
void DVIClose(struct dvi_data* dvi)
{
if (dvi!=NULL) {
fclose(dvi->filep);
DelPageList(dvi);
ClearPSHeaders();
free(dvi->outname);
free(dvi->name);
free(dvi);
}
}
bool DVIReOpen(struct dvi_data* dvi)
{
struct stat stat;
fstat(fileno(dvi->filep), &stat);
if (dvi->mtime != stat.st_mtime) {
fclose(dvi->filep);
dvi->filep=NULL;
DelPageList(dvi);
ClearPSHeaders();
while(((dvi->filep = fopen(dvi->name,"rb")) == NULL) && followmode) {
USLEEP(50);
}
if (dvi->filep == NULL) {
perror(dvi->name);
exit(EXIT_FAILURE);
}
Message(PARSE_STDIN,"Reopened file\n");
DEBUG_PRINT(DEBUG_DVI,("\nREOPEN FILE\t%s", dvi->name));
DVIInit(dvi);
return(true);
}
return(false);
}
dvipng-1.15/ft.c 0000664 0001750 0001750 00000013716 12475135444 013007 0 ustar janla64 janla64 /* ft.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
.
Copyright (C) 2002-2009 Jan-Åke Larsson
************************************************************************/
#include "dvipng.h"
void LoadFT(int32_t c, struct char_entry * ptr)
{
FT_Bitmap bitmap;
FT_UInt glyph_i;
int i,j,k;
unsigned char* bit;
static bool hintwarning=false;
DEBUG_PRINT(DEBUG_FT,("\n LOAD FT CHAR\t%d (%d)",c,ptr->tfmw));
if (currentfont->psfontmap!=NULL
&& currentfont->psfontmap->encoding != NULL) {
DEBUG_PRINT(DEBUG_FT,(" %s",currentfont->psfontmap->encoding->charname[c]));
glyph_i = FT_Get_Name_Index(currentfont->face,
currentfont->psfontmap->encoding->charname[c]);
} else if (currentfont->psfontmap!=NULL
&& currentfont->psfontmap->subfont != NULL) {
glyph_i = FT_Get_Char_Index( currentfont->face,
currentfont->psfontmap->subfont->charindex[c] );
DEBUG_PRINT(DEBUG_FT,(" 0x%X",currentfont->psfontmap->subfont->charindex[c]));
} else
glyph_i = FT_Get_Char_Index( currentfont->face, c );
if (FT_Load_Glyph( currentfont->face, glyph_i,
FT_LOAD_RENDER | FT_LOAD_TARGET_LIGHT )) {
/* On some configurations (with FreeType <= 2.1.7) the above
fails, while the below works */
if (!hintwarning) {
hintwarning=true;
Warning("the used FreeType does not have target_light hinting");
}
if (FT_Load_Glyph( currentfont->face, glyph_i,
FT_LOAD_RENDER | FT_LOAD_NO_HINTING ))
Fatal("cannot load FT char %d",c);
}
ptr->xOffset = -currentfont->face->glyph->bitmap_left*shrinkfactor;
ptr->yOffset = (currentfont->face->glyph->bitmap_top-1)*shrinkfactor;
bitmap=currentfont->face->glyph->bitmap;
DEBUG_PRINT(DEBUG_FT,(" (%dx%d)",bitmap.width,bitmap.rows));
if ((ptr->data = calloc(bitmap.width*bitmap.rows,sizeof(char))) == NULL)
Fatal("unable to malloc image space for char %c", (char)c);
ptr->w = bitmap.width;
ptr->h = bitmap.rows;
#define GREYLEVELS 16
DEBUG_PRINT(DEBUG_GLYPH,("\nDRAW GLYPH %d\n", (int)c));
bit=ptr->data;
for(i=0;i0 ? k*16-1 : 0; */
DEBUG_PRINT(DEBUG_GLYPH,("%3u ",k));
bit[i*bitmap.width+j]=k;
}
DEBUG_PRINT(DEBUG_GLYPH,("|\n"));
}
}
bool InitFT(struct font_entry * tfontp)
{
int error;
if (libfreetype==NULL) {
if (FT_Init_FreeType( &libfreetype )) {
Warning("an error occured during freetype initialisation, disabling it");
option_flags &= ~USE_FREETYPE;
return(false);
}
# ifdef DEBUG
else {
FT_Int amajor, aminor, apatch;
DEBUG_PRINT(DEBUG_FT,("\n COMPILED WITH FREETYPE %d.%d.%d",
FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH));
# ifdef HAVE_FT_LIBRARY_VERSION
FT_Library_Version( libfreetype, &amajor, &aminor, &apatch );
DEBUG_PRINT(DEBUG_FT,("\n USING LIBFT %d.%d.%d",
amajor, aminor, apatch));
# endif
}
# endif
}
DEBUG_PRINT((DEBUG_DVI|DEBUG_FT),("\n OPEN FT FONT:\t'%s'", tfontp->name));
error = FT_New_Face( libfreetype, tfontp->name, 0, &tfontp->face );
if (error == FT_Err_Unknown_File_Format) {
Warning("font file %s has unknown format", tfontp->name);
return(false);
} else if (error) {
Warning("font file %s could not be opened", tfontp->name);
return(false);
}
Message(BE_VERBOSE,"<%s>", tfontp->name);
if (tfontp->psfontmap != NULL && tfontp->psfontmap->subfont != NULL)
error=FT_Select_Charmap(tfontp->face, tfontp->psfontmap->subfont->encoding);
else if (tfontp->psfontmap == NULL || tfontp->psfontmap->encoding == NULL)
#ifndef FT_ENCODING_ADOBE_CUSTOM
# define FT_ENCODING_ADOBE_CUSTOM ft_encoding_adobe_custom
# define FT_ENCODING_ADOBE_STANDARD ft_encoding_adobe_standard
#endif
error=FT_Select_Charmap(tfontp->face, FT_ENCODING_ADOBE_CUSTOM);
if (error) {
Warning("unable to set font encoding for %s", tfontp->name);
if(FT_Select_Charmap( tfontp->face, FT_ENCODING_ADOBE_STANDARD )) {
Warning("unable to set fallback font encoding for %s", tfontp->name);
return(false);
}
}
if (FT_Set_Char_Size( tfontp->face, /* handle to face object */
0, /* char_width in 1/64th of points */
((int64_t)tfontp->d*64*7200)/7227/65536,
/* char_height in 1/64th of _big_points,
not TeX points */
tfontp->dpi/shrinkfactor, /* horizontal resolution */
tfontp->dpi/shrinkfactor )) /* vertical resolution */ {
Warning("unable to set font size for %s", tfontp->name);
return(false);
}
if (tfontp->psfontmap!=NULL)
FT_Set_Transform(tfontp->face, tfontp->psfontmap->ft_transformp, NULL);
tfontp->type = FONT_TYPE_FT;
return(true);
}
static void UnLoadFT(struct char_entry *ptr)
{
if (ptr->data!=NULL)
free(ptr->data);
ptr->data=NULL;
}
void DoneFT(struct font_entry *tfontp)
{
int c=0;
int error = FT_Done_Face( tfontp->face );
if (error)
Warning("font file %s could not be closed", tfontp->name);
while(cchr[c]!=NULL) {
UnLoadFT((struct char_entry*)tfontp->chr[c]);
free(tfontp->chr[c]);
tfontp->chr[c]=NULL;
}
c++;
}
if (tfontp->name!=NULL)
free(tfontp->name);
tfontp->name=NULL;
}
dvipng-1.15/config.h.in 0000644 0001750 0001750 00000013111 12475135443 014237 0 ustar janla64 janla64 /* config.h.in. Generated from configure.ac by autoheader. */
/* Define as 1 to get the debug (-d) option. */
#undef DEBUG
/* The environment setting for $SELFAUTODIR */
#undef ENV_SELFAUTODIR
/* The environment setting for $SELFAUTOLOC */
#undef ENV_SELFAUTOLOC
/* The environment setting for $SELFAUTOPARENT */
#undef ENV_SELFAUTOPARENT
/* Define as the path to GhostScript. */
#undef GS_PATH
/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
#undef HAVE_DOPRNT
/* Define to 1 if you have the `dup2' function. */
#undef HAVE_DUP2
/* Define to 1 if you have the header file. */
#undef HAVE_FCNTL_H
/* Define to 1 if you have the `fork' function. */
#undef HAVE_FORK
/* Define to 1 if you have freetype2 */
#undef HAVE_FT2
/* Define to 1 if you have the `ftime' function. */
#undef HAVE_FTIME
/* Define to 1 if you have the `FT_Library_Version' function. */
#undef HAVE_FT_LIBRARY_VERSION
/* Define to 1 if you have the `gdImageCreateFromJpeg' function. */
#undef HAVE_GDIMAGECREATEFROMJPEG
/* Define to 1 if you have the `gdImageCreateFromPngPtr' function. */
#undef HAVE_GDIMAGECREATEFROMPNGPTR
/* Define to 1 if you have the `gdImageCreateTrueColor' function. */
#undef HAVE_GDIMAGECREATETRUECOLOR
/* Define to 1 if you have the `gdImageGif' function. */
#undef HAVE_GDIMAGEGIF
/* Define to 1 if you have the `gdImagePngEx' function. */
#undef HAVE_GDIMAGEPNGEX
/* Define to 1 if you have the header file. */
#undef HAVE_GD_H
/* Define to 1 if you have the `getpagesize' function. */
#undef HAVE_GETPAGESIZE
/* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY
/* Define to 1 if you have the header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the header file. */
#undef HAVE_KPATHSEA_KPATHSEA_H
/* Define to 1 if your kpathsea has kpse_enc_format */
#undef HAVE_KPSE_ENC_FORMATS
/* Define to 1 if you have the `gd' library (-lgd). */
#undef HAVE_LIBGD
/* Define to 1 if you have the header file. */
#undef HAVE_LIBGEN_H
/* Define to 1 if you have the `kpathsea' library (-lkpathsea). */
#undef HAVE_LIBKPATHSEA
/* Define to 1 if you have the `m' library (-lm). */
#undef HAVE_LIBM
/* Define to 1 if you have the `png' library (-lpng). */
#undef HAVE_LIBPNG
/* Define to 1 if you have the `z' library (-lz). */
#undef HAVE_LIBZ
/* Define to 1 if you have the header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `memset' function. */
#undef HAVE_MEMSET
/* Define to 1 if you have a working `mmap' system call. */
#undef HAVE_MMAP
/* Define to 1 if you have the `munmap' function. */
#undef HAVE_MUNMAP
/* Define to 1 if you have the header file. */
#undef HAVE_PNG_H
/* Define to 1 if you have the `pow' function. */
#undef HAVE_POW
/* Define to 1 if you have the `putenv' function. */
#undef HAVE_PUTENV
/* Define to 1 if stdbool.h conforms to C99. */
#undef HAVE_STDBOOL_H
/* Define to 1 if you have the header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the `strchr' function. */
#undef HAVE_STRCHR
/* Define to 1 if you have the header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the `strrchr' function. */
#undef HAVE_STRRCHR
/* Define to 1 if you have the `strstr' function. */
#undef HAVE_STRSTR
/* Define to 1 if you have the `strtol' function. */
#undef HAVE_STRTOL
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_PARAM_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_TIME_H
/* Define to 1 if you have the header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have that is POSIX.1 compatible. */
#undef HAVE_SYS_WAIT_H
/* Define to 1 if you have the header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if you have the `vfork' function. */
#undef HAVE_VFORK
/* Define to 1 if you have the header file. */
#undef HAVE_VFORK_H
/* Define to 1 if you have the `vprintf' function. */
#undef HAVE_VPRINTF
/* Define to 1 if `fork' works. */
#undef HAVE_WORKING_FORK
/* Define to 1 if `vfork' works. */
#undef HAVE_WORKING_VFORK
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if you can safely include both and . */
#undef TIME_WITH_SYS_TIME
/* Define as 1 to get execution time output. */
#undef TIMING
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* Define to `long long' if does not define it. */
#undef int64_t
/* Define to `int' if does not define. */
#undef pid_t
/* Define to `unsigned int' if does not define. */
#undef size_t
/* Define to `unsigned long long' if does not define it. */
#undef uint64_t
/* Define as `fork' if `vfork' does not work. */
#undef vfork
dvipng-1.15/config.h 0000664 0001750 0001750 00000013673 12475135444 013652 0 ustar janla64 janla64 /* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define as 1 to get the debug (-d) option. */
#define DEBUG 1
/* The environment setting for $SELFAUTODIR */
/* #undef ENV_SELFAUTODIR */
/* The environment setting for $SELFAUTOLOC */
/* #undef ENV_SELFAUTOLOC */
/* The environment setting for $SELFAUTOPARENT */
/* #undef ENV_SELFAUTOPARENT */
/* Define as the path to GhostScript. */
#define GS_PATH "gs"
/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
/* #undef HAVE_DOPRNT */
/* Define to 1 if you have the `dup2' function. */
#define HAVE_DUP2 1
/* Define to 1 if you have the header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have the `fork' function. */
#define HAVE_FORK 1
/* Define to 1 if you have freetype2 */
#define HAVE_FT2 1
/* Define to 1 if you have the `ftime' function. */
/* #undef HAVE_FTIME */
/* Define to 1 if you have the `FT_Library_Version' function. */
#define HAVE_FT_LIBRARY_VERSION 1
/* Define to 1 if you have the `gdImageCreateFromJpeg' function. */
#define HAVE_GDIMAGECREATEFROMJPEG 1
/* Define to 1 if you have the `gdImageCreateFromPngPtr' function. */
#define HAVE_GDIMAGECREATEFROMPNGPTR 1
/* Define to 1 if you have the `gdImageCreateTrueColor' function. */
#define HAVE_GDIMAGECREATETRUECOLOR 1
/* Define to 1 if you have the `gdImageGif' function. */
#define HAVE_GDIMAGEGIF 1
/* Define to 1 if you have the `gdImagePngEx' function. */
#define HAVE_GDIMAGEPNGEX 1
/* Define to 1 if you have the header file. */
#define HAVE_GD_H 1
/* Define to 1 if you have the `getpagesize' function. */
#define HAVE_GETPAGESIZE 1
/* Define to 1 if you have the `gettimeofday' function. */
/* #undef HAVE_GETTIMEOFDAY */
/* Define to 1 if you have the header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the header file. */
#define HAVE_KPATHSEA_KPATHSEA_H 1
/* Define to 1 if your kpathsea has kpse_enc_format */
#define HAVE_KPSE_ENC_FORMATS 1
/* Define to 1 if you have the `gd' library (-lgd). */
#define HAVE_LIBGD 1
/* Define to 1 if you have the header file. */
#define HAVE_LIBGEN_H 1
/* Define to 1 if you have the `kpathsea' library (-lkpathsea). */
#define HAVE_LIBKPATHSEA 1
/* Define to 1 if you have the `m' library (-lm). */
#define HAVE_LIBM 1
/* Define to 1 if you have the `png' library (-lpng). */
#define HAVE_LIBPNG 1
/* Define to 1 if you have the `z' library (-lz). */
#define HAVE_LIBZ 1
/* Define to 1 if you have the header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the `memset' function. */
#define HAVE_MEMSET 1
/* Define to 1 if you have a working `mmap' system call. */
#define HAVE_MMAP 1
/* Define to 1 if you have the `munmap' function. */
#define HAVE_MUNMAP 1
/* Define to 1 if you have the header file. */
#define HAVE_PNG_H 1
/* Define to 1 if you have the `pow' function. */
#define HAVE_POW 1
/* Define to 1 if you have the `putenv' function. */
#define HAVE_PUTENV 1
/* Define to 1 if stdbool.h conforms to C99. */
#define HAVE_STDBOOL_H 1
/* Define to 1 if you have the header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strchr' function. */
#define HAVE_STRCHR 1
/* Define to 1 if you have the header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the `strrchr' function. */
#define HAVE_STRRCHR 1
/* Define to 1 if you have the `strstr' function. */
#define HAVE_STRSTR 1
/* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have that is POSIX.1 compatible. */
#define HAVE_SYS_WAIT_H 1
/* Define to 1 if you have the header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the `vfork' function. */
#define HAVE_VFORK 1
/* Define to 1 if you have the header file. */
/* #undef HAVE_VFORK_H */
/* Define to 1 if you have the `vprintf' function. */
#define HAVE_VPRINTF 1
/* Define to 1 if `fork' works. */
#define HAVE_WORKING_FORK 1
/* Define to 1 if `vfork' works. */
#define HAVE_WORKING_VFORK 1
/* Define to 1 if the system has the type `_Bool'. */
#define HAVE__BOOL 1
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "dvipng@nongnu.org"
/* Define to the full name of this package. */
#define PACKAGE_NAME "dvipng"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "dvipng 1.15"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "dvipng"
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.15"
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define to 1 if you can safely include both and . */
#define TIME_WITH_SYS_TIME 1
/* Define as 1 to get execution time output. */
/* #undef TIMING */
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
/* Define to `long long' if does not define it. */
/* #undef int64_t */
/* Define to `int' if does not define. */
/* #undef pid_t */
/* Define to `unsigned int' if does not define. */
/* #undef size_t */
/* Define to `unsigned long long' if does not define it. */
/* #undef uint64_t */
/* Define as `fork' if `vfork' does not work. */
/* #undef vfork */
dvipng-1.15/INSTALL 0000644 0001750 0001750 00000013571 12475135443 013257 0 ustar janla64 janla64 Installing dvipng
*****************
Installing dvipng should be simple: merely './configure', 'make', and
'make install'.
Prerequisites
=============
* The GD Graphics Draw library, libgd
The drawing library 'libgd' is necessary, and is downloadable at
, and there are binary packages for most
operating systems from their respective distributors. In any case,
the latest version of the library installs using 'autoconf' so it
should not be difficult for you to install it from source, and then
proceed with installing dvipng.
* The path-searching library kpathsea
Kpathsea is most likely included in your LaTeX installation, but it
may happen that ./configure does not find it; see below. If you do
not have it, download it from and compile it.
I have no experience with this, so I cannot help much here.
* The font-rendering library FreeType 2
While not strictly necessary, a recent FreeType 2 is recommended
since dvipng currently will produce better-quality images when this
library is available. To take advantage of this, you should have
at least FreeType 2.1.9.
FreeType 2 will enable direct support for PostScript and TrueType
fonts, so that dvipng will not need to generate bitmapped variants
on disk of the TeX fonts since modern TeX distributions include
PostScript versions of them. Then, you can render images at
different (and unusual) resolutions without cluttering the disk
with lots of bitmapped fonts.
Finally, it will enable subfont support in dvipng. That is, if you
want to render CJK-LaTeX characters, you must have FreeType 2
installed.
* libpng and libz
To be able to compress and write PNG files to disk, dvipng (or
really libgd) uses libpng which in turn uses libz. These should be
available on any modern system, if not, download them and install
them.
* The 'texinfo' package
This is needed for building the documentation.
Configure
=========
The first step is to configure the source code, telling it where various
files will be. To do so, run
./configure OPTIONS
(Note: if you have fetched dvipng from CVS rather than a regular
release, you will have to first generate './configure' by running
'autoconf' 2.53 or later.)
On many machines, you will not need to specify any options, but if
'configure' cannot determine something on its own, you'll need to help
it out. For a list of the options type
./configure --help
On some machines, the libraries will be installed in directories that
are not in the linker's search path. This will generate an error when
running './configure', indicating that it cannot find libgd or
libkpathsea (most likely). You then need to specify the path to the
respective library's object files. They are typically called e.g.,
'libgd.a' or 'libgd.so'. If they are located in e.g., '/sw/local/lib',
do
./configure LDFLAGS=-L/sw/local/lib
If the library is available as a shared object file ('.so'), the
runtime linker may also need to be told where to find the library, then
use
./configure LDFLAGS='-L/sw/local/lib -R/sw/local/lib'
When either of these is necessary, it is likely that the C header
files are also installed in directories that are not in the C
preprocessor's search path. This will also generate an error when
running './configure', indicating that it cannot find e.g., 'gd.h' or
'kpathsea.h' (most likely). You then need to specify the path to the
respective library's C header files. If they are located in e.g.,
'/sw/local/include', do
./configure CPPFLAGS=-I/sw/local/include
On my SUN Solaris workstation, I had to combine this into
./configure CPPFLAGS='-I/sw/local/include -I/sw/tex/teTeX/1.0/include'\
LDFLAGS='-L/sw/local/lib -R/sw/local/lib -L/sw/tex/teTeX/1.0/lib/'
where the backslash denotes a continuation of the line.
Build/install
=============
Once 'configure' has been run, simply enter
make
at the prompt to compile the C code, and build the documentation files.
To install the files into the locations chosen earlier, type
make install
You may need special privileges to install, e.g., if you are installing
into system directories.
Installation outside the texmf tree
===================================
In some cases, a dvipng binary installed outside the texmf tree will not
be able to find virtual fonts, or the PostScript font maps (normally
used by dvips). This may be because _only_ $SELFAUTOLOC, $SELFAUTODIR,
and $SELFAUTOPARENT are used in the texmf tree configuration file
'texmf.cnf'. If so, give the switch '--enable-selfauto-set' to
'./configure'. This will make dvipng adjust these three internally so
that kpathsea thinks that dvipng _is_ installed in the texmf tree.
Installation for non-privileged users
=====================================
Often people without system administration privileges want to install
software for their private use. In that case you need to specify more
options to the 'configure' script, usually this is done by using the
'--prefix' option to the 'configure' script, and let it point to the
personal home directory. In that way, resulting binaries will be
installed under the 'bin' subdirectory of your home directory, manual
pages under 'man' and so on. That way, it is reasonably easy to
maintain a bunch of additional packages, since the prefix argument is
supported by most 'configure' scripts.
You'll have to add something like '/home/myself/bin' to your 'PATH'
shell variable, if it isn't there already, and similarly set the
'INFOPATH' and 'MANPATH' variables to be able to access the
documentation.
Copying
=======
This program is released under the GNU Lesser General Public License
version 3, see the COPYING file in the dvipng distribution or
.
Copyright (C) 2002-2015 Jan-AAke Larsson
dvipng-1.15/mkinstalldirs 0000775 0001750 0001750 00000003421 12475135444 015030 0 ustar janla64 janla64 #! /bin/sh
# mkinstalldirs --- make directory hierarchy
# Author: Noah Friedman
# Created: 1993-05-16
# Public domain
# $Id$
errstatus=0
dirmode=""
usage="\
Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
# process command line arguments
while test $# -gt 0 ; do
case "${1}" in
-h | --help | --h* ) # -h for help
echo "${usage}" 1>&2; exit 0 ;;
-m ) # -m PERM arg
shift
test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
dirmode="${1}"
shift ;;
-- ) shift; break ;; # stop option processing
-* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option
* ) break ;; # first non-opt arg
esac
done
for file
do
if test -d "$file"; then
shift
else
break
fi
done
case $# in
0) exit 0 ;;
esac
case $dirmode in
'')
if mkdir -p -- . 2>/dev/null; then
echo "mkdir -p -- $*"
exec mkdir -p -- "$@"
fi ;;
*)
if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
echo "mkdir -m $dirmode -p -- $*"
exec mkdir -m "$dirmode" -p -- "$@"
fi ;;
esac
for file
do
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
shift
pathcomp=
for d
do
pathcomp="$pathcomp$d"
case "$pathcomp" in
-* ) pathcomp=./$pathcomp ;;
esac
if test ! -d "$pathcomp"; then
echo "mkdir $pathcomp"
mkdir "$pathcomp" || lasterr=$?
if test ! -d "$pathcomp"; then
errstatus=$lasterr
else
if test ! -z "$dirmode"; then
echo "chmod $dirmode $pathcomp"
lasterr=""
chmod "$dirmode" "$pathcomp" || lasterr=$?
if test ! -z "$lasterr"; then
errstatus=$lasterr
fi
fi
fi
fi
pathcomp="$pathcomp/"
done
done
exit $errstatus
# Local Variables:
# mode: shell-script
# sh-indentation: 3
# End:
# mkinstalldirs ends here
dvipng-1.15/ChangeLog 0000664 0001750 0001750 00000067417 12475135444 014013 0 ustar janla64 janla64 2015-03-01 Jan-Åke Larsson
* RELEASE: Release 1.15
* color.c, config.h.in, configure.ac, dvi.c, dvipng.h, misc.c,
pk.c, set.c, sfd.c, tfm.c, vf.c: Remove references to kpathsea
xmalloc, and enable non-GNU malloc
* dvi.c: Fix long sleep interval in --follow
* INSTALL, Makefile.in, README, config.h.in, configure.ac, draw.c,
dvipng.1, dvipng.c, dvipng.h, dvipng.texi, font.c, fontmap.c,
install.texi, miktex.h, misc.c, readme.texi, t1.c: Remove support
for the now dead libt1
* special.c: Use
* color.c: Fix segfault at missing xcolor.sty
* set.c: Added check for out of memory in libgd allocate
2012-09-15 Jan-Åke Larsson
* ft.c: Add warning for missing target_light hinting
2012-09-15 Jan-Åke Larsson
* dvipng.c: Use return value of fgets better
2010-12-17 Jan-Åke Larsson
* COPYING.gd: Inclusion of the gd copyright notice
2010-12-14 Jan-Åke Larsson
* RELEASE: Spell correctly
2010-12-06 Jan-Åke Larsson
* special.c: Warn when --norawps hinders output
* dvipng.texi: Document usage of a fallback
* Makefile.in: Add www directory
2010-10-23 Jan-Åke Larsson
* dvipng.1, RELEASE: Prepare for 1.14
2010-10-22 Jan-Åke Larsson
* configure.ac: Prepare for 1.14
* special.c: Tidy up the three different calls to gs on different
systems.
* dvipng.texi: Some adjustments, document handling of raw
PostScript
2010-10-21 Jan-Åke Larsson
* special.c: Code cleanup
2010-10-14 Jan-Åke Larsson
* dvipng.h (malloc): Put malloc def first
* special.c (ps2png): Ensure one and only one showpage, and do it
in PostScript instead of in C as suggested by Akira's previous patch
2010-10-02 Peter Breitenlohner
* special.c (ps2png): Drop unused 'bool showpage' for WIN32.
2010-10-01 Jan-Åke Larsson
* special.c: Add heuristics to ignore non-rendering specials from
hyperref
2010-09-30 Jan-Åke Larsson
* special.c, misc.c, dvipng.h, dvipng.texi: Add option to not try
converting raw PostScript
2010-09-29 Jan-Åke Larsson
* special.c (ps2png): Reap zombies
* papersiz.c: Fix bug in length decoder
2010-09-22 Jan-Åke Larsson
* color.c, enc.c, fontmap.c, misc.c, sfd.c: Handle CRLF correctly
2010-09-20 Akira Kakuto
* special.c (ps2png): fix WIN32 bug that dvipng.exe waits
infinitely for some kind of eps files.
2010-03-17 Jan-Ake Larsson
* Release 1.13
* misc.c: Correct copyright year
* RELEASE: Prepare for 1.13
2010-03-17 Peter Breitenlohner
* configure.ac: Check for kpse_set_program_name() as used in
dvipng.c instead of kpse_set_progname().
Support WIN32 builds (native or MinGW32).
* dvipng.h (min, max): Always undefine before defining.
* dvi.c: For WIN32 use Sleep(1000) instead of sleeep(1).
* misc.c: #include depends on HAVE_MMAP.
* dvipng.h, font.c, misc.c: For mmap code use '#ifdef WIN32'
instead of '#ifdef MIKTEX'.
* special.c: WIN32 specific replacement for fork and pipe, using
code from Akira Kakuto, (e-mail from 23 Feb 2010 23:33:58).
2010-03-17 Jan-Ake Larsson
* test_dvipng.tex: Don't use mathptmx
* color.c, dvi.c, dvipng.h, fontmap.c, misc.c, papersiz.c,
ppagelist.c, special.c: Avoid compiler warnings
* dvipng.texi, configure.ac: Prepare for 1.13
* draw.c, dvipng.h, set.c, vf.c: Adjust glyph-index bounds
test. Remove possible segfault from isprint().
2010-02-11 Jan-Ake Larsson
* color.c, draw.c, dvi.c, enc.c, font.c, fontmap.c, ft.c,
papersiz.c, pk.c, ppagelist.c, set.c, sfd.c, special.c, t1.c:
Declare functions used only in one file as static to avoid
warnings when compiling with 'gcc --Wmissing-prototypes',
suggested by Peter Breitenlohner
2010-01-28 Jan-Ake Larsson
* draw.c, dvipng.h, dvipng.texi, misc.c: Add width reporting
2009-04-14 Jan-Ake Larsson
* fontmap.c: Make the thing build without FT2
2009-03-28 Jan-Ake Larsson
* config.h.in: Remove the last remnants of alloca
2009-03-26 Jan-Ake Larsson
* configure.ac, dvipng.h: Remove the last remnants of alloca
* draw.c, font.c, ft.c, pk.c, t1.c, vf.c: Make the name element of
the font struct a pointer, not an array
* dvi.c, ppagelist.c: Change error msg to mention malloc
* color.c, enc.c, pk.c, set.c, sfd.c, special.c, tfm.c: Don't use
alloca
2009-03-25 Jan-Ake Larsson
* config.h.in, configure.ac: Check for libgen.h, not libgen
* special.c: Put declarations before code
* color.c, dvipng.h, fontmap.c, ft.c, misc.c, pk.c, set.c, t1.c,
tfm.c: Exchange #if for #ifdef
2009-02-23 Jan-Ake Larsson
* Release 1.12
* INSTALL, README, install.texi, readme.texi, special.c: Correct
date for copyright
* RELEASE, configure.ac, dvipng.1, dvipng.texi: Prepare for 1.12
2009-01-23 Jan-Ake Larsson
* special.c: Keep transparent background in rescaled included
bitmaps
2008-06-04 Jan-Ake Larsson
* special.c: Add the color PostScript prologue
2008-06-03 Jan-Ake Larsson
* dvipng.h, special.c: Support xcolor PostScript prologue
* color.c: Support x11nam.def, fix handling of xcolor
multiple-model color values, and xcolor PostScript prologue
2008-06-02 Jan-Ake Larsson
* special.c: Some (most?) literal PostScript specials seem to
depend on tex.pro and possibly special.pro, always load these
* configure.ac: Fix gs checks
* misc.c: Correct last mmap element
2008-05-27 Jan-Ake Larsson
* readme.texi: Mention new color models in xcolor
* color.c: Adjust for new version of xcolor, mainly color prefixes
2008-05-14 Jan-Ake Larsson
* Release 1.11
* configure.ac, dvipng.1, dvipng.texi, RELEASE: Prepare for 1.11
* special.c: Fix PS inclusion regression
2008-05-09 Jan-Ake Larsson
* Release 1.10
* RELEASE: Prepare for 1.10
2008-05-08 Jan-Ake Larsson
* special.c: Add warning about DVI code in PS environment
2008-05-07 Jan-Ake Larsson
* README, readme.texi: Mention gs interpreter lib in TODO
* aclocal.m4, configure.ac: Move gs device check so that it can be
called from different points
2008-05-05 Jan-Ake Larsson
* draw.c, dvi.c, dvipng.h: Revert creation of dvi command struct
* draw.c, dvi.c: Init dvi command struct
* draw.c, dvi.c, dvipng.h: Create dvi command struct
* special.c: Rearrange code
* color.c, dvipng.h, enc.c, fontmap.c, misc.c, pk.c, sfd.c,
special.c, tfm.c, vf.c: Change name of fmmap struct element
2008-04-29 Jan-Ake Larsson
* dvipng.1: Prepare for 1.10
* configure.ac: Prepare for 1.10, check for gdImageCreateJpeg
* aclocal.m4: Cosmetic changes
* special.c: Change to HAVE_...JPEG
* dvipng.h: Remove c++ comment
* dvipng.texi: Prepare for 1.10. Use 'active' in the 'preview'
package, remove unused text
* Makefile.in:
Install dvipng.1 from the tarball, mark maintainer targets
2008-02-08 Jan-Ake Larsson
* Makefile.in, INSTALL, README, color.c, commands.h, configure.ac,
* draw.c, dvi.c, dvipng.1, dvipng.c, dvipng.h, dvipng.texi, enc.c,
* font.c, fontmap.c, ft.c, install.texi, macros.texi, miktex.h,
* misc.c, papersiz.c, pk.c, ppagelist.c, readme.texi, set.c, sfd.c,
* special.c, t1.c, test_dvipng.tex, tfm.c, vf.c, COPYING,
* COPYING.LESSER: Change to LGPLv3
* install.texi:
* README:
* dvipng.texi: Add blurb about MediaWiki, and cosmetic changes
2008-01-10 Jan-Ake Larsson
* set.c: Correct typo
2007-12-12 Jan-Ake Larsson
* special.c: Correct header test, add proper ps::[start] and
ps::[end] detection, add code to make tikz/pgf dvips (~PostScript)
specials work
2007-10-26 Jan-Ake Larsson
* draw.c:
* dvi.c:
* special.c: Change DVIGetCommand so that the command is
zero-terminated. This simplifies string operations on specials and
makes the length argument to SetSpecial unnecessary. Handle
preview-bop-hook correctly
* special.c: Simplify PostScript header and multi-special
handling
* color.c:
* draw.c:
* dvi.c:
* dvipng.h:
* font.c:
* ft.c:
* misc.c:
* set.c:
* special.c:
* t1.c: Split the flags variable into page_flags, option_flags and
dvi->flags
* dvi.c:
* dvipng.c: dvi->flags resets now when the dvi is reopened
2007-08-06 Jan-Ake Larsson
* ft.c:
* misc.c:
* t1.c:
* tfm.c:
* vf.c: Memory fixes
2007-07-24 Jan-Ake Larsson
* special.c: Fix PostScript header usage
2007-07-22 Jan-Ake Larsson
* misc.c: Change version info slightly
* ft.c: Change debug info slightly
2007-07-21 Jan-Ake Larsson
* special.c: Rewrite to allow for raw PostScript specials, also
use PostScript headers
* dvipng.h:
* dvi.c: Add read-ahead for PostScript specials
* config.h.in:
* configure.ac: Add test for gd pointer->image conversion
2007-03-19 Jan-Ake Larsson
* draw.c: Better handling of glyph index bounds
* set.c: Check bounds for glyph index
2006-12-11 Jan-Ake Larsson
* readme.texi: Fix TODO, mention MediaWiki
* dvipng.h: Fix for alloca under AIX
* Makefile.in: mkinstalldirs is in $(srcdir)
2006-11-11 Jan-Ake Larsson
* Release 1.9
* INSTALL:
* README: Update for 1.9
* Makefile.in: Make the test fail if fonts not found
* configure.ac: Don't use "which". Add info about the selfauto
stuff. Report if CJK support present
* test_dvipng.tex: Remove the (intentional) failing special
2006-11-07 Jan-Ake Larsson
* fontmap.c: Don't warn if ttfonts.map is missing, fix pointer
* Makefile.in: Adjust manpage target so manual intervention isn't
needed anymore
* dvipng.1: Update manpage
* dvipng.texi: Update for 1.9
* COPYING, Makefile.in, color.c, commands.h, configure.ac, draw.c,
dvi.c, dvipng.c, dvipng.h, dvipng.texi, enc.c, font.c, fontmap.c,
ft.c, macros.texi, miktex.h, miktex.mak, misc.c, papersiz.c, pk.c,
ppagelist.c, set.c, sfd.c, special.c, t1.c, test_dvipng.tex,
tfm.c, vf.c: Update FSF address
* fontmap.c: Add ttfonts.map to the searched font maps
* RELEASE: Prepare for 1.9
2006-11-02 Jan-Ake Larsson
* dvipng.texi: Nitpicking on bitmapped graphics
2006-10-13 Jan-Ake Larsson
* readme.texi: Add note about subfont (CJK) support
* install.texi: Add that FreeType2 is needed for subfont (CJK) support
2006-10-12 Jan-Ake Larsson
* readme.texi: Fix todo
2006-10-11 Jan-Ake Larsson
* sfd.c: Change && to || so that multiple subfonts work
* ft.c: Adjust debug output
* configure.ac: Add sfd.o
2006-10-04 Jan-Ake Larsson
* configure.ac: Prepare for 1.9
* sfd.c: Only look for subfont file on recent kpathsea
* dvipng.c, ft.c, fontmap.c, dvipng.h: Prepare for subfonts (CJK)
* sfd.c: Added. Used for subfonts (CJK)
* configure.ac: Change wording of gs helptext
* ft.c: Adjust debug message, and encoding selection
* special.c: Adjust debug messages
* dvipng.texi: Document the --strict option
* dvipng.c: Fix timer
* Makefile.in: Add dist target, simplify distclean
* fontmap.c: Remove segfault occuring for non-existent font
2006-08-08 Jan-Ake Larsson
* special.c: Make showpage flag static
* special.c:
Fix bug with -dSAFER and non-. paths, and bug with pngalpha and
background color
2006-05-17 Jan-Ake Larsson
* fontmap.c: Rearrange, simplify, speed up
2006-05-16 Jan-Ake Larsson
* ft.c: FT_LOAD_TARGET_LIGHT does not work in some cases, fall
back to FT_LOAD_NO_HINTING
2006-05-08 Jan-Ake Larsson
* dvipng.texi: Add credit
* Makefile.in: add www target
* README:
* readme.texi: Update capabilities info and preview-latex link
2006-03-30 Jan-Ake Larsson
* Release 1.8
* RELEASE: Update for 1.8
* set.c:
* readme.texi:
* install.texi:
* ft.c:
* dvi.c:
* draw.c:
* README:
* INSTALL: Update copyright
2006-03-29 Jan-Ake Larsson
* dvipng.1:
* dvipng.texi: Document new switch, new PostScript inclusion,
rearrange and adjust
* misc.c:
* INSTALL:
* README:
* install.texi:
* readme.texi: Minimal documentation adjustments
2006-03-27 Jan-Ake Larsson
* ft.c: Change to FT_LOAD_TARGET_LIGHT
* draw.c: Fix segfault in debug mode
* aclocal.m4: Make sure the kpse_enc_format test fails for the
right reason only
2006-02-27 Jan-Ake Larsson
* special.c: Use gs' pngalpha device, render without clipping,
adjust image position
* set.c: Simplify code, make color cache (page-)persistent
* draw.c: Reset new flag
* misc.c: New switch, remove some old switches from fast-help, use
new flag name
* dvipng.h: New flags
* configure.ac:
* config.h.in: Simplify gd tests
* configure.ac:
* aclocal.m4: Check gs devices
2006-02-10 Jan-Ake Larsson
* special.c: Use execlp for gs call
2006-02-03 Jan-Ake Larsson
* special.c:
Revert message about file type, debug information is enough
* special.c: Warn for nonexistent image decoder
2006-02-01 Jan-Ake Larsson
* special.c: Warn with file type when unable to load included image
* special.c: Read the first byte of file to be included and
compare with magic number
2006-01-31 Jan-Ake Larsson
* special.c: Temporary version, just try the different image
decoders and see
* special.c: Use correct variables
2006-01-29 Jan-Ake Larsson
* special.c: Add code to check image access permission
2006-01-28 Jan-Ake Larsson
* special.c: Simplify some code
* papersiz.c: Fix rounding error for length calculation
2006-01-26 Jan-Ake Larsson
* color.c: Fix typo that gave a segfault
* config.h.in: Remove unneeded function check
* configure.ac: Update for 1.8, remove unneeded function check
* dvipng.h: Switch debug numbers to coincide with the manual
* misc.c: Remove isdigit
* special.c: Add code to include PNG, JPEG and GIF images
2006-01-12 Jan-Ake Larsson
* special.c: Add a space in message
* misc.c: Do more tests for numeric-parameter options
* dvi.c: Outfilename: only remove .dvi extension, not others
2005-10-11 Jan-Ake Larsson
* Release 1.7
* INSTALL: Typographic changes
* README:
* RELEASE:
* configure.ac:
* dvipng.1:
* dvipng.texi: Adjust for 1.7
* install.texi: Insert space
* miktex.h: Adjust for 1.7, I am uncertain which of the new calls
are available in the MIKTeX environment
* readme.texi: Remove reference to my old laptop
2005-09-30 Jan-Ake Larsson
* config.h.in, configure.ac, ft.c:
Only use FT_Library_Version if available
2005-07-05 jalar
* Makefile.in: Enable srcdir != builddir
2005-07-04 jalar
* font.c: Add length check for font name
2005-06-28 Jan-Ake Larsson
* special.c: Read preview-latex version
2005-06-27 Jan-Ake Larsson
* Release 1.6
* RELEASE: Report what fixes have been done
* dvipng.texi: Document xcolor adaptations
* misc.c: Add 'Transparent' in the quick-help
* special.c: Cosmetics, do a _small_ message for bop-hook redef
2005-06-16 Jan-Ake Larsson
* dvipng.h:
* dvipng.c:
* color.c: Revamp colorname interpreter for xcolor
2005-06-14 Jan-Ake Larsson
* misc.c: Adjust MIKTeX stuff
2005-06-13 Jan-Ake Larsson
* color.c: Don't use strtok, adjust for xcolor
* special.c: Don't use strtok
2005-04-25 Jan-Ake Larsson
* config.h.in:
* configure.ac:
* set.c: Don't do alpha blending in truecolor mode, write alpha
channel to file
2005-04-20 Jan-Ake Larsson
* dvipng.texi: Add Credits
2005-04-19 Jan-Ake Larsson
* dvipng.h: Fix for sys/types.h conflict in old IRIX systems
* special.c: Adjust tightpage test
2005-04-04 Jan-Ake Larsson
* special.c: Make tightpage option backwards compatible
* RELEASE: Prepare for 1.6
* dvipng.1: Regenerate man page
* configure.ac:
* dvipng.texi:
* miktex.h: Update version info
* configure.ac:
* dvipng.texi:
* README:
* readme.texi: Update mailing list address
* configure.ac:
* config.h.in:
* special.c: Simplify string search
2005-04-03 Jan-Ake Larsson
* special.c: Try to detect all preview-latex versions tightpage
code
2005-03-02 Jan-Ake Larsson
* set.c: Remove extra debug printout
* t1.c: Sizes are given in big points in T1lib, in TeX points in
DVI files
* ft.c: Sizes are given in big points in FreeType, in TeX points
in DVI files
* dvipng.h: Fix boolean type again
2005-02-10 Jan-Ake Larsson
* config.h.in:
* configure.ac:
* dvipng.texi:
* dvipng.h:
* misc.c:
* set.c: Add proper alpha channel
2005-02-04 Jan-Ake Larsson
* color.c:
* draw.c:
* dvi.c:
* dvipng.c:
* font.c:
* ft.c:
* misc.c:
* papersiz.c:
* pk.c:
* set.c:
* special.c:
* t1.c:
* tfm.c:
* vf.c: Cosmetic changes to warnings and fatals
* Release 1.5
* RELEASE: Prepare for 1.5
* INSTALL:
* Makefile.in:
* README:
* color.c:
* commands.h:
* configure.ac:
* draw.c:
* dvi.c:
* dvipng.1:
* dvipng.c:
* dvipng.h:
* dvipng.texi:
* enc.c:
* font.c:
* fontmap.c:
* ft.c:
* install.texi:
* macros.texi:
* miktex.h:
* misc.c:
* papersiz.c:
* pk.c:
* ppagelist.c:
* readme.texi:
* set.c:
* special.c:
* t1.c:
* test_dvipng.tex:
* tfm.c:
* vf.c: Update Copyright, set version 1.5
2005-02-03 Jan-Ake Larsson
* draw.c:
* dvipng.h:
* set.c: Fix bug in --picky mode
2005-01-27 Jan-Ake Larsson
* dvipng.c: Restore --mfmode and --bdpi functionality
2005-01-25 Jan-Ake Larsson
* color.c: Fix segfault when trying to find nonexisting dvipsnam
color
* dvipng.c: Make dvipsnam colors available on command line
2004-12-10 Jan-Ake Larsson
* Release 1.4
* RELEASE:
* configure.ac:
* dvipng.1:
* dvipng.texi: Set version 1.4
* README: Fix formatting
* misc.c: Use mmap test. Hopefully, it will fail on ULTRIX, mmap
only works on character special devices (and not on regular files)
2004-12-02 Jan-Ake Larsson
* config.h.in:
* configure.ac:
* dvipng.h: Move int64_t and uint64_t tests entirely to autoconf
* dvi.c: Fix signedness
2004-11-30 Jan-Ake Larsson
* misc.c: Fix NULL dereference.
2004-11-25 Jan-Ake Larsson
* Release 1.3
* Makefile.in, README, dvipng.1, readme.texi: Fix dvigif
installation and docs
* INSTALL:
* README: Add license
* dvipng.c: Remove duplicate copyright
* config.h.in:
* configure.ac: Add some tests
* dvipng.1:
* dvipng.texi: Add some minor things
2004-11-24 Jan-Ake Larsson
* config.h.in:
* configure.ac: Test for 64-bit types.
* dvipng.h: Use char* arithmetic, not void*. And enable use of
gcc -ansi -pedantic.
* special.c: Don't use C++ comments.
* papersiz.c: Rewrite
* draw.c:
* dvi.c:
* font.c:
* ft.c:
* misc.c:
* pk.c:
* tfm.c:
* vf.c: Fix signedness
2004-11-15 Reiner Steib
* draw.c, dvipng.c, enc.c, font.c, ft.c, pk.c, special.c, t1.c:
Don't use C++ comments.
2004-11-05 David Kastrup
* Makefile.in (install-dvigif): Don't fail if dvigif already
exists.
2004-11-02 Jan-Åke Larsson
* dvipng.h: Fix boolean type
2004-11-01 Jan-Åke Larsson
* RELEASE: Update for 1.3
* dvipng.h: Load alloca.h when available
* font.c:
* fontmap.c: Remove inline
* Makefile.in:
* commands.h:
* config.h.in:
* configure.ac:
* install.texi:
* macros.texi:
* miktex.h:
* readme.texi:
* test_dvipng.tex: Add copyright notice
* color.c:
* draw.c:
* dvi.c:
* dvipng.c:
* dvipng.h:
* enc.c:
* font.c:
* fontmap.c:
* ft.c:
* misc.c:
* papersiz.c:
* pk.c:
* ppagelist.c:
* set.c:
* special.c:
* t1.c:
* tfm.c:
* vf.c: Change c-in-a-circle to (C)
2004-10-27 Jan-Åke Larsson
* dvipng.1:
* dvipng.texi: Amend docs
* misc.c: Amend helptext
2004-10-26 Jan-Åke Larsson
* set.c:
* misc.c:
* dvipng.h: Change background transparency
* configure.ac: Bump version, add test for libz
2004-10-07 Jan-Åke Larsson
* dvipng.texi: document change in -o switch
2004-10-06 Jan-Åke Larsson
* set.c: Allow longer pagenumbers in output file (e.g., %06d)
2004-08-18 Jan-Åke Larsson
* Release 1.2
* RELEASE: Change for 1.2
* config.h.in: Update
* dvipng.1: change help text
* dvipng.texi: update mailing list text. And version.
* README:
* readme.texi: update info and todo list
* draw.c, misc.c, dvipng.c, dvipng.h:
Add an intermediate exit status
2004-08-17 Jan-Åke Larsson
* misc.c: add --gamma switch
* special.c: Fix comment
* set.c:
* dvipng.h: new Gamma function
* configure.ac: libm is needed by new gamma code
* dvipng.1:
* dvipng.texi: document new switches
* draw.c: change name of picky flag
* special.c: do not call ghostscript when switch given
* misc.c: add picky and ghostscript switches
* dvipng.h: add picky and ghostscript flags
2004-08-06 Jan-Åke Larsson
* dvipng.texi: Document --png, --gif, and --picky
* .cvsignore: Add *.gif
* Makefile.in: Install 'dvigif' if we have GIF support
* configure.ac: Test for gdImageGif and 'ln -s'
* config.h.in: GIF support
* set.c: GIF writing
* misc.c: basename fixes, --png and --gif fixes,
--no-image-on-warn changes name to --picky
* dvi.c: basename fixes
* dvipng.h: Portability fixes, add GIF image flag
2004-08-02 Jan-Åke Larsson
* draw.c: Fix behaviour of --no-image-on-warn
2004-07-01 Jan-Åke Larsson
* miktex.mak: New, for MIKTeX
* dvi.c:
* dvipng.c:
* dvipng.h:
* special.c: Adjust for MIKTeX
* color.c:
* enc.c:
* font.c:
* fontmap.c:
* misc.c:
* pk.c:
* tfm.c:
* vf.c: Move file-mmapping to misc.c, adjust it for MIKTeX
2004-06-29 Jan-Åke Larsson
* configure.ac:
* dvipng.h: inttypes.h not available on all platforms
* special.c: Remove snprintf, not available on certain platforms
2004-06-27 Jan-Åke Larsson
* dvipng.c: Fix case of missing font libs
* fontmap.c: Remove debug printf
* draw.c: Fix for case of absent font lib(s), correct typo
2004-06-24 Jan-Åke Larsson
* fontmap.c:
* pk.c:
* vf.c: More memory fixes
2004-06-21 Jan-Åke Larsson
* config.h.in:
* configure.ac: Test for stdbool, munmap and strtol
* test_dvipng.tex: Change color test
* dvipng.h:
* misc.c:
* ppagelist.c: Fix -r switch
* dvipng.h:
* font.c:
* misc.c:
* ppagelist.c:
* special.c:
* t1.c:
* tfm.c: Use stdbool
* color.c:
* dvi.c:
* dvipng.c:
* dvipng.h:
* enc.c:
* font.c:
* fontmap.c:
* ppagelist.c:
* special.c: Fix memory leak(s)
* color.c:
* draw.c:
* dvi.c:
* dvipng.h:
* misc.c:
* set.c:
* special.c: Fix color stack
* draw.c:
* dvipng.h:
* ft.c:
* pk.c:
* set.c:
* t1.c:
* tfm.c:
* vf.c: Simplify char structs
* color.c:
* draw.c:
* dvi.c:
* dvipng.c:
* dvipng.h:
* enc.c:
* font.c:
* fontmap.c:
* ft.c:
* misc.c:
* papersiz.c:
* pk.c:
* ppagelist.c:
* set.c:
* special.c:
* t1.c:
* tfm.c:
* vf.c: Add copyright notice
2004-05-31 Jan-Åke Larsson
* dvipng.1:
* configure.ac:
* RELEASE:
* INSTALL: Release 1.1
2004-05-26 Jan-Åke Larsson
* special.c: Handle source specials
* test_dvipng.tex: Add failing special and color test
* dvipng.c: Adjust coment about SELFAUTO...
* dvi.c: Fix possible overflow
2004-05-24 Jan-Åke Larsson
* misc.c: Remove -t, it is not implemented yet
* dvipng.h: Undef malloc, if defined
2004-05-18 Jan-Åke Larsson
* dvipng.texi: Fix build
2004-05-14 Jan-Åke Larsson
* config.h.in: Use more tests
* dvipng.1: Add documentation
* dvipng.texi: Fix build. Revert to four-argument @node, my
makeinfo cannot handle the one-argument form (yet).
2004-05-11 Jan-Åke Larsson
* configure.ac: More tests
2004-05-09 Jan-Åke Larsson
* install.texi: T1lib docs
* dvipng.1:
* dvipng.texi: Add documentation, and spellcheck
* special.c:
* color.c: Make colors work again.
2004-05-08 David Kastrup
* Create new ChangeLog for dvipng
2004-05-05 Jan-Åke Larsson
* fontmap.c: Use both kpse_fontmap_format and
_dvips_header_
* enc.c: Use configure test
* configure.ac: Add test for kpse_enc_format, reorder gd
and png tests
* aclocal.m4: Add test for kpse_enc_format
* special.c: More informative warnings
2004-05-04 Jan-Åke Larsson
* enc.c:
Use the new kpathsea search format kpse_enc_format if available,
otherwise use kpse_tex_ps_header_format
* fontmap.c:
Fix new kpathsea search type kpse_fontmap_format, use
kpse_dvips_config_format if not available
* ft.c: Fix sizing
* draw.c: Simplify LoadT1 call
* t1.c: Shorten call, fix sizing
* dvipng.h: Simplify char-storing structure
2004-05-03 Jan-Åke Larsson
* fontmap.c, font.c, t1.c, ft.c:
Fix for ps fonts not in psfontmap
2004-05-02 Jan-Åke Larsson
* Makefile.in:
* config.h.in:
* configure.ac:
* draw.c:
* dvipng.c:
* dvipng.h:
* enc.c:
* font.c:
* fontmap.c:
* ft.c:
* t1.c:
* misc.c: Add t1lib support
2004-04-05 Jan-Åke Larsson
* dvipng.1:
* readme.texi:
* dvipng.texi:
* Makefile.in: Add man page
2004-03-27 Jan-Åke Larsson
* dvipng.texi: Fix debug documentations
* dvipng.c: Dont fail on --mode without --bdpi, output a warning.
2004-03-26 Jan-Åke Larsson
* papersiz.c: Remove compiler warning
* dvipng.texi:
* misc.c: Change year
2004-03-25 Jan-Åke Larsson
* special.c: Revert change, not only resolution but also
offset is needed when generating png from ps
* misc.c: Change helptext
* configure.ac: Change version number
* README: Checkin updated README
* pk.c:
* ft.c: Speed up color cache
* dvipng.texi: Add info on resolution, change version number
2004-03-24 Jan-Åke Larsson
* special.c: Fix missing 'showpage' and a memory leak
* font.c: Adjust error message
* dvipng.h:
* ft.c:
* pk.c: Change ink darkness map
* draw.c: Output page numbers more often. If the user has a
slow terminal he's to blame himself, not me.
* tfm.c: Include alloca.h if present
2004-03-23 Jan-Åke Larsson
* dvipng.texi: Adjust for the new -D option
2004-03-19 dakas
* RELEASE: Remove spurious blanks.
2004-03-19 Jan-Åke Larsson
* RELEASE: Update, shorten
2004-03-18 Jan-Åke Larsson
* RELEASE:
* dvi.c:
* dvipng.c:
* dvipng.h:
* font.c:
* misc.c:
* papersiz.c:
* special.c: Change the behaviour of the -D switch
2004-03-08 Jan-Åke Larsson
* font.c: Don't retry on PK generation failure
2004-03-02 David Kastrup
* dvi.c (DVIOpen): Fix a buffer overrun error.
dvipng-1.15/color.c 0000644 0001750 0001750 00000032156 12475135443 013510 0 ustar janla64 janla64 /* color.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
.
Copyright (C) 2002-2015 Jan-Åke Larsson
************************************************************************/
#include "dvipng.h"
/*
* Color. We delete and recreate the gdImage for each new page. This
* means that the stack must contain rgb value not color index.
* Besides, the current antialiasing implementation needs rgb anyway.
*/
struct colorname {
struct colorname *next;
char* color;
char name[1];
} *colornamep=NULL,*xcp=NULL;
const char *colordef[]={"xcolor.sty","dvipsnam.def",
"svgnam.def","x11nam.def",NULL};
char *xcpname=NULL;
void initcolor(void)
{
csp = 1;
cstack[0].red=255;
cstack[0].green=255;
cstack[0].blue=255;
cstack[1].red=0;
cstack[1].green=0;
cstack[1].blue=0;
}
static struct colorname * NewColor(const char* prefix, int nprefix,
char* name, int nname,
char* model, int nmodel,
char* values, int nvalues)
{
struct colorname *tmp;
if ((tmp=malloc(sizeof(struct colorname)+3+nprefix+nname+nmodel+nvalues))==NULL)
Fatal("Cannot malloc space for color name");
tmp->color=tmp->name+nprefix+nname+1;
strncpy(tmp->name,prefix,nprefix);
strncpy(tmp->name+nprefix,name,nname);
tmp->name[nprefix+nname]='\0';
strncpy(tmp->color,model,nmodel);
tmp->color[nmodel]=' ';
strncpy(tmp->color+nmodel+1,values,nvalues);
tmp->color[nmodel+nvalues+1]='\0';
model=tmp->color;
while(*model!='\0') {
if (*model==',')
*model=' ';
model++;
}
DEBUG_PRINT(DEBUG_COLOR,("\n COLOR NAME:\t'%s' '%s'",
tmp->name,tmp->color));
return(tmp);
}
#define FINDWORD(s) while(snext=list;
list=tmp;
} else if ((pos+15next=list;
list=tmp;
FINDWORD(pos);
}
} else {
pos++;
while (posnext;
free(xcp);
xcp=next;
}
if (xcpname!=NULL) {
free(xcpname);
xcpname=NULL;
}
}
void ClearColorNames(void)
{
struct colorname *next;
while (colornamep) {
next=colornamep->next;
free(colornamep);
colornamep=next;
}
ClearXColorPrologue();
}
void InitXColorPrologue(const char* name)
{
ClearXColorPrologue();
if ((xcpname=malloc(strlen(name)+1))==NULL)
Fatal("cannot malloc memory for xcolor prologue name");
strcpy(xcpname,name);
}
static struct colorname* LoadXColorPrologue(void)
{
struct colorname *list=NULL,*tmp=NULL;
char *filepath,*pos,*max;
const char *prefix="";
char *name,*values,*model;
int nprefix=0,nname,nvalues,nmodel;
struct filemmap fmmap;
boolean mmapfailed;
filepath=kpse_find_file(xcpname,kpse_program_text_format,false);
if (filepath == NULL)
return NULL;
DEBUG_PRINT(DEBUG_COLOR,("\n OPEN XCOLOR PROLOGUE:\t'%s'", filepath));
mmapfailed = MmapFile(filepath,&fmmap);
free(filepath);
if (mmapfailed)
return NULL;
pos=fmmap.data;
max=fmmap.data+fmmap.size;
while(posnext=list;
list=tmp;
}
}
UnMmapFile(&fmmap);
return(list);
}
#define FTO255(a) ((int) (255*a+0.5))
#define WARN_IF_FAILED(a,b) if (a==b) { page_flags |= PAGE_GAVE_WARN; \
Warning("missing color-specification value, treated as zero"); }
#define SKIPSPACES(s) while(s && *s==' ' && *s!='\0') s++
#define NEXTFLOAT255(c) FTO255(strtod(c,&end)); WARN_IF_FAILED(c,end); c=end
#define NEXTFLOAT(c) strtod(c,&end); WARN_IF_FAILED(c,end); c=end
#define NEXTINT(c) strtol(c,&end,10); WARN_IF_FAILED(c,end); c=end
#define NEXTHEX(c) strtol(c,&end,16); WARN_IF_FAILED(c,end); c=end
void stringrgb(const char* color,int *r,int *g,int *b)
{
char* end;
static int unloaded=0;
DEBUG_PRINT(DEBUG_COLOR,("\n COLOR SPEC:\t'%s' (",color));
SKIPSPACES(color);
if (strcmp(color,"Black")==0) {
*r = *g = *b = 0;
} else if (strcmp(color,"White")==0) {
*r = *g = *b = 255;
} else if (strncmp(color,"gray ",5)==0) {
color+=5;
*r = *g = *b = NEXTFLOAT255(color);
} else if (strncmp(color,"rgb ",4)==0) {
color+=4;
*r = NEXTFLOAT255(color);
*g = NEXTFLOAT255(color);
*b = NEXTFLOAT255(color);
} else if (strncmp(color,"Gray ",5)==0) {
color+=5;
*r = *g = *b = NEXTINT(color);
} else if (strncmp(color,"RGB ",4)==0) {
color+=4;
*r = NEXTINT(color);
*g = NEXTINT(color);
*b = NEXTINT(color);
} else if (strncmp(color,"HTML ",5)==0) {
color+=5;
*b = NEXTHEX(color);
*r = *b/65536;
*g = *b/256;
*b -= *g*256;
*g -= *r*256;
} else if (strncmp(color,"cmy ",4)==0
|| strncmp(color,"cmyk ",5)==0) {
int c,m,y,k;
color+=3;
k=(*color=='k');
if (k)
color++;
c = NEXTFLOAT255(color);
m = NEXTFLOAT255(color);
y = NEXTFLOAT255(color);
if (k)
k = NEXTFLOAT255(color);
*r = c+k<255 ? 255-(c+k) : 0;
*g = m+k<255 ? 255-(m+k) : 0;
*b = y+k<255 ? 255-(y+k) : 0;
} else if (strncmp(color,"hsb ",4)==0
|| strncmp(color,"HSB ",4)==0) {
/* The hsb and HSB models really need more presicion.
Use double and convert back*/
double hu,sa,br,f,R,G,B;
int i;
if (*color=='h') {
color+=4;
hu = NEXTFLOAT(color);
sa = NEXTFLOAT(color);
br = NEXTFLOAT(color);
} else {
color+=4;
hu = (float)NEXTINT(color); hu /= 255;
sa = (float)NEXTINT(color); sa /= 255;
br = (float)NEXTINT(color); br /= 255;
}
i=6*hu;
f=6*hu-i;
switch(i) {
case 0:
R = br*(1-sa*0); G = br*(1-sa*(1-f)); B = br*(1-sa*1); break;
case 1:
R = br*(1-sa*f); G = br*(1-sa*0); B = br*(1-sa*1); break;
case 2:
R = br*(1-sa*1); G = br*(1-sa*0); B = br*(1-sa*(1-f)); break;
case 3:
R = br*(1-sa*1); G = br*(1-sa*f); B = br*(1-sa*0); break;
case 4:
R = br*(1-sa*(1-f)); G = br*(1-sa*1); B = br*(1-sa*0); break;
case 5:
R = br*(1-sa*0); G = br*(1-sa*1); B = br*(1-sa*f); break;
default:
R = br*(1-sa*0); G = br*(1-sa*1); B = br*(1-sa*1);
}
*r=FTO255(R);
*g=FTO255(G);
*b=FTO255(B);
} else {
/* Model not found, probably a color name */
struct colorname *tmp;
if (xcp==NULL && xcpname!=NULL)
xcp=LoadXColorPrologue();
tmp=xcp;
while(tmp!=NULL && strcmp(color,tmp->name)!=0)
tmp=tmp->next;
if (tmp==NULL) {
while (colornamep==NULL && colordef[unloaded]!=NULL)
colornamep=LoadColornameFile(colordef[unloaded++]);
tmp=colornamep;
while(tmp!=NULL && strcmp(color,tmp->name)!=0) {
while (tmp->next==NULL && colordef[unloaded]!=NULL)
tmp->next=LoadColornameFile(colordef[unloaded++]);
tmp=tmp->next;
}
}
if (strcmp(color,tmp->name)==0) {
/* Found: one-level recursion */
DEBUG_PRINT(DEBUG_COLOR,("\n ---RECURSION--- "))
stringrgb(tmp->color,r,g,b);
} else {
/* Not found, warn */
page_flags |= PAGE_GAVE_WARN;
Warning("unimplemented color specification '%s'",color);
}
}
DEBUG_PRINT(DEBUG_COLOR,("%d %d %d) ",*r,*g,*b))
}
void background(const char* p)
{
stringrgb(p, &cstack[0].red, &cstack[0].green, &cstack[0].blue);
DEBUG_PRINT(DEBUG_COLOR,("\n BACKGROUND:\t(%d %d %d) ",
cstack[0].red, cstack[0].green, cstack[0].blue));
}
void pushcolor(const char * p)
{
if ( ++csp == STACK_SIZE )
Fatal("out of color stack space") ;
stringrgb(p, &cstack[csp].red, &cstack[csp].green, &cstack[csp].blue);
DEBUG_PRINT(DEBUG_COLOR,("\n COLOR PUSH:\t(%d %d %d) ",
cstack[csp].red, cstack[csp].green, cstack[csp].blue))
}
void popcolor(void)
{
if (csp > 1) csp--; /* Last color is global */
DEBUG_PRINT(DEBUG_COLOR,("\n COLOR POP\t"))
}
void resetcolorstack(const char * p)
{
if ( csp > 1 )
Warning("global color change within nested colors");
csp=0;
pushcolor(p) ;
DEBUG_PRINT(DEBUG_COLOR,("\n RESET COLOR:\tbottom of stack:"))
}
void StoreColorStack(struct page_list *tpagep)
{
int i=0;
DEBUG_PRINT(DEBUG_COLOR,("\n STORE COLOR STACK:\t %d ", csp));
tpagep->csp=csp;
while ( i <= csp ) {
DEBUG_PRINT(DEBUG_COLOR,("\n COLOR STACK:\t %d (%d %d %d) ",i,
cstack[i].red, cstack[i].green, cstack[i].blue));
tpagep->cstack[i].red = cstack[i].red;
tpagep->cstack[i].green = cstack[i].green;
tpagep->cstack[i].blue = cstack[i].blue;
i++;
}
}
void ReadColorStack(struct page_list *tpagep)
{
int i=0;
DEBUG_PRINT(DEBUG_COLOR,("\n READ COLOR STACK:\t %d ", tpagep->csp));
csp=tpagep->csp;
while ( i <= tpagep->csp ) {
DEBUG_PRINT(DEBUG_COLOR,("\n COLOR STACK:\t %d (%d %d %d) ",i,
cstack[i].red, cstack[i].green, cstack[i].blue));
cstack[i].red = tpagep->cstack[i].red;
cstack[i].green = tpagep->cstack[i].green;
cstack[i].blue = tpagep->cstack[i].blue;
i++;
}
}
void StoreBackgroundColor(struct page_list *tpagep)
{
/* Background color changes affect the _whole_ page */
tpagep->cstack[0].red = cstack[0].red;
tpagep->cstack[0].green = cstack[0].green;
tpagep->cstack[0].blue = cstack[0].blue;
}
dvipng-1.15/configure 0000775 0001750 0001750 00000576532 12475135443 014152 0 ustar janla64 janla64 #! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for dvipng 1.15.
#
# Report bugs to .
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
#
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
else
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
esac
fi
as_nl='
'
export as_nl
# Printing a long string crashes Solaris 7 /usr/bin/printf.
as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
# Prefer a ksh shell builtin over an external printf program on Solaris,
# but without wasting forks for bash or zsh.
if test -z "$BASH_VERSION$ZSH_VERSION" \
&& (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='print -r --'
as_echo_n='print -rn --'
elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='printf %s\n'
as_echo_n='printf %s'
else
if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
as_echo_n='/usr/ucb/echo -n'
else
as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
as_echo_n_body='eval
arg=$1;
case $arg in #(
*"$as_nl"*)
expr "X$arg" : "X\\(.*\\)$as_nl";
arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
esac;
expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
'
export as_echo_n_body
as_echo_n='sh -c $as_echo_n_body as_echo'
fi
export as_echo_body
as_echo='sh -c $as_echo_body as_echo'
fi
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
PATH_SEPARATOR=';'
}
fi
# IFS
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
done
IFS=$as_save_IFS
;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
$as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
# Unset variables that we do not need and which cause bugs (e.g. in
# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
# suppresses any "Segmentation fault" message there. '((' could
# trigger a bug in pdksh 5.2.14.
for as_var in BASH_ENV ENV MAIL MAILPATH
do eval test x\${$as_var+set} = xset \
&& ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '
# NLS nuisances.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE
# CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
_as_can_reexec=no; export _as_can_reexec;
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
*v*x* | *x*v* ) as_opts=-vx ;;
*v* ) as_opts=-v ;;
*x* ) as_opts=-x ;;
* ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
as_fn_exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
else
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
esac
fi
"
as_required="as_fn_return () { (exit \$1); }
as_fn_success () { as_fn_return 0; }
as_fn_failure () { as_fn_return 1; }
as_fn_ret_success () { return 0; }
as_fn_ret_failure () { return 1; }
exitcode=0
as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
else
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
if (eval "$as_required") 2>/dev/null; then :
as_have_required=yes
else
as_have_required=no
fi
if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
as_shell=$as_dir/$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
{ $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
CONFIG_SHELL=$as_shell as_have_required=yes
if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
break 2
fi
fi
done;;
esac
as_found=false
done
$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
{ $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
CONFIG_SHELL=$SHELL as_have_required=yes
fi; }
IFS=$as_save_IFS
if test "x$CONFIG_SHELL" != x; then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
*v*x* | *x*v* ) as_opts=-vx ;;
*v* ) as_opts=-v ;;
*x* ) as_opts=-x ;;
* ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
if test x$as_have_required = xno; then :
$as_echo "$0: This script requires a shell more modern than all"
$as_echo "$0: the shells that I found on your system."
if test x${ZSH_VERSION+set} = xset ; then
$as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
$as_echo "$0: be upgraded to zsh 4.3.4 or later."
else
$as_echo "$0: Please tell bug-autoconf@gnu.org and dvipng@nongnu.org
$0: about your system, including any error possibly output
$0: before this message. Then install a modern shell, or
$0: manually run the script under such a shell if you do
$0: have one."
fi
exit 1
fi
fi
fi
SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
# Unset more variables known to interfere with behavior of common tools.
CLICOLOR_FORCE= GREP_OPTIONS=
unset CLICOLOR_FORCE GREP_OPTIONS
## --------------------- ##
## M4sh Shell Functions. ##
## --------------------- ##
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
return $1
} # as_fn_set_status
# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
set +e
as_fn_set_status $1
exit $1
} # as_fn_exit
# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{
case $as_dir in #(
-*) as_dir=./$as_dir;;
esac
test -d "$as_dir" || eval $as_mkdir_p || {
as_dirs=
while :; do
case $as_dir in #(
*\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
test -d "$as_dir" && break
done
test -z "$as_dirs" || eval "mkdir $as_dirs"
} || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
} # as_fn_mkdir_p
# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
test -f "$1" && test -x "$1"
} # as_fn_executable_p
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
else
as_fn_append ()
{
eval $1=\$$1\$2
}
fi # as_fn_append
# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
else
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
$as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
$as_echo "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
fi
if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
as_dirname=dirname
else
as_dirname=false
fi
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
as_lineno_1=$LINENO as_lineno_1a=$LINENO
as_lineno_2=$LINENO as_lineno_2a=$LINENO
eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
# Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
sed -n '
p
/[$]LINENO/=
' <$as_myself |
sed '
s/[$]LINENO.*/&-/
t lineno
b
:lineno
N
:loop
s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
# in an infinite loop. This has already happened in practice.
_as_can_reexec=no; export _as_can_reexec
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
# original and so on. Autoconf is especially sensitive to this).
. "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
case `echo 'xy\c'` in
*c*) ECHO_T=' ';; # ECHO_T is single tab character.
xy) ECHO_C='\c';;
*) echo `echo ksh88 bug on AIX 6.1` > /dev/null
ECHO_T=' ';;
esac;;
*)
ECHO_N='-n';;
esac
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
else
rm -f conf$$.dir
mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
# ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
# In both cases, we have to default to `cp -pR'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -pR'
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -pR'
fi
else
as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p='mkdir -p "$as_dir"'
else
test -d ./-p && rmdir ./-p
as_mkdir_p=false
fi
as_test_x='test -x'
as_executable_p=as_fn_executable_p
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
test -n "$DJDIR" || exec 7<&0 &1
# Name of the host.
# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
#
# Initializations.
#
ac_default_prefix=/usr/local
ac_clean_files=
ac_config_libobj_dir=.
LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='dvipng'
PACKAGE_TARNAME='dvipng'
PACKAGE_VERSION='1.15'
PACKAGE_STRING='dvipng 1.15'
PACKAGE_BUGREPORT='dvipng@nongnu.org'
PACKAGE_URL=''
ac_unique_file="dvipng.c"
# Factoring default headers for most tests.
ac_includes_default="\
#include
#ifdef HAVE_SYS_TYPES_H
# include
#endif
#ifdef HAVE_SYS_STAT_H
# include
#endif
#ifdef STDC_HEADERS
# include
# include
#else
# ifdef HAVE_STDLIB_H
# include
# endif
#endif
#ifdef HAVE_STRING_H
# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
# include
# endif
# include
#endif
#ifdef HAVE_STRINGS_H
# include
#endif
#ifdef HAVE_INTTYPES_H
# include
#endif
#ifdef HAVE_STDINT_H
# include
#endif
#ifdef HAVE_UNISTD_H
# include
#endif"
ac_header_list=
ac_subst_vars='LTLIBOBJS
KPSEWHICH
INSTALL_INFO
MAKEINFO_MACROS
MAKEINFO
INSTALL_BIN_TARGET
LIBOBJS
POW_LIB
FT2_LIBS
FT2_CFLAGS
FT2_CONFIG
PSFONTS_O
EGREP
GREP
CPP
GS
LN_S
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
OBJEXT
EXEEXT
ac_ct_CC
CPPFLAGS
LDFLAGS
CFLAGS
CC
SET_MAKE
target_alias
host_alias
build_alias
LIBS
ECHO_T
ECHO_N
ECHO_C
DEFS
mandir
localedir
libdir
psdir
pdfdir
dvidir
htmldir
infodir
docdir
oldincludedir
includedir
localstatedir
sharedstatedir
sysconfdir
datadir
datarootdir
libexecdir
sbindir
bindir
program_transform_name
prefix
exec_prefix
PACKAGE_URL
PACKAGE_BUGREPORT
PACKAGE_STRING
PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
enable_debug
enable_timing
with_gs
with_ft_prefix
with_ft_exec_prefix
enable_freetypetest
enable_selfauto_set
'
ac_precious_vars='build_alias
host_alias
target_alias
CC
CFLAGS
LDFLAGS
LIBS
CPPFLAGS
CPP'
# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
ac_unrecognized_opts=
ac_unrecognized_sep=
# The variables have the same names as the options, with
# dashes changed to underlines.
cache_file=/dev/null
exec_prefix=NONE
no_create=
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
verbose=
x_includes=NONE
x_libraries=NONE
# Installation directory options.
# These are left unexpanded so users can "make install exec_prefix=/foo"
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datarootdir='${prefix}/share'
datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
infodir='${datarootdir}/info'
htmldir='${docdir}'
dvidir='${docdir}'
pdfdir='${docdir}'
psdir='${docdir}'
libdir='${exec_prefix}/lib'
localedir='${datarootdir}/locale'
mandir='${datarootdir}/man'
ac_prev=
ac_dashdash=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval $ac_prev=\$ac_option
ac_prev=
continue
fi
case $ac_option in
*=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
*=) ac_optarg= ;;
*) ac_optarg=yes ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir=$ac_optarg ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build_alias ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build_alias=$ac_optarg ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file=$ac_optarg ;;
--config-cache | -C)
cache_file=config.cache ;;
-datadir | --datadir | --datadi | --datad)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=*)
datadir=$ac_optarg ;;
-datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
| --dataroo | --dataro | --datar)
ac_prev=datarootdir ;;
-datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
| --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
datarootdir=$ac_optarg ;;
-disable-* | --disable-*)
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid feature name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval enable_$ac_useropt=no ;;
-docdir | --docdir | --docdi | --doc | --do)
ac_prev=docdir ;;
-docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
docdir=$ac_optarg ;;
-dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
ac_prev=dvidir ;;
-dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
dvidir=$ac_optarg ;;
-enable-* | --enable-*)
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid feature name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval enable_$ac_useropt=\$ac_optarg ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix=$ac_optarg ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he | -h)
ac_init_help=long ;;
-help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
ac_init_help=recursive ;;
-help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
ac_init_help=short ;;
-host | --host | --hos | --ho)
ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
host_alias=$ac_optarg ;;
-htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
ac_prev=htmldir ;;
-htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
| --ht=*)
htmldir=$ac_optarg ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir=$ac_optarg ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir=$ac_optarg ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir=$ac_optarg ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir=$ac_optarg ;;
-localedir | --localedir | --localedi | --localed | --locale)
ac_prev=localedir ;;
-localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
localedir=$ac_optarg ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst | --locals)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir=$ac_optarg ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c | -n)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir=$ac_optarg ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix=$ac_optarg ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix=$ac_optarg ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix=$ac_optarg ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name=$ac_optarg ;;
-pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
ac_prev=pdfdir ;;
-pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
pdfdir=$ac_optarg ;;
-psdir | --psdir | --psdi | --psd | --ps)
ac_prev=psdir ;;
-psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
psdir=$ac_optarg ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir=$ac_optarg ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir=$ac_optarg ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site=$ac_optarg ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir=$ac_optarg ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir=$ac_optarg ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target_alias ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target_alias=$ac_optarg ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers | -V)
ac_init_version=: ;;
-with-* | --with-*)
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid package name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval with_$ac_useropt=\$ac_optarg ;;
-without-* | --without-*)
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid package name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval with_$ac_useropt=no ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes=$ac_optarg ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries=$ac_optarg ;;
-*) as_fn_error $? "unrecognized option: \`$ac_option'
Try \`$0 --help' for more information"
;;
*=*)
ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
# Reject names that are not valid shell variable names.
case $ac_envvar in #(
'' | [0-9]* | *[!_$as_cr_alnum]* )
as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
esac
eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
*)
# FIXME: should be removed in autoconf 3.0.
$as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
$as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
esac
done
if test -n "$ac_prev"; then
ac_option=--`echo $ac_prev | sed 's/_/-/g'`
as_fn_error $? "missing argument to $ac_option"
fi
if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
*) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
# Check all directory arguments for consistency.
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
libdir localedir mandir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
case $ac_val in
*/ )
ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
eval $ac_var=\$ac_val;;
esac
# Be sure to have absolute directory names.
case $ac_val in
[\\/$]* | ?:[\\/]* ) continue;;
NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
esac
as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done
# There might be people who depend on the old broken behavior: `$host'
# used to hold the argument of --host etc.
# FIXME: To remove some day.
build=$build_alias
host=$host_alias
target=$target_alias
# FIXME: To remove some day.
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
fi
fi
ac_tool_prefix=
test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
ac_pwd=`pwd` && test -n "$ac_pwd" &&
ac_ls_di=`ls -di .` &&
ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
as_fn_error $? "working directory cannot be determined"
test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
as_fn_error $? "pwd does not report name of working directory"
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then the parent directory.
ac_confdir=`$as_dirname -- "$as_myself" ||
$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
srcdir=$ac_confdir
if test ! -r "$srcdir/$ac_unique_file"; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
if test ! -r "$srcdir/$ac_unique_file"; then
test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
fi
ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
ac_abs_confdir=`(
cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
pwd)`
# When building in place, set srcdir=.
if test "$ac_abs_confdir" = "$ac_pwd"; then
srcdir=.
fi
# Remove unnecessary trailing slashes from srcdir.
# Double slashes in file names in object file debugging info
# mess up M-x gdb in Emacs.
case $srcdir in
*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
esac
for ac_var in $ac_precious_vars; do
eval ac_env_${ac_var}_set=\${${ac_var}+set}
eval ac_env_${ac_var}_value=\$${ac_var}
eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
eval ac_cv_env_${ac_var}_value=\$${ac_var}
done
#
# Report the --help message.
#
if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures dvipng 1.15 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print \`checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for \`--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or \`..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, \`make install' will install all the files in
\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
an installation prefix other than \`$ac_default_prefix' using \`--prefix',
for instance \`--prefix=\$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/dvipng]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
_ACEOF
cat <<\_ACEOF
_ACEOF
fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of dvipng 1.15:";;
esac
cat <<\_ACEOF
Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-debug Compile without debug (-d) option
--enable-timing Output execution time of dvipng
--disable-freetypetest Do not try to compile and run
a test FreeType program
--enable-selfauto-set This option will make the final binary explicitly
set the $SELFAUTO... variables to make it look as
dvipng is installed in the main texmf tree, even if
it isn't. This is necessary when texmf.cnf only uses
$SELFAUTO... variables and dvipng is not installed
in the texmf tree. Otherwise, dvipng may not be able
to find virtual fonts, or psfonts.map. To find out,
first build the binary and do 'make test'. If the
test fails, you need this switch.
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-gs=/PATH/TO/gs Hard-wire the location of GhostScript
--with-ft-prefix=PREFIX
Prefix where FreeType is installed (optional)
--with-ft-exec-prefix=PREFIX
Exec prefix where FreeType is installed (optional)
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L