home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume8 / dca2troff / do_accent.c < prev    next >
C/C++ Source or Header  |  1987-02-18  |  2KB  |  80 lines

  1. /* do an accented char */
  2.  
  3. /* input is a string with the accent to print then a space then the  */
  4. /*    character to accent */
  5.  
  6. #include "dca2troff.h"
  7. #include <ctype.h>
  8.  
  9. struct acc {
  10.     char *generic;
  11.     char *output;
  12. } lacc[] = {        /* lower case accents */
  13.     "`",    "\\(ga",        /* grave */
  14.     "'",    "\\(aa",        /* acute */
  15.     "^",    "^",            /* circumflex */
  16.     "~",    "~",            /* tilde */
  17.     "..",    "\\(..",        /* diaresis */
  18.     "de",    "\\(de",        /* angstrom */
  19.     "cd",    "\\(cd",        /* cedilla */
  20.     "",    ""
  21. };
  22. struct acc uacc[] = {    /* upper case accents */
  23.     "`",    "\\f(Sr\\(ga\\fP",    /* grave */
  24.     "'",    "\\f(Sr\\(aa\\fP",    /* acute */
  25.     "^",    "\\f(Sr^\\fP",        /* circumflex */
  26.     "~",    "\\f(Sr~\\fP",        /* tilde */
  27.     "..",    "\\f(Sr\\(..\\fP",    /* diaresis */
  28.     "de",    "\\f(Sr\\(de\\fP",    /* angstrom */
  29.     "cd",    "\\(cd",        /* cedilla */
  30.     "",    ""
  31. };
  32. #include "dca2troff.h"
  33. do_accent(str)
  34. char *str;
  35. {
  36.     char accent[10];
  37.     char character;
  38.     int i;
  39.  
  40.     sscanf(str, "%s %c", accent, &character);
  41.  
  42.     if ( islower(character) )    /* lower case character no problem */
  43.         {
  44.         i = checkacc(lacc, accent);
  45.         if ( i == -1 )
  46.             {
  47.             fprintf(stderr, "unknown accent %s\n", accent);
  48.             return(0);
  49.             }
  50.         sprintf(tline, "\\o'%s%c'", lacc[i], character);
  51.         }
  52.     else
  53.         {
  54.         i = checkacc(uacc, accent);
  55.         if ( i == -1 )
  56.             {
  57.             fprintf(stderr, "unknown accent %s\n", accent);
  58.             return(0);
  59.             }
  60.         sprintf(tline, "\\u\\z%s\\d%c", uacc[i], character);
  61.         }
  62.     outstr(tline);
  63. }
  64.  
  65. /* search for accent string in struct */
  66. /* return index if ok, else -1 */
  67. checkacc(str, s)
  68. char *str[];
  69. char *s;
  70. {
  71.     int i;
  72.     for(i=0;;i++)
  73.         {
  74.         if((strcmp(str[i], "\0") == 0 ))
  75.             return(-1);
  76.         if((strcmp(str[i], s) == 0 ))
  77.             return(i);
  78.         }
  79. }
  80.