update man pages and generate project frontpage - ics2txt - convert icalendar .ics file to plain text
 (HTM) git clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
       ---
 (DIR) commit cf5ca595cdbe8c8d7d3358e58a43452cc222d7c2
 (DIR) parent 24ae7d2759496b7907cce29f0c26697950453ff5
 (HTM) Author: Josuah Demangeon <me@josuah.net>
       Date:   Sun, 20 Jun 2021 19:50:06 +0200
       
       update man pages and generate project frontpage
       
       Diffstat:
         M .gitignore                          |       2 ++
         A .site/head.gph                      |       5 +++++
         A .site/head.html                     |      24 ++++++++++++++++++++++++
         A .site/style.css                     |      39 +++++++++++++++++++++++++++++++
         M Makefile                            |      11 ++++++++---
         R README -> README.md                 |       0 
         M ics2tsv.1                           |      10 +---------
         D ics2txt.1                           |     106 ------------------------------
         A tsv2agenda.1                        |      76 +++++++++++++++++++++++++++++++
         M tsv2agenda.c                        |       9 ++++++---
         A tsv2ics.1                           |      53 ++++++++++++++++++++++++++++++
       
       11 files changed, 214 insertions(+), 121 deletions(-)
       ---
 (DIR) diff --git a/.gitignore b/.gitignore
       @@ -4,3 +4,5 @@
        /tsv2ics
        /tsv2agenda
        /ics2txt-[0-9]*
       +/style.css
       +/index.*
 (DIR) diff --git a/.site/head.gph b/.site/head.gph
       @@ -0,0 +1,5 @@
       +ics2txt
       +────────────────────────────────────────────────────────────────────────────────
       +[9|release v0.1|/ics2txt/ics2txt-VERSION.tar.gz|server|port]
       +[h|git clone git://code.z0.is/ics2txt/|URL:git://code.z0.is/ics2txt/||]
       +[h|web version|URL:http://code.z0.is/ics2txt/||]
 (DIR) diff --git a/.site/head.html b/.site/head.html
       @@ -0,0 +1,24 @@
       +<!DOCTYPE html>
       +<title>ics2txt</title>
       +<meta charset="UTF-8"/>
       +<meta name="viewport" content="initial-scale=1.0">
       +
       +<style>
       +body { padding:5em 5ch; font-family:sans; max-width:550pt; margin:auto; line-height:1.4em; }
       +a { text-decoration:none; }
       +h1 { line-height: 3em; }
       +h2,h3,h4,h5,h6 { line-height:2em; }
       +pre,code { background: #f6f6f6; }
       +pre { padding:1em 2ch; line-height:1.1em; overflow:auto; }
       +blockquote { padding-left:1.4ch; margin-left:1ch; border-left:solid 1px grey; }
       +img { max-width:100%; }
       +</style>
       +
       +<header>
       +<a href="//josuah.net/">josuah.net</a>
       +<nav style="float:right;">
       +<a href="/ics2txt/ics2txt-VERSION.tar.gz">vVERSION</a> -
       +<a href="git://code.z0.is/ics2txt/">git</a> -
       +<a href="gopher://code.z0.is/1/ics2txt/">gopher</a>
       +</nav>
       +</header>
 (DIR) diff --git a/.site/style.css b/.site/style.css
       @@ -0,0 +1,39 @@
       +body {
       +        padding: 5em 5ch;
       +        font-family: sans;
       +        max-width: 550pt;
       +        margin: auto;
       +        line-height: 1.4em;
       +}
       +
       +a {
       +        text-decoration: none;
       +}
       +
       +h1 {
       +        line-height: 3em;
       +}
       +
       +h2,h3,h4,h5,h6 {
       +        line-height: 2em;
       +}
       +
       +pre, code {
       +        background: #f6f6f6;
       +}
       +
       +pre {
       +        padding: 1em 2ch;
       +        line-height: 1.1em;
       +        overflow: auto;
       +}
       +
       +blockquote {
       +        padding-left: 1.4ch;
       +        margin-left: 1ch;
       +        border-left: solid 1px grey;
       +}
       +
       +img {
       +        max-width: 100%;
       +}
 (DIR) diff --git a/Makefile b/Makefile
       @@ -12,7 +12,7 @@ HDR = ical.h base64.h util.h
        OBJ = ${SRC:.c=.o}
        AWK = tsv2ics.awk
        BIN = ics2tree ics2tsv tsv2agenda
       -MAN1 = ics2txt.1 ics2tsv.1
       +MAN1 = ics2tsv.1 tsv2ics.1 tsv2agenda.1
        
        all: ${BIN}
        
       @@ -28,7 +28,7 @@ ${BIN}: ${OBJ} ${BIN:=.o}
                ${CC} ${LDFLAGS} -o $@ $@.o ${OBJ}
        
        clean:
       -        rm -rf *.o ${BIN} ${AWK:.awk} ${NAME}-${VERSION} *.gz
       +        rm -rf *.o ${BIN} ${AWK:.awk=} ${NAME}-${VERSION} *.gz
        
        install: ${BIN} ${AWK:.awk=}
                mkdir -p ${DESTDIR}$(PREFIX)/bin
       @@ -38,8 +38,13 @@ install: ${BIN} ${AWK:.awk=}
        
        dist: clean
                mkdir -p ${NAME}-${VERSION}
       -        cp -r README Makefile ${AWK} ${MAN1} ${SRC} ${NAME}-${VERSION}
       +        cp -r README.md Makefile ${AWK} ${MAN1} ${SRC} ${NAME}-${VERSION}
                tar -cf - ${NAME}-${VERSION} | gzip -c >${NAME}-${VERSION}.tar.gz
        
       +site: dist
       +        notmarkdown README.md | notmarkdown-html | cat .site/head.html - >index.html
       +        notmarkdown README.md | notmarkdown-gph | cat .site/head.gph - >index.gph
       +        sed -i "s/VERSION/${VERSION}/g" index.*
       +
        .SUFFIXES: .awk
        .PHONY: ${AWK}
 (DIR) diff --git a/README b/README.md
 (DIR) diff --git a/ics2tsv.1 b/ics2tsv.1
       @@ -118,15 +118,6 @@ Timezone to use for printing dates, as documented by
        .
        .Sh EXAMPLES
        .
       -Convert a calendar from HTTP
       -.Pa .ics
       -to custom
       -.Pa .txt
       -sorted by start date:
       -.Dl curl "$url.ics" | ics2tsv | sort -n -k 1,1 | tsv2tsv
       -.
       -.Pp
       -.
        .Pp
        Split an
        .ics
       @@ -142,6 +133,7 @@ ics2tsv -f CATEGORIES icalendar.ics | awk -F '\et' '{ print >>($6".tsv") }\'
        .Xr cal 1 ,
        .Xr calendar 1 ,
        .Xr date 1 ,
       +.Xr tsv2agenda 1 ,
        .Xr tzset 3
        .
        .
 (DIR) diff --git a/ics2txt.1 b/ics2txt.1
       @@ -1,106 +0,0 @@
       -.Dd $Mdocdate: Mar 1 2020$
       -.Dt ICS2TXT 1
       -.Os
       -.
       -.
       -.Sh NAME
       -.
       -.Nm ics2txt
       -.Nd convert ics file to simpler tsv or txt formats
       -.
       -.
       -.Sh SYNOPSIS
       -.
       -.Nm ics2txt Ar <file.ics >file.txt
       -.Pp
       -.Nm ics2txt Ar <file.tsv >file.ics
       -.Nm ics2tsv Ar <file.ics >file.tsv
       -.Nm tsv2tcal Ar <file.tsv >file.txt
       -.Nm tcal2tsv Ar <file.txt >file.tsv
       -.Nm tsv2ics Ar <file.tsv >file.ics
       -.
       -.Sh DESCRIPTION
       -.
       -.Nm
       -is set of awk scripts to deal with iCal
       -.Pq Pa .ics
       -format to publish, display and convert *.ics files, though a simple
       -central TSV format.
       -.
       -.Pp
       -They all read from either stdin or the file passed as argument, and
       -write to stdout.
       -.
       -.Pp
       -.The
       -.Pa file.tsv
       -have one line per event, with the first line declaring fields order
       -and presence, among:
       -.
       -.Bl -tag -width xxxxx -offset 1n -compact
       -.It Dq beg
       -Begining of event (epoch)
       -.It Dq end
       -End of event (epoch)
       -.It Dq cat
       -Category
       -.It Dq loc
       -Location
       -.It Dq sum
       -Summary
       -.It Dq des
       -Description
       -.El
       -.
       -.
       -.Sh EXAMPLES
       -.
       -Convert a calendar from HTTP
       -.Pa .ics
       -to custom
       -.Pa .txt
       -sorted by start date:
       -.Dl curl "$url.ics" | ics2tsv | sort -n -k 1,1 | tsv2txt
       -.
       -.Pp
       -Convert a custom
       -.Pa .txt
       -format back to an
       -.Pa .ics
       -file and publish it:
       -.Dl tcal2tsv cal.txt | tsv2ics | ssh "www@$host" 'cat >/var/www/cal.ics'
       -.
       -.Pp
       -Split an
       -.ics
       -file according to the category, saved as
       -.Pa .tsv :
       -.Bd -literal
       -ics2tsv cal.txt | awk -F '\et' '
       -        NR == 1 { for (i = 1; i <= NF; i++) F[$i] = i; next }
       -        { print >>($F["cat"]".tsv") }
       -\'
       -.Ed
       -.
       -.
       -.Sh SEE ALSO
       -.
       -.Xr cal 1 ,
       -.Xr calendar 1 ,
       -.Xr date 1 ,
       -.Xr sort 1
       -.
       -.
       -.Sh STANDARDS
       -.
       -.Rs
       -.%A Desruisseaux
       -.%D September 2009
       -.%T Internet Calendaring and Scheduling Core Object Specification (iCalendar)
       -.%R RFC 5545
       -.Re
       -.
       -.
       -.Sh AUTHORS
       -.
       -.An Josuah Demangeon Aq Mt me@josuah.net
 (DIR) diff --git a/tsv2agenda.1 b/tsv2agenda.1
       @@ -0,0 +1,76 @@
       +.Dd $Mdocdate: Mar 1 2020$
       +.Dt TSV2AGENDA 1
       +.Os
       +.
       +.
       +.Sh NAME
       +.
       +.Nm tsv2agenda
       +.Nd convert TSV input to a visual agenda roll
       +.
       +.
       +.Sh SYNOPSIS
       +.
       +.Nm tsv2agenda
       +.Op Fl f Ar fromdate
       +.Op Fl t Ar todate
       +.
       +.Sh DESCRIPTION
       +.
       +.Nm
       +is a converter that reads tsv format as produced by
       +.Xr ics2tsv 1
       +and represents an aligned text agenda from it.
       +.
       +.Pp
       +Every column (after the 4th one) present on the input is displayed on
       +the output (if not empty).
       +.
       +.Bl -tag
       +.
       +.It Fl f Ar fromdate
       +Show only events starting from
       +.Ar fromdate .
       +By default the current time: showing all future events.
       +.
       +.It Fl t Ar todate
       +Show only events up to
       +.Ar todate .
       +By default show all future events.
       +.
       +.El
       +.
       +.
       +.Sh ENVIRONMENT VARIABLES
       +.
       +.Bl -tag
       +.
       +.It TZ
       +Timezone to use for printing dates, as documented by
       +.Xr tzset 3 .
       +.
       +.El
       +.
       +.
       +.Sh EXAMPLES
       +.
       +Show the events from a
       +.Pa icalendar.ics
       +file sorted by start date:
       +.Dl curl "$url.ics" | ics2tsv | sort -n -k 1,1 | tsv2agenda
       +.
       +.Pp
       +.
       +.
       +.Sh SEE ALSO
       +.
       +.Xr cal 1 ,
       +.Xr calendar 1 ,
       +.Xr ics2tsv 1 ,
       +.Xr tsv2ics 1 ,
       +.Xr tzset 3
       +.
       +.
       +.Sh AUTHORS
       +.
       +.An Josuah Demangeon Aq Mt me@josuah.net
 (DIR) diff --git a/tsv2agenda.c b/tsv2agenda.c
       @@ -119,6 +119,8 @@ print(AgendaCtx *ctx, char **fields)
                        return;
                localtime_r(&t, &end);
        
       +        fputc('\n', stdout);
       +
                print_header1(&ctx->beg, &beg);
                print_row(ctx, fields, i++);
                print_header2(&beg, &end);
       @@ -142,7 +144,8 @@ tsv_to_agenda(AgendaCtx *ctx, FILE *fp)
                        char *fields[FIELD_MAX];
        
                        ctx->linenum++;
       -                if (getline(&ln1, &sz1, fp) < 0)
       +                getline(&ln1, &sz1, fp);
       +                if (ferror(fp))
                                err(1, "reading stdin: %s", strerror(errno));
                        if (feof(fp))
                                err(1, "empty input");
       @@ -167,7 +170,8 @@ tsv_to_agenda(AgendaCtx *ctx, FILE *fp)
                        char *fields[FIELD_MAX];
        
                        ctx->linenum++;
       -                if (getline(&ln2, &sz2, fp) < 0)
       +                getline(&ln2, &sz2, fp);
       +                if (ferror(fp))
                                err(1, "reading stdin: %s", strerror(errno));
                        if (feof(fp))
                                break;
       @@ -177,7 +181,6 @@ tsv_to_agenda(AgendaCtx *ctx, FILE *fp)
                                err(1, "line %zd: bad number of columns",
                                    ctx->linenum, strerror(errno));
        
       -                fputc('\n', stdout);
                        print(ctx, fields);
                }
                fputc('\n', stdout);
 (DIR) diff --git a/tsv2ics.1 b/tsv2ics.1
       @@ -0,0 +1,53 @@
       +.Dd $Mdocdate: Mar 1 2020$
       +.Dt TSV2ICS 1
       +.Os
       +.
       +.
       +.Sh NAME
       +.
       +.Nm tsv2ics
       +.Nd convert ics file to simpler tsv or txt formats
       +.
       +.
       +.Sh SYNOPSIS
       +.
       +.Nm tsv2ics Ar <file.ics >file.txt
       +.
       +.Sh DESCRIPTION
       +.
       +.Nm
       +convert a tab-separated value input as produced by
       +.Xr ics2tsv 1 
       +and produce iCalendar formatted output.
       +The dates are formatted in UTC timestamps.
       +.
       +.
       +.Sh EXAMPLES
       +.
       +Only keep the dates and
       +.Dq SUMMARY
       +from an iCalendar:
       +.Dl ics2tsv -f SUMMARY icalendar.ics | tsv2ics
       +.
       +.
       +.Sh SEE ALSO
       +.
       +.Xr cal 1 ,
       +.Xr calendar 1 ,
       +.Xr ics2tsv 1 ,
       +.Xr tsv2agenda 1
       +.
       +.
       +.Sh STANDARDS
       +.
       +.Rs
       +.%A Desruisseaux
       +.%D September 2009
       +.%T Internet Calendaring and Scheduling Core Object Specification (iCalendar)
       +.%R RFC 5545
       +.Re
       +.
       +.
       +.Sh AUTHORS
       +.
       +.An Josuah Demangeon Aq Mt me@josuah.net