ascii-jtex/eKanji/mksample.c

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

FUNCTIONS

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

   1 /*
   2  *  mksample.c
   3  *    Make list of all characters of eKanji font in LaTeX form.
   4  *  
   5  *
   6  *  How to use this program:
   7  *
   8  *  1. Compile this program.
   9  *         % gcc -o mksample mksample.c
  10  *  2. Run this program to generate (huge) LaTeX input file.
  11  *         % ./mksample  > sample.tex
  12  *  3. Run pLaTeX to generate DVI file.
  13  *         % platex sample.tex
  14  *  4. View/Print it. For example, 
  15  *         % xgdvi sample.dvi 
  16  *
  17  */
  18  
  19 #include <stdio.h>
  20 
  21 #define MINCHAR        1
  22 #define NCHLINE       20
  23 #define SIZECMD  "normalsize"
  24 
  25 
  26 int    font_type;
  27 int    ku_from, ku_to, nchline, title;
  28 long   maxchar;
  29 char  *sizecmd;
  30 int    mtype;
  31 
  32 struct s_fontinfo {
  33   char  *fontfile;
  34   char  *cmd;
  35   long   maxchar;
  36 };
  37 
  38 #define TYPE_UNICODE    0
  39 #define TYPE_KANGXI     1
  40 #define TYPE_MOROHASHI  2
  41 struct s_fontinfo  fontinfo[] =  
  42 {
  43   { "ekan0010.d24", "EKU",  22999 },
  44   { "ekan0020.d24", "EKK",  49188 },
  45   { "ekan0030.d24", "EKM",  50476 },
  46   {  NULL,           NULL,     -1 },
  47 };
  48 
  49 
  50 
  51 
  52 void
  53 parse_args(int argc, char **argv)
     /* [<][>][^][v][top][bottom][index][help] */
  54 {
  55 
  56   mtype = TYPE_UNICODE;
  57   maxchar = fontinfo[mtype].maxchar;
  58   ku_from = 0;
  59   ku_to   = maxchar/100;
  60 
  61   argc--; argv++;
  62   while (argc > 0){
  63     if (strcmp(*argv, "-f") == 0){
  64       argc--; argv++;
  65       ku_from = atoi(*argv);      
  66     } else if (strcmp(*argv, "-t") == 0){
  67       argc--; argv++;
  68       ku_to = atoi(*argv);      
  69     } else if (strcmp(*argv, "-n") == 0){
  70       argc--; argv++;
  71       if ((nchline = atoi(*argv)) < 1){
  72         fprintf(stderr, "-n option: value must be positive.\n");
  73       }
  74     } else if (strcmp(*argv, "-s") == 0){
  75       argc--; argv++;
  76       sizecmd = *argv;
  77     } else if (strcmp(*argv, "-u") == 0){
  78       mtype = TYPE_UNICODE;
  79       maxchar = fontinfo[mtype].maxchar;
  80       ku_to   = maxchar/100;
  81     } else if (strcmp(*argv, "-k") == 0){
  82       mtype = TYPE_KANGXI;
  83       maxchar = fontinfo[mtype].maxchar;
  84       ku_to   = maxchar/100;
  85     } else if (strcmp(*argv, "-m") == 0){
  86       mtype = TYPE_MOROHASHI;
  87       maxchar = fontinfo[mtype].maxchar;
  88       ku_to   = maxchar/100;
  89     } else if ((strcmp(*argv, "-h") == 0)
  90                || (strcmp(*argv, "-help") == 0)
  91                || (strcmp(*argv, "--help") == 0)){
  92       fprintf(stderr, 
  93               "Usage: mksample  [-u -k -m]"
  94               "[-f FROM_CODE] [-t TO_CODE] [-n LINE_NCHARS] [-s SIZE_CMD]\n");
  95       fprintf(stderr, "  LINE_NCHARS = %d\n", NCHLINE);
  96       fprintf(stderr, "  SIZE_CMD = %s\n", SIZECMD);
  97       exit(0);
  98     }
  99     argc--; argv++;
 100   }
 101 }
 102 
 103 
 104 int
 105 main(int argc, char **argv)
     /* [<][>][^][v][top][bottom][index][help] */
 106 {
 107   int  ku, ten, i;
 108   
 109   title   = 0;
 110   nchline = NCHLINE;
 111   sizecmd = SIZECMD;
 112 
 113   parse_args(argc, argv);
 114 
 115   printf("\\documentclass[a4paper]{jarticle}\n");
 116   printf("\\setlength{\\topmargin}{-25mm}\n");
 117   printf("\\setlength{\\evensidemargin}{-10mm}\n");
 118   printf("\\setlength{\\oddsidemargin}{-10mm}\n");
 119   printf("\\setlength{\\textwidth}{180mm}\n");
 120   printf("\\setlength{\\textheight}{263mm}\n");
 121   printf("\\usepackage{ekanji}\n");
 122   printf("\\usepackage{array}\n");
 123   printf("\\renewcommand{\\arraystretch}{0.9}\n");
 124   printf("\\def\\CH#1{#1}\n");
 125   printf("\\begin{document}\n");
 126   if (title == 0){
 127     printf("\\begin{center}\n");
 128     printf("\\textsf{\\textbf{\\LARGE e漢字\\ %s \\ 文字一覧}}\\\\\n",
 129            fontinfo[mtype].fontfile);
 130     printf("\\vskip 1em\n");
 131     printf("{\\LARGE \\verb|\\|\\texttt{%s}\\verb|{|\\textit{num}\\verb|}|}\n",
 132            fontinfo[mtype].cmd);
 133     printf("\\end{center}\n");
 134     printf("\\vskip 3em\n");
 135   }
 136   printf("\\%s\n", sizecmd);
 137 
 138 
 139   for (ku = ku_from; ku <= ku_to; ku++){
 140 
 141     printf("\\vskip 1.2em\n");
 142     printf("\\vbox{\n");
 143     printf("\\noindent\\textsf{\\textbf{%06d}}\\par\n", ku*100 + 1);
 144     printf("\\begin{center}");
 145     printf("\\begin{tabular}{|r|");
 146     for (i = 0; i < nchline; i++)
 147       printf("c");
 148     printf("|}\n");
 149     printf("\\hline\n");
 150     printf(" \n");
 151     for (i = 0; i < nchline; i++)
 152       printf("&\\texttt{%02d}", i+1);
 153     printf("\\\\\n");
 154     printf("\\hline\n");
 155     for (ten = 1; ten <= 100; ten++){
 156       if ((ten % nchline) == 1){
 157         if (ten > 1)
 158           printf("\\\\\n");
 159         printf("\\texttt{%06d}\n", ku*100 + ten);
 160       }
 161       printf(" &\\CH{\\%s{%d}}\n", fontinfo[mtype].cmd, ku*100 + ten);
 162     }
 163     while ((ten % nchline) != 1){
 164       printf(" &\n");
 165       ten++;
 166     }
 167     printf("\\\\\n");
 168     printf("\\hline\n");
 169     printf("\\end{tabular}\n");
 170     printf("\\end{center}");
 171     printf("}\n");
 172     printf("\n");
 173   }
 174 
 175   printf("\\end{document}\n");
 176   
 177   return 0;
 178 }

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