src/vflmkvf.c

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. main
  2. gen_class_deafult

   1 /* 
   2  * vflmkvf.c 
   3  * - a vflibcap entry generator for TeX VF files
   4  *
   5  * - This program prints vflibcap entries to standard output.
   6  *
   7  * - Useful for generating vflibcap for TeX DVI drivers
   8  *
   9  *
  10  * by Hirotsugu Kakugawa
  11  *
  12  *  10 May 2001
  13  */
  14 /*
  15  * Copyright (C) 2001  Hirotsugu Kakugawa. 
  16  * All rights reserved.
  17  *
  18  * This program is free software; you can redistribute it and/or modify
  19  * it under the terms of the GNU General Public License as published by
  20  * the Free Software Foundation; either version 2, or (at your option)
  21  * any later version.
  22  * 
  23  * This program is distributed in the hope that it will be useful,
  24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  26  * GNU General Public License for more details.
  27  * 
  28  * You should have received a copy of the GNU General Public License
  29  * along with this program; if not, write to the Free Software
  30  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
  31  */
  32 
  33 
  34 #include "config.h"
  35 #include "with.h"
  36 #include <stdio.h>
  37 #include <stdlib.h>
  38 #include <ctype.h>
  39 #include <unistd.h>
  40 #include <sys/param.h>
  41 #include <sys/time.h>
  42 
  43 #include  "VFlib-3_6.h"
  44 #include  "VFsys.h"
  45 #include  "vflibcap.h"
  46 #include  "texfonts.h"
  47 #include  "vf.h"
  48 #include  "fsearch.h"
  49 #include  "vflmklib.h"
  50 
  51 
  52 
  53 void  gen_class_deafult(void);
  54 
  55 
  56 char  *mode  = DEFAULT_KPS_MODE;
  57 char  *dpi   = NULL;
  58 int    dpi_i = DEFAULT_KPS_DPI;
  59 
  60 #define NDIRS    64
  61 int   n_vff; 
  62 char  *vf_fontdirs[NDIRS];
  63 
  64 #define NMAPS    64
  65 int n_map;
  66 char  *map_class[NMAPS];
  67 char  *map_map[NMAPS];
  68 char  *map_opt[NMAPS];
  69 
  70 char *cmdline = NULL; 
  71 char *glyph_style = TEX_GLYPH_STYLE_FILL_STR;
  72 char *open_style  = TEX_OPEN_STYLE_TRY_STR;
  73 
  74 
  75 
  76 int 
  77 main(int argc, char **argv)
     /* [<][>][^][v][top][bottom][index][help] */
  78 {
  79   int     i;
  80   int    xargc;
  81   char **xargv;
  82 
  83   dpi = malloc(256);
  84   sprintf(dpi, "%d", dpi_i);
  85 
  86   cmdline = copy_cmdline(argc, argv);
  87 
  88   n_vff = 0;
  89   for (i = 0; i < NDIRS; i++){
  90     vf_fontdirs[i] = NULL;
  91   }
  92 
  93   n_map = 0;
  94   for (i = 0; i < NMAPS; i++){
  95     map_class[i] = NULL;
  96     map_map[i] = NULL;
  97     map_opt[i] = NULL;
  98   }
  99 
 100   xargc = argc; 
 101   xargv = argv;
 102 
 103   for (xargc--,xargv++; xargc > 0; xargc--,xargv++){
 104     if ((strcmp(*xargv, "--help") == 0)
 105         || (strcmp(*xargv, "-help") == 0)){
 106       printf("vflmkvf: generates vflibcap entries for TeX Virtual Fonts\n");
 107       printf("Usage: vflmkvf [options]\n");
 108       printf("Options\n");
 109       printf("  -d DIR   : Virtual Font file directory\n");
 110       printf("  -r DPI   : Default device resolution\n");
 111       printf("  -n MODE  : Device mode name for kpathsea\n");
 112       printf("  -g STYLE : Glyph style, 'fill' (default) or 'empty'\n");
 113       printf("  -o STYLE : Font open style, 'try', 'require', or 'non'\n");
 114       printf("  -m CLASS FORMAT : Add mapping rule\n");
 115       printf("Example: vflmkvf -d TEXMF -m type1 %%f.pfb -m gf .gf -g fill\n");
 116       exit(0);
 117 
 118     } else if (strcmp(*xargv, "-d") == 0){
 119       /* font dir */
 120       if (n_vff == NDIRS){
 121         fprintf(stderr, "Too many Virtual Font directories\n");
 122         exit(1);
 123       }
 124       xargv++; xargc--;
 125       check_argc(xargc);
 126       vf_fontdirs[n_vff++] = x_strdup(*xargv);
 127 
 128     } else if (strcmp(*xargv, "-r") == 0){
 129       xargv++; xargc--;
 130       check_argc(xargc);
 131       dpi = strdup(*xargv);
 132 
 133     } else if (strcmp(*xargv, "-n") == 0){
 134       /* mode */
 135       xargv++; xargc--;
 136       check_argc(xargc);
 137       mode = x_strdup(*xargv);
 138 
 139     } else if (strcmp(*xargv, "-m") == 0){
 140       if (n_map == NMAPS){
 141         fprintf(stderr, "Too many mapfont conversion rules\n");
 142         exit(1);
 143       }
 144       xargv++; xargc--;
 145       check_argc(xargc);
 146       if (strcmp(*xargv, "any") == 0)
 147         map_class[n_map] = strdup("*");
 148       else
 149         map_class[n_map] = strdup(*xargv);
 150       xargv++; xargc--;
 151       check_argc(xargc);
 152       map_map[n_map] = strdup(*xargv);
 153       n_map++;
 154 
 155     } else if (strcmp(*xargv, "-g") == 0){
 156       xargv++; xargc--;
 157       check_argc(xargc);
 158       if ((strcmp(*xargv, TEX_GLYPH_STYLE_FILL_STR) != 0)
 159           && (strcmp(*xargv, TEX_GLYPH_STYLE_EMPTY_STR) != 0)){
 160         fprintf(stderr, "Unknown glyph style name: %s\n", *xargv);
 161         fprintf(stderr, "(Must be '%s' or '%s'. Default is '%s'.\n", 
 162                 TEX_GLYPH_STYLE_FILL_STR, TEX_GLYPH_STYLE_EMPTY_STR,
 163                 glyph_style);
 164         exit(1);
 165       }
 166       glyph_style = strdup(*xargv);
 167 
 168     } else if (strcmp(*xargv, "-o") == 0){
 169       xargv++; xargc--;
 170       check_argc(xargc);
 171       if ((strcmp(*xargv, TEX_OPEN_STYLE_TRY_STR) != 0)
 172           && (strcmp(*xargv, TEX_OPEN_STYLE_REQUIRE_STR) != 0)
 173           && (strcmp(*xargv, TEX_OPEN_STYLE_NONE_STR) != 0)){
 174         fprintf(stderr, "Unknown open style name: %s\n", *xargv);
 175         fprintf(stderr, "(Must be '%s', '%s' or '%s'. Default is '%s'.\n", 
 176                 TEX_OPEN_STYLE_TRY_STR,
 177                 TEX_OPEN_STYLE_REQUIRE_STR,
 178                 TEX_OPEN_STYLE_NONE_STR,
 179                 open_style);
 180         exit(1);
 181       }
 182       open_style = strdup(*xargv);
 183 
 184     } else {
 185       if (*xargv[0] == '-'){
 186         fprintf(stderr, "vflmkvf: unknown option %s\n", *xargv);
 187         exit(1);
 188       }
 189       break;
 190 
 191     }
 192   }
 193 
 194   banner("Virtual Font", "vflmkvf", cmdline);
 195 
 196   gen_class_deafult();    
 197 
 198   return 0;
 199 }
 200 
 201 
 202 
 203 void
 204 gen_class_deafult(void)
     /* [<][>][^][v][top][bottom][index][help] */
 205 {
 206   int   i;
 207 
 208   printf("(%s %s", 
 209          VF_CAPE_VFLIBCAP_CLASS_DEFAULT_DEFINITION, FONTCLASS_NAME_VF);
 210   printf("\n  (%s", VF_CAPE_FONT_DIRECTORIES);
 211   for (i = 0; i < n_vff; i++)
 212     printf("\n       \"%s\"", vf_fontdirs[i]);
 213   printf(")");
 214   printf("\n  (%s %s)", VF_CAPE_DPI, dpi);
 215   printf("\n  (%s \".vf\" \".ovf\")", VF_CAPE_EXTENSIONS);
 216   printf("\n  (%s \"%s\")", VF_CAPE_TEX_OPEN_STYLE, open_style);
 217   printf("\n  (%s \"%s\")", VF_CAPE_TEX_GLYPH_STYLE, glyph_style);
 218   printf("\n  (%s", VF_CAPE_TEX_FONT_MAPPING);
 219   for (i = 0; i < n_map; i++){
 220     if (map_need_tfm(map_class[i]) == 0){
 221       printf("\n    ((%s \"%s\") *)", 
 222              map_class[i], map_map[i]);
 223     } else {
 224       printf("\n    ((%s \"%s\" %s) *)", 
 225              map_class[i], map_map[i], TEX_FONT_MAPPING_PTSIZE);
 226     }
 227   }
 228   printf(")");
 229   printf(")\n");
 230   printf("\n");
 231 }
 232 

/* [<][>][^][v][top][bottom][index][help] */