update man pages and generate project frontpage - ics2txt - convert icalendar .… | |
git clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
--- | |
commit cf5ca595cdbe8c8d7d3358e58a43452cc222d7c2 | |
parent 24ae7d2759496b7907cce29f0c26697950453ff5 | |
Author: Josuah Demangeon <[email protected]> | |
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(-) | |
--- | |
diff --git a/.gitignore b/.gitignore | |
@@ -4,3 +4,5 @@ | |
/tsv2ics | |
/tsv2agenda | |
/ics2txt-[0-9]* | |
+/style.css | |
+/index.* | |
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/||] | |
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-h… | |
+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> | |
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%; | |
+} | |
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 $@ [email protected] ${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 - >inde… | |
+ notmarkdown README.md | notmarkdown-gph | cat .site/head.gph - >index.… | |
+ sed -i "s/VERSION/${VERSION}/g" index.* | |
+ | |
.SUFFIXES: .awk | |
.PHONY: ${AWK} | |
diff --git a/README b/README.md | |
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… | |
.Xr cal 1 , | |
.Xr calendar 1 , | |
.Xr date 1 , | |
+.Xr tsv2agenda 1 , | |
.Xr tzset 3 | |
. | |
. | |
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 [email protected] | |
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 [email protected] | |
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); | |
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 [email protected] |