diff options
author | Nickolay V. Shmyrev <nshmyrev@yandex.ru> | 2007-01-08 12:25:31 (GMT) |
---|---|---|
committer | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2007-01-08 12:25:31 (GMT) |
commit | 13a06349251874bd35d2f03c3fc93217cee749a2 (patch) | |
tree | a681279b008acb19f686ee265aaed2be0da8d9e8 /backend/dvi/mdvi-lib/vf.c | |
parent | afb550ab779e00918d8fe24742abee3a81ebfe93 (diff) |
Reorganize source tree.
2007-01-08 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
* Makefile.am:
* backend/Makefile.am:
* backend/comics/Makefile.am:
* backend/djvu/Makefile.am:
* backend/dvi/Makefile.am:
* backend/ev-async-renderer.c:
* backend/ev-async-renderer.h:
* backend/ev-attachment.c:
* backend/ev-attachment.h:
* backend/ev-backend-marshal.c:
* backend/ev-document-factory.c:
* backend/ev-document-factory.h:
* backend/ev-document-find.c:
* backend/ev-document-find.h:
* backend/ev-document-fonts.c:
* backend/ev-document-fonts.h:
* backend/ev-document-images.c:
* backend/ev-document-images.h:
* backend/ev-document-info.h:
* backend/ev-document-links.c:
* backend/ev-document-links.h:
* backend/ev-document-misc.c:
* backend/ev-document-misc.h:
* backend/ev-document-security.c:
* backend/ev-document-security.h:
* backend/ev-document-thumbnails.c:
* backend/ev-document-thumbnails.h:
* backend/ev-document-transition.c:
* backend/ev-document-transition.h:
* backend/ev-document.c:
* backend/ev-document.h:
* backend/ev-file-exporter.c:
* backend/ev-file-exporter.h:
* backend/ev-image.c:
* backend/ev-image.h:
* backend/ev-link-action.c:
* backend/ev-link-action.h:
* backend/ev-link-dest.c:
* backend/ev-link-dest.h:
* backend/ev-link.c:
* backend/ev-link.h:
* backend/ev-render-context.c:
* backend/ev-render-context.h:
* backend/ev-selection.c:
* backend/ev-selection.h:
* backend/impress/Makefile.am:
* backend/pdf/Makefile.am:
* backend/pixbuf/Makefile.am:
* backend/ps/Makefile.am:
* backend/ps/ps-document.c: (push_pixbuf), (interpreter_failed),
(ps_document_widget_event), (setup_pixmap), (setup_page), (input),
(start_interpreter), (stop_interpreter), (document_load),
(ps_document_next_page), (render_page):
* backend/tiff/Makefile.am:
* comics/Makefile.am:
* comics/comics-document.c:
* comics/comics-document.h:
* configure.ac:
* cut-n-paste/zoom-control/ephy-zoom-control.c:
* djvu/Makefile.am:
* djvu/djvu-document-private.h:
* djvu/djvu-document.c:
* djvu/djvu-document.h:
* djvu/djvu-links.c:
* djvu/djvu-links.h:
* djvu/djvu-text-page.c:
* djvu/djvu-text-page.h:
* djvu/djvu-text.c:
* djvu/djvu-text.h:
* dvi/Makefile.am:
* dvi/dvi-document.c:
* dvi/dvi-document.h:
* dvi/fonts.c:
* dvi/fonts.h:
* dvi/mdvi-lib/Makefile.am:
* dvi/mdvi-lib/afmparse.c:
* dvi/mdvi-lib/afmparse.h:
* dvi/mdvi-lib/bitmap.c:
* dvi/mdvi-lib/bitmap.h:
* dvi/mdvi-lib/color.c:
* dvi/mdvi-lib/color.h:
* dvi/mdvi-lib/common.c:
* dvi/mdvi-lib/common.h:
* dvi/mdvi-lib/defaults.h:
* dvi/mdvi-lib/dvimisc.c:
* dvi/mdvi-lib/dviopcodes.h:
* dvi/mdvi-lib/dviread.c:
* dvi/mdvi-lib/files.c:
* dvi/mdvi-lib/font.c:
* dvi/mdvi-lib/fontmap.c:
* dvi/mdvi-lib/fontmap.h:
* dvi/mdvi-lib/fontsrch.c:
* dvi/mdvi-lib/gf.c:
* dvi/mdvi-lib/hash.c:
* dvi/mdvi-lib/hash.h:
* dvi/mdvi-lib/list.c:
* dvi/mdvi-lib/mdvi.h:
* dvi/mdvi-lib/pagesel.c:
* dvi/mdvi-lib/paper.c:
* dvi/mdvi-lib/paper.h:
* dvi/mdvi-lib/pk.c:
* dvi/mdvi-lib/private.h:
* dvi/mdvi-lib/setup.c:
* dvi/mdvi-lib/sp-epsf.c:
* dvi/mdvi-lib/special.c:
* dvi/mdvi-lib/sysdeps.h:
* dvi/mdvi-lib/t1.c:
* dvi/mdvi-lib/tfm.c:
* dvi/mdvi-lib/tfmfile.c:
* dvi/mdvi-lib/tt.c:
* dvi/mdvi-lib/util.c:
* dvi/mdvi-lib/vf.c:
* dvi/pixbuf-device.c:
* dvi/pixbuf-device.h:
* impress/Makefile.am:
* impress/common.h:
* impress/document.c:
* impress/f_oasis.c:
* impress/f_oo13.c:
* impress/iksemel.c:
* impress/iksemel.h:
* impress/imposter.h:
* impress/impress-document.c:
* impress/impress-document.h:
* impress/internal.h:
* impress/r_back.c:
* impress/r_draw.c:
* impress/r_geometry.c:
* impress/r_gradient.c:
* impress/r_style.c:
* impress/r_text.c:
* impress/render.c:
* impress/render.h:
* impress/zip.c:
* impress/zip.h:
* lib/Makefile.am:
* lib/ev-debug.c:
* lib/ev-debug.h:
* lib/ev-file-helpers.c:
* lib/ev-file-helpers.h:
* lib/ev-gui.c:
* lib/ev-gui.h:
* lib/ev-tooltip.c:
* lib/ev-tooltip.h:
* libdocument/Makefile.am:
* libdocument/ev-file-helpers.c:
* pdf/Makefile.am:
* pdf/ev-poppler.cc:
* pdf/ev-poppler.h:
* pixbuf/Makefile.am:
* pixbuf/pixbuf-document.c:
* pixbuf/pixbuf-document.h:
* properties/Makefile.am:
* ps/Makefile.am:
* ps/gsdefaults.c:
* ps/gsdefaults.h:
* ps/gsio.c:
* ps/gsio.h:
* ps/gstypes.h:
* ps/ps-document.c:
* ps/ps-document.h:
* ps/ps.c:
* ps/ps.h:
* shell/Makefile.am:
* shell/ev-application.h:
* shell/ev-sidebar-links.c:
* shell/ev-sidebar-links.h:
* shell/ev-utils.c: (ev_gui_sanitise_popup_position),
(ev_gui_menu_position_tree_selection):
* shell/ev-utils.h:
* shell/ev-view.c: (ev_view_finalize):
* shell/ev-window.c:
* shell/main.c: (main):
* thumbnailer/Makefile.am:
* tiff/Makefile.am:
* tiff/tiff-document.c:
* tiff/tiff-document.h:
* tiff/tiff2ps.c:
* tiff/tiff2ps.h:
Reorganize source tree.
svn path=/trunk/; revision=2197
Diffstat (limited to 'backend/dvi/mdvi-lib/vf.c')
-rw-r--r-- | backend/dvi/mdvi-lib/vf.c | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/backend/dvi/mdvi-lib/vf.c b/backend/dvi/mdvi-lib/vf.c new file mode 100644 index 0000000..e1397fd --- /dev/null +++ b/backend/dvi/mdvi-lib/vf.c @@ -0,0 +1,240 @@ +/* vf.c -- VF font support */ +/* + * Copyright (C) 2000, Matias Atria + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <string.h> + +#include "mdvi.h" +#include "private.h" + +static int vf_load_font __PROTO((DviParams *, DviFont *)); +static void vf_free_macros __PROTO((DviFont *)); + +/* only symbol exported by this file */ +DviFontInfo vf_font_info = { + "VF", + 1, /* virtual fonts scale just fine */ + vf_load_font, + NULL, /* get_glyph */ + NULL, /* shrink0 */ + NULL, /* shrink1 */ + vf_free_macros, + NULL, /* reset */ + NULL, /* lookup */ + kpse_vf_format, + NULL +}; + +DviFontInfo ovf_font_info = { + "OVF", + 1, /* virtual fonts scale just fine */ + vf_load_font, + NULL, /* get_glyph */ + NULL, /* shrink0 */ + NULL, /* shrink1 */ + vf_free_macros, + NULL, /* reset */ + NULL, /* lookup */ + kpse_ovf_format, + NULL +}; + +static int vf_load_font(DviParams *params, DviFont *font) +{ + FILE *p; + Uchar *macros; + int msize; + int mlen; + Int32 checksum; + long alpha, beta, z; + int op; + int i; + int nchars; + int loc, hic; + DviFontRef *last; + + macros = NULL; + msize = mlen = 0; + p = font->in; + + if(fuget1(p) != 247 || fuget1(p) != 202) + goto badvf; + mlen = fuget1(p); + fseek(p, (long)mlen, SEEK_CUR); + checksum = fuget4(p); + if(checksum && font->checksum && checksum != font->checksum) { + warning(_("%s: Checksum mismatch (expected %u, got %u)\n"), + font->fontname, font->checksum, checksum); + } else if(!font->checksum) + font->checksum = checksum; + font->design = fuget4(p); + + /* read all the fonts in the preamble */ + last = NULL; + + /* initialize alpha, beta and z for TFM width computation */ + TFMPREPARE(font->scale, z, alpha, beta); + + op = fuget1(p); + while(op >= DVI_FNT_DEF1 && op <= DVI_FNT_DEF4) { + DviFontRef *ref; + Int32 scale, design; + Uint32 checksum; + int id; + int n; + int hdpi; + int vdpi; + char *name; + + /* process fnt_def commands */ + + id = fugetn(p, op - DVI_FNT_DEF1 + 1); + checksum = fuget4(p); + scale = fuget4(p); + design = fuget4(p); + + /* scale this font according to our parent's scale */ + scale = TFMSCALE(scale, z, alpha, beta); + design = FROUND(params->tfm_conv * design); + + /* compute the resolution */ + hdpi = FROUND(params->mag * params->dpi * scale / design); + vdpi = FROUND(params->mag * params->vdpi * scale / design); + n = fuget1(p) + fuget1(p); + name = mdvi_malloc(n + 1); + fread(name, 1, n, p); + name[n] = 0; + DEBUG((DBG_FONTS, "(vf) %s: defined font `%s' at %.1fpt (%dx%d dpi)\n", + font->fontname, name, + (double)scale / (params->tfm_conv * 0x100000), hdpi, vdpi)); + + /* get the font */ + ref = font_reference(params, id, name, checksum, hdpi, vdpi, scale); + if(ref == NULL) { + error(_("(vf) %s: could not load font `%s'\n"), + font->fontname, name); + goto error; + } + mdvi_free(name); + if(last == NULL) + font->subfonts = last = ref; + else + last->next = ref; + ref->next = NULL; + op = fuget1(p); + } + + if(op >= DVI_FNT_DEF1 && op <= DVI_FNT_DEF4) + goto error; + + /* This function correctly reads both .vf and .ovf files */ + + font->chars = xnalloc(DviFontChar, 256); + for(i = 0; i < 256; i++) + font->chars[i].offset = 0; + nchars = 256; + loc = -1; hic = -1; + /* now read the characters themselves */ + while(op <= 242) { + int pl; + Int32 cc; + Int32 tfm; + + if(op == 242) { + pl = fuget4(p); + cc = fuget4(p); + tfm = fuget4(p); + } else { + pl = op; + cc = fuget1(p); + tfm = fuget3(p); + } + if(loc < 0 || cc < loc) + loc = cc; + if(hic < 0 || cc > hic) + hic = cc; + if(cc >= nchars) { + font->chars = xresize(font->chars, + DviFontChar, cc + 16); + for(i = nchars; i < cc + 16; i++) + font->chars[i].offset = 0; + nchars = cc + 16; + } + if(font->chars[cc].offset) { + error(_("(vf) %s: character %d redefined\n"), + font->fontname, cc); + goto error; + } + + DEBUG((DBG_GLYPHS, "(vf) %s: defined character %d (macro length %d)\n", + font->fontname, cc, pl)); + font->chars[cc].width = pl + 1; + font->chars[cc].code = cc; + font->chars[cc].tfmwidth = TFMSCALE(tfm, z, alpha, beta); + font->chars[cc].offset = mlen; + font->chars[cc].loaded = 1; + if(mlen + pl + 1 > msize) { + msize = mlen + pl + 256; + macros = xresize(macros, Uchar, msize); + } + if(pl && fread(macros + mlen, 1, pl, p) != pl) + break; + macros[mlen+pl] = DVI_EOP; + mlen += pl + 1; + op = fuget1(p); + } + if(op != 248) { + error(_("(vf) %s: no postamble\n"), font->fontname); + goto error; + } + + /* make macro memory just big enough */ + if(msize > mlen) { + macros = xresize(macros, Uchar, mlen); + msize = mlen; + } + + DEBUG((DBG_FONTS|DBG_GLYPHS, + "(vf) %s: macros use %d bytes\n", font->fontname, msize)); + + if(loc > 0 || hic < nchars-1) { + memmove(font->chars, font->chars + loc, + (hic - loc + 1) * sizeof(DviFontChar)); + font->chars = xresize(font->chars, + DviFontChar, hic - loc + 1); + } + font->loc = loc; + font->hic = hic; + font->private = macros; + + return 0; + +badvf: + error(_("%s: File corrupted, or not a VF file.\n"), font->fontname); +error: + if(font->chars) + mdvi_free(font->chars); + if(macros) + mdvi_free(macros); + return -1; +} + +static void vf_free_macros(DviFont *font) +{ + mdvi_free(font->private); +} |