URI: 
       tttml.c - tttml - converters for a simpler syntax than markdown
  HTML git clone git://bitreich.org/tttml git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/tttml
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
       ---
       tttml.c (1298B)
       ---
            1 #include <string.h>
            2 #include <stdio.h>
            3 #include <ctype.h>
            4 
            5 #define WORD_MAX        1024
            6 #define MIN(x, y)        ((x) < (y) ? (x) : (y))
            7 
            8 /*
            9  * Put the character c to stdout, and if the line is too long, insert
           10  * a newline.  If c == EOF, flush the last word out of fmtc's static
           11  * buffer.
           12  *
           13  * It preserve the double space after a punctuation mark [.!?] if any.
           14  */
           15 int
           16 fmtc(char c, char *prefix, int max)
           17 {
           18         static int pos = 0, nspaces = 0, wlen = 0, was_space = 1, was_punct = 0, first = 1;
           19         static char word[WORD_MAX], *w = word;
           20 
           21         if (c != ' ' && c != '\n' && c != EOF) {
           22                 if (wlen + 1 < WORD_MAX) {
           23                         *w++ = c;
           24                         wlen++;
           25                 }
           26                 was_space = 0;
           27                 was_punct = !!strchr(".!?", c);
           28 
           29         } else {
           30                 if (!was_space) {
           31                         was_space = 1;
           32 
           33                         if (pos + nspaces + wlen > max) {
           34                                 pos = strlen(prefix);
           35                                 fputc('\n', stdout);
           36                                 fputs(prefix, stdout);
           37                         } else if (!first) {
           38                                 pos += nspaces;
           39                                 while (nspaces-- > 0)
           40                                         fputc(' ', stdout);
           41                         }
           42 
           43                         pos += wlen;
           44                         word[wlen] = '\0';
           45                         fputs(word, stdout);
           46 
           47                         w = word;
           48                         wlen = 0;
           49                         nspaces = 1;
           50                 } else {
           51                         nspaces = was_punct ? 2 : 1;
           52                 }
           53 
           54                 if (c == EOF)
           55                         fputc('\n', stdout);
           56 
           57                 first = 0;
           58         }
           59 
           60         return c;
           61 }
           62 
           63 int
           64 main(void)
           65 {
           66         int c;
           67         char *prefix;
           68 
           69         prefix = "   |";
           70 
           71         fputs(prefix, stdout);
           72         while (fmtc(fgetc(stdin), prefix, 80) != EOF);
           73 }