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