basic fmt program using fmtc - tttml - converters for a simpler syntax than mar… | |
git clone git://bitreich.org/tttml git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
--- | |
commit dfd29d4237158b9699334bbab6d22e4285e4a8a4 | |
parent b9898661168d039dc96cb69c093089fde465cbbe | |
Author: Josuah Demangeon <[email protected]> | |
Date: Thu, 31 May 2018 23:36:36 +0200 | |
basic fmt program using fmtc | |
Diffstat: | |
A a.out | 0 | |
A a.out.core | 0 | |
A t | 70 +++++++++++++++++++++++++++++… | |
M tttml-gopher.1 | 27 +++++++++++++++++++-------- | |
A tttml.c | 73 +++++++++++++++++++++++++++++… | |
5 files changed, 162 insertions(+), 8 deletions(-) | |
--- | |
diff --git a/a.out b/a.out | |
Binary files differ. | |
diff --git a/a.out.core b/a.out.core | |
Binary files differ. | |
diff --git a/t b/t | |
@@ -0,0 +1,69 @@ | |
+ TTTML(5) File Formats Manual TTTML… | |
+ NAME tttml - simpler markup syntax than markdown SYNOPSIS file.md | |
+ DESCRIPTION The tttml format is a very simple format for writiing text | |
+ that look good enough to be published without conversion. It lacks the | |
+ markdown recursive syntax (such as recursive lists anb quotes) which | |
+ also remove markdown ambiguities. Each block of text is separated from | |
+ anotherone by an empty line. paragraph Any | |
+ non-special block of text: First paragraph of text. | |
+ Second paragraph of text. title Block that ends by a line with only | |
+ `=': Title can therefore have multiple lines if required | |
+ although it is not advised. | |
+ ====================================================== heading | |
+ Block that ends with a line with only `-': Heading can also | |
+ have multiple lines | |
+ ------------------------------------------------------ subheading | |
+ Block with a single line with at least 3 leading `#' characters | |
+ starting at subheading and going down the outline (subheading, | |
+ subsubheading ...) every time an additionnal `#' is added: | |
+ ### Subheading #### Subsubheading ##### | |
+ Subsubsubheading tag Block that start with a tag line: | |
+ *tagline with asterisks and a column*: Body of the tag block | |
+ that can span over multiple lines like regular paragraphs. | |
+ list Block that start with a dash: - List item. The | |
+ following lines might not have leading space. | |
+ - Note that multi-paragraph lists are not handled quote Block that | |
+ has a leading `>' on every line: > Mail-style quoting. No… | |
+ that nested quotes > are not handled. literal | |
+ Block that has a leading tab on every line: Nothing | |
+ gets interpreted in these blocks. They get printed | |
+ as-is. They may contain extra tabs. | |
+ link Block that start with a label line and eventual subsequent | |
+ description lines: [label]: git://josuah.net/git/tttml | |
+ git repository for the tttml set of tools [label2]: | |
+ /url/without/description.txt SEE ALSO smu(1), simple markup - markdown | |
+ like syntax: https://github.com/Gottox/smu AUTHORS Josuah | |
+ Demangeon <[email protected]> OpenBSD 6.3 April 19, 2018 | |
+ OpenBSD 6.3 | |
+ ---------------------------------------------------------------------------… | |
+ TTTML-FMT(1) General Commands Manual | |
+ TTTML-FMT(1) NAME tttml-fmt - format/pretty-print a tttml file | |
+ SYNOPSIS tttml-fmt [file...] DESCRIPTION The tttml-fmt utility | |
+ reformat a tttml(5) and print valid format to stdout. Most | |
+ markdown documents can be converted to tttml(5) with if they do not ha… | |
+ recursive elents such as nested lists or nested quotes. o The | |
+ paragraphs are being filled to 80 columns, o The empty lines are | |
+ set as apropriate o The blocks merged together are separated, | |
+ such as lists without separating blank spaces. o T… | |
+ title and heading horizontal lines are expanded to 80 columns. | |
+ o The tags with the tagline merged with the paragraph are separated | |
+ on their own line. SEE ALSO tttml-gopher(1), smu(1), tttml(5), simple | |
+ tttml - markdown like syntax: https://github.com/Gottox/smu AUTHORS | |
+ Josuah Demangeon <[email protected]> OpenBSD 6.3 April 1… | |
+ 2018 OpenBSD 6.3 | |
+ ---------------------------------------------------------------------------… | |
+ TTTML-GOPHER(1) General Commands Manual | |
+ TTTML-GOPHER(1) NAME tttml-gopher - generate a gophermap from a tttml | |
+ file SYNOPSIS tttml-gopher host port [file...] DESCRIPTION The | |
+ tttml-gopher utility convert file to a gophermap format, simply by | |
+ converting all link entries, converting tabs into spaces and printing the | |
+ rest. host and port is used to set the host in links that do not have a | |
+ host, such as /path/to/file.txt o All URI starting with a `/' a… | |
+ ending with a `/' are printed using the `1' entry type o | |
+ All URI starting with a `/' and not ending with a `/' are printed | |
+ using the `0' o All URI starting with `0', `1', `7', `8', `9', | |
+ `a', `g', `h' or `I' followed by a `/' and all "gopher://" URI | |
+ are printed using the corresponding entry type. o | |
+ All other URI are printed using the `h' entry type AUTHORS Josuah | |
+ Demangeon <[email protected]> OpenBSD 6.3 April 19, 2018 | |
+ OpenBSD 6.3 | |
+\ No newline at end of file | |
diff --git a/tttml-gopher.1 b/tttml-gopher.1 | |
@@ -90,17 +90,28 @@ entry type | |
.\" For sections 1, 4, 6, 7, 8, and 9 printf/stderr messages only. | |
.\" .Sh ERRORS | |
.\" For sections 2, 3, 4, and 9 errno settings only. | |
-.\" .Sh SEE ALSO | |
-.\" .Xr foobar 1 | |
-.\" .Sh STANDARDS | |
-.\" .Sh HISTORY | |
+. | |
+. | |
+.Sh SEE ALSO | |
+. | |
+.Xr tttml-fmt 1 | |
+. | |
+.Sh STANDARDS | |
+. | |
+.Rs | |
+.%A Anklesari | |
+.%A McCahill | |
+.%A Lindner | |
+.%A Johnson | |
+.%A Torrey | |
+.%A Alberti | |
+.%D March 1993 | |
+.%T The Internet Gopher Protocol | |
+.%R RFC 1436 | |
+.Re | |
. | |
. | |
.Sh AUTHORS | |
. | |
.An Josuah Demangeon | |
.Aq Mt [email protected] | |
-. | |
-. | |
-.\" .Sh CAVEATS | |
-.\" .Sh BUGS | |
diff --git a/tttml.c b/tttml.c | |
@@ -0,0 +1,73 @@ | |
+#include <string.h> | |
+#include <stdio.h> | |
+#include <ctype.h> | |
+ | |
+#define WORD_MAX 1024 | |
+#define MIN(x, y) ((x) < (y) ? (x) : (y)) | |
+ | |
+/* | |
+ * Put the character c to stdout, and if the line is too long, insert | |
+ * a newline. If c == EOF, flush the last word out of fmtc's static | |
+ * buffer. | |
+ * | |
+ * It preserve the double space after a punctuation mark [.!?] if any. | |
+ */ | |
+int | |
+fmtc(char c, char *prefix, int max) | |
+{ | |
+ static int pos = 0, nspaces = 0, wlen = 0, was_space = 1, was_punct = … | |
+ static char word[WORD_MAX], *w = word; | |
+ | |
+ if (c != ' ' && c != '\n' && c != EOF) { | |
+ if (wlen + 1 < WORD_MAX) { | |
+ *w++ = c; | |
+ wlen++; | |
+ } | |
+ was_space = 0; | |
+ was_punct = !!strchr(".!?", c); | |
+ | |
+ } else { | |
+ if (!was_space) { | |
+ was_space = 1; | |
+ | |
+ if (pos + nspaces + wlen > max) { | |
+ pos = strlen(prefix); | |
+ fputc('\n', stdout); | |
+ fputs(prefix, stdout); | |
+ } else if (!first) { | |
+ pos += nspaces; | |
+ while (nspaces-- > 0) | |
+ fputc(' ', stdout); | |
+ } | |
+ | |
+ pos += wlen; | |
+ word[wlen] = '\0'; | |
+ fputs(word, stdout); | |
+ | |
+ w = word; | |
+ wlen = 0; | |
+ nspaces = 1; | |
+ } else { | |
+ nspaces = was_punct ? 2 : 1; | |
+ } | |
+ | |
+ if (c == EOF) | |
+ fputc('\n', stdout); | |
+ | |
+ first = 0; | |
+ } | |
+ | |
+ return c; | |
+} | |
+ | |
+int | |
+main(void) | |
+{ | |
+ int c; | |
+ char *prefix; | |
+ | |
+ prefix = " |"; | |
+ | |
+ fputs(prefix, stdout); | |
+ while (fmtc(fgetc(stdin), prefix, 80) != EOF); | |
+} |