basic fmt program using fmtc - tttml - converters for a simpler syntax than markdown
(HTM) git clone git://bitreich.org/tttml git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/tttml
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
---
(DIR) commit dfd29d4237158b9699334bbab6d22e4285e4a8a4
(DIR) parent b9898661168d039dc96cb69c093089fde465cbbe
(HTM) Author: Josuah Demangeon <mail@josuah.net>
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(-)
---
(DIR) diff --git a/a.out b/a.out
Binary files differ.
(DIR) diff --git a/a.out.core b/a.out.core
Binary files differ.
(DIR) diff --git a/t b/t
@@ -0,0 +1,69 @@
+ TTTML(5) File Formats Manual TTTML(5)
+ 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. Note
+ 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 <mail@josuah.net> 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 have
+ 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 The
+ 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 <mail@josuah.net> OpenBSD 6.3 April 19,
+ 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 `/' and
+ 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 <mail@josuah.net> OpenBSD 6.3 April 19, 2018
+ OpenBSD 6.3
+\ No newline at end of file
(DIR) 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 mail@josuah.net
-.
-.
-.\" .Sh CAVEATS
-.\" .Sh BUGS
(DIR) 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 = 0, first = 1;
+ 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);
+}