diff options
author | EuAndreh <eu@euandre.org> | 2025-05-01 21:13:25 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2025-05-01 21:13:25 -0300 |
commit | cc45d895ccf6d6a64ef0c9ad9cc3ec42ac45fa55 (patch) | |
tree | 6456f83c69227177b7eb1faf3f226f46ae6e92a2 | |
parent | src/content/incidents/index.adoc: Hoist links to variables (diff) | |
download | papo.im-cc45d895ccf6d6a64ef0c9ad9cc3ec42ac45fa55.tar.gz papo.im-cc45d895ccf6d6a64ef0c9ad9cc3ec42ac45fa55.tar.xz |
Update to support i18n
-rw-r--r-- | .gitignore | 33 | ||||
-rw-r--r-- | Makefile | 198 | ||||
-rw-r--r-- | deps.mk | 343 | ||||
-rwxr-xr-x | mkdeps.sh | 147 | ||||
-rw-r--r-- | po/en.po | 48 | ||||
-rw-r--r-- | po/note.txt | 5 | ||||
-rw-r--r-- | po/papo.im.pot | 46 | ||||
-rw-r--r-- | po/po4a.cfg | 9 | ||||
-rw-r--r-- | po/pt.po | 46 | ||||
l--------- | src/collections/blog | 1 | ||||
l--------- | src/collections/en/blog | 1 | ||||
l--------- | src/collections/en/incidents | 1 | ||||
l--------- | src/collections/incidents | 1 | ||||
-rw-r--r-- | src/content/en/about.adoc (renamed from src/content/about.adoc) | 0 | ||||
-rw-r--r-- | src/content/en/blog/1970/01/01/launch.adoc (renamed from src/content/blog/1970/01/01/launch.adoc) | 0 | ||||
-rw-r--r-- | src/content/en/blog/2000/01/01/feature-ann.adoc (renamed from src/content/blog/2000/01/01/feature-ann.adoc) | 1 | ||||
-rw-r--r-- | src/content/en/blog/categories.adoc | 2 | ||||
-rw-r--r-- | src/content/en/blog/index.adoc (renamed from src/content/blog/index.adoc) | 0 | ||||
-rw-r--r-- | src/content/en/incidents/2000/01/01/service-start.adoc (renamed from src/content/incidents/2000/01/01/service-start.adoc) | 0 | ||||
-rw-r--r-- | src/content/en/incidents/index.adoc (renamed from src/content/incidents/index.adoc) | 0 | ||||
-rw-r--r-- | src/content/en/index.adoc (renamed from src/content/index.adoc) | 0 | ||||
-rw-r--r-- | src/content/en/pricing.adoc (renamed from src/content/pricing.adoc) | 0 | ||||
-rw-r--r-- | src/content/en/privacy.adoc (renamed from src/content/privacy.adoc) | 0 | ||||
-rw-r--r-- | src/content/en/slide/2011/11/11/test.adoc | 10 | ||||
-rw-r--r-- | src/content/en/terms.adoc (renamed from src/content/terms.adoc) | 0 | ||||
-rw-r--r-- | src/content/favicon.png | bin | 0 -> 17842 bytes | |||
-rw-r--r-- | src/content/pt/sobre.adoc | 7 | ||||
-rw-r--r-- | src/content/public.asc.txt (renamed from src/content/public.asc) | 0 | ||||
-rw-r--r-- | src/headers/en.txt | 2 | ||||
-rw-r--r-- | src/headers/pt.txt | 2 | ||||
-rw-r--r-- | src/headers/ref.txt (renamed from src/headers.txt) | 0 | ||||
-rw-r--r-- | src/linkonly-dirs.txt | 0 | ||||
-rw-r--r-- | src/names/categories/en.txt | 1 | ||||
-rw-r--r-- | src/names/categories/pt.txt | 1 | ||||
-rw-r--r-- | src/names/categories/ref.txt | 1 | ||||
-rw-r--r-- | src/names/category/en.txt | 1 | ||||
-rw-r--r-- | src/names/category/pt.txt | 1 | ||||
-rw-r--r-- | src/names/category/ref.txt | 1 | ||||
l--------- | src/pages/en | 1 | ||||
l--------- | src/pages/pt | 1 | ||||
l--------- | src/pages/root | 1 | ||||
l--------- | src/slides/en | 1 | ||||
-rw-r--r-- | src/static.conf | 3 | ||||
-rw-r--r-- | src/symlinks.txt | 3 |
44 files changed, 658 insertions, 261 deletions
@@ -1,3 +1,4 @@ +*.sentinel *.htmlbody *.embedded-config *.conf @@ -5,31 +6,17 @@ *.links *.caslinks *.html -*.html.*.txt *.indexentry *.feedentry +*.mapentry *.sortdata *.categorydata -sortdata.txt -categories.txt -categories.xml -index.htmlheader -index.htmlfooter -index.htmllisting -feed.xml -feed.*.xml +*.txt +*.xml +*.htmlheader +*.htmlfooter +*.htmllisting +*.ps +*.pdf *.gz -/src/sources.txt -/src/all-contents.txt -/src/all-filelists.txt -/src/install.txt -/src/sort-expected.txt -/src/sort-given.txt -/sources.txt -/install.txt -/email.txt -/baseurl.txt -/fingerprint.txt -/expiry.txt -/src/content/security.txt -/src/content/.well-known/security.txt +/src/content/.gitignore @@ -19,14 +19,16 @@ EXEC = ./ ## Where to store the installation. Empty by default. DESTDIR = LDLIBS = -PUBURL = public.asc +PUBURL = public.asc.txt +FFMFLAGS = -y -hide_banner -loglevel warning +BASEURL = / .SUFFIXES: -.SUFFIXES: .adoc .conf .snippets .indexentry .feedentry .sortdata .xml .txt +.SUFFIXES: .adoc .conf .snippets .indexentry .feedentry .mapentry .sortdata .xml .SUFFIXES: .htmlbody .htmlheader .htmlfooter .htmllisting .html .links .caslinks -.SUFFIXES: .categorydata .gz +.SUFFIXES: .txt .categorydata .gz .torrent .flac .ogg .ps .pdf .adoc.conf: mkwb conf src/global.conf $< > $@ @@ -43,9 +45,6 @@ PUBURL = public.asc .conf.htmlfooter: mkwb html -F $< > $@ -.conf.htmllisting: - mkwb indexbody $< > $@ - .adoc.snippets: mkwb snippets $< > $@ @@ -55,6 +54,9 @@ PUBURL = public.asc .htmlbody.feedentry: mkwb feedentry $< > $@ +.conf.mapentry: + mkwb mapentry $< > $@ + .conf.sortdata: mkwb sortdata $< > $@ @@ -69,47 +71,67 @@ PUBURL = public.asc printf "%s\n" "_" | sha256sum | \ printf "%s\t%s\n" "`cut -d" " -f1`" "_"' > $@ +.flac.ogg: + ffmpeg $(FFMFLAGS) -i $< -ar 48000 -vn -c:a libvorbis -b:a 320k $@ + +.adoc.ps: + eslaides < $< > $@ + +.ps.pdf: + ps2pdf - < $< > $@ + all: include deps.mk -sources.adoc = $(articles.adoc) $(listings.adoc) $(pages.adoc) -sources.htmlbody = $(sources.adoc:.adoc=.htmlbody) -sources.html = $(sources.adoc:.adoc=.html) -sources.snippets = $(sources.adoc:.adoc=.snippets) -sources.snippets.gz = $(sources.adoc:.adoc=.snippets.gz) -sources.conf = $(sources.adoc:.adoc=.conf) -sources.links = $(sources.adoc:.adoc=.links) -sources.caslinks = $(sources.adoc:.adoc=.caslinks) -articles.indexentry = $(articles.adoc:.adoc=.indexentry) -articles.feedentry = $(articles.adoc:.adoc=.feedentry) -articles.sortdata = $(articles.adoc:.adoc=.sortdata) -articles.categorydata = $(articles.adoc:.adoc=.categorydata) -listings.htmlheader = $(listings.adoc:.adoc=.htmlheader) -listings.htmlfooter = $(listings.adoc:.adoc=.htmlfooter) -listings.htmllisting = $(listings.adoc:.adoc=.htmllisting) -listings.html = $(listings.adoc:.adoc=.html) -categories.xml = $(categories.txt:.txt=.xml) -categories.xml.gz = $(categories.txt:.txt=.xml.gz) +listings.adoc = $(categories.adoc) $(indexes.adoc) +sources.adoc = $(articles.adoc) $(listings.adoc) $(pages.adoc) +sources.htmlbody = $(sources.adoc:.adoc=.htmlbody) +sources.html = $(sources.adoc:.adoc=.html) +sources.snippets = $(sources.adoc:.adoc=.snippets) +sources.snippets.gz = $(sources.adoc:.adoc=.snippets.gz) +sources.conf = $(sources.adoc:.adoc=.conf) +sources.links = $(sources.adoc:.adoc=.links) +sources.caslinks = $(sources.adoc:.adoc=.caslinks) +sources.mapentry = $(sources.adoc:.adoc=.mapentry) +articles.indexentry = $(articles.adoc:.adoc=.indexentry) +articles.feedentry = $(articles.adoc:.adoc=.feedentry) +articles.sortdata = $(articles.adoc:.adoc=.sortdata) +articles.categorydata = $(articles.adoc:.adoc=.categorydata) +listings.htmlheader = $(listings.adoc:.adoc=.htmlheader) +listings.htmlfooter = $(listings.adoc:.adoc=.htmlfooter) +listings.html = $(listings.adoc:.adoc=.html) +indexes.htmllisting = $(indexes.adoc:.adoc=.htmllisting) +categories.htmllisting = $(categories.adoc:.adoc=.htmllisting) +categories.txt = $(categories.adoc:.adoc=.txt) +categories.xml = $(categories.adoc:.adoc=.xml) +categories.xml.gz = $(categories.adoc:.adoc=.xml.gz) +sources.media.torrent = $(sources.media:=.torrent) +slides.ps = $(slides.adoc:.adoc=.ps) +slides.pdf = $(slides.adoc:.adoc=.pdf) sources = \ $(sources.adoc) \ $(sources.extras) \ $(images.svg) \ src/content/favicon.ico \ + src/content/favicon.png \ src/content/style.css \ src/content/$(PUBURL) \ dynamic-contents = \ $(sources.html) \ + $(slides.pdf) \ $(feeds.xml) \ + src/content/sitemap.xml \ static-contents = \ $(sources.extras) \ $(images.svg) \ src/content/favicon.ico \ + src/content/favicon.png \ src/content/style.css \ src/content/$(PUBURL) \ src/content/.well-known/security.txt \ @@ -130,8 +152,6 @@ contents.gz = \ contents = \ $(dynamic-contents) \ $(static-contents) \ - src/content/security.txt \ - src/content/security.txt.gz \ all-filelists = \ $(sources.snippets) \ @@ -147,64 +167,84 @@ all-contents = \ derived-assets = \ $(dynamic-contents) \ $(contents.gz) \ + $(sources.html) \ $(sources.htmlbody) \ $(sources.snippets) \ $(sources.snippets.gz) \ + $(sources.conf) \ $(sources.links) \ $(sources.caslinks) \ - $(sources.conf) \ + $(sources.mapentry) \ src/dyn.conf \ src/base.conf \ src/global.conf \ - $(listings.htmlheader) \ - $(listings.htmlfooter) \ - $(listings.htmllisting) \ $(articles.indexentry) \ $(articles.feedentry) \ $(articles.sortdata) \ $(articles.categorydata) \ + $(listings.htmlheader) \ + $(listings.htmlfooter) \ + $(listings.html) \ + $(indexes.htmllisting) \ + $(categories.htmllisting) \ $(categories.txt) \ $(categories.xml) \ $(categories.xml.gz) \ + $(slides.ps) \ + $(slides.pdf) \ email.txt \ baseurl.txt \ fingerprint.txt \ expiry.txt \ - src/content/security.txt \ - src/content/security.txt.gz \ + expiry-epoch.txt \ + now.txt \ src/content/.well-known/security.txt \ src/all-contents.txt \ src/all-filelists.txt \ + src/all-symlinks.txt \ src/install.txt \ src/sort-expected.txt \ src/sort-given.txt \ src/sources.txt \ install.txt \ sources.txt \ + src/content/.gitignore \ + i18n.sentinel \ + +captured-assets = \ + src/content/$(PUBURL) \ + src/content/favicon.ico \ + src/content/favicon.png \ + $(sources.media.torrent) \ side-assets = \ - src/collections/*/*/*/*/*.html.*.txt \ - src/collections/*/*/*/*/*.html.*.txt.gz \ - src/collections/*/index.html.*.txt \ - src/collections/*/sortdata.txt \ - src/collections/*/feed.*.xml \ - src/collections/*/feed.*.xml.gz \ - src/collections/*/*.sortdata \ + src/collections/*/*/*/*/*/*.html.*.txt \ + src/collections/*/*/*/*/*/*.txt.gz \ + src/collections/*/*/index.html.*.txt \ + src/collections/*/*/sortdata.txt \ + src/collections/*/*/feed.*.xml \ + src/collections/*/*/feed.*.xml.gz \ + src/collections/*/*/*.sortdata \ src/pages/*/*.html.*.txt \ src/content/.well-known/ \ + `cat src/all-symlinks.txt 2>/dev/null` \ + `cat src/linkonly-dirs.txt 2>/dev/null` \ ## Default target. Builds all artifacts required for testing ## and installation. all: $(derived-assets) -all: src/content/$(PUBURL) src/content/favicon.ico +all: $(captured-assets) $(derived-assets): Makefile deps.mk -$(sources.conf): src/global.conf src/headers.txt +$(sources.conf): src/global.conf +src/content/.gitignore: src/symlinks.txt + cd src/content/ && mkwb symlinks ../symlinks.txt > $(@F) + src/dyn.conf: email.txt baseurl.txt fingerprint.txt printf "export url_pre='%s'\n" "`cat baseurl.txt`" > $@ printf "export email='%s'\n" "`cat email.txt`" >> $@ @@ -219,19 +259,25 @@ src/global.conf: src/base.conf mkwb conf -G src/base.conf > $@ $(listings.html): - cat $*.htmlheader $*.htmllisting $*.htmlbody $*.htmlfooter > $@ + cat $*.htmlheader $*.htmlbody $*.htmllisting $*.htmlfooter > $@ + +$(indexes.htmllisting): + mkwb indexbody $*.conf > $@ + +$(categories.htmllisting): + mkwb categoriesbody $*.conf > $@ -$(categories.txt): - mkwb categories $(@D) > $@ +$(categories.txt): src/global.conf + mkwb categories src/global.conf $(@D) > $@ -$(categories.xml): +$(categories.xml): src/global.conf for f in `cat $*.txt`; do \ c="`printf '%s\n' "$$f" | cut -d. -f2`"; \ mkwb feed src/global.conf "$$f" > $(@D)/feed."$$c".xml; \ printf '%s\n' $(@D)/feed."$$c".xml; \ done > $@ -$(feeds.xml): +$(feeds.xml): src/global.conf mkwb feed src/global.conf $(@D)/sortdata.txt > $@ $(contents.gz): @@ -250,6 +296,17 @@ src/content/favicon.ico.gz: src/content/favicon.ico src/content/favicon.ico: src/content/img/favicon.svg convert src/content/img/favicon.svg $@ +src/content/favicon.png: src/content/img/favicon.svg + convert src/content/img/favicon.svg $@ + +$(sources.media.torrent): + F="`printf '%s\n' $* | cut -d/ -f3-`" && \ + mktorrent -xfd -n $(*F) -o $@ -w "https://$(NAME)$(BASEURL)$${F}" $* + +src/content/sitemap.xml.gz: src/content/sitemap.xml +src/content/sitemap.xml: $(sources.mapentry) + mkwb sitemap $(sources.mapentry) > $@ + email.txt: meta.json jq -r '.email' < meta.json > $@ @@ -267,10 +324,11 @@ expiry.txt: src/content/$(PUBURL) awk -F: '/^pub:/ { print $$7 }' | \ xargs -I% date -Is -d@% > $@ -src/content/security.txt.gz: src/content/.well-known/security.txt.gz -src/content/security.txt: src/content/.well-known/security.txt -src/content/security.txt src/content/security.txt.gz: - ln -fs .well-known/$(@F) $@ +expiry-epoch.txt: expiry.txt + date -d "`cat expiry.txt`" '+%s' > $@ + +now.txt: + now > $@ src/content/.well-known/security.txt.gz: src/content/.well-known/security.txt src/content/.well-known/security.txt: email.txt baseurl.txt expiry.txt @@ -278,7 +336,7 @@ src/content/.well-known/security.txt: email.txt baseurl.txt expiry.txt printf 'Contact: mailto:%s\n' "`cat email.txt`" > $@ printf 'Expires: %s\n' "`cat expiry.txt`" >> $@ printf 'Encryption: %s/$(PUBURL)\n' "`cat baseurl.txt`" >> $@ - printf 'Preferred-Languages: en, pt, fr, eo, es\n' >> $@ + printf 'Preferred-Languages: en, pt, fr, eo, es, de\n' >> $@ src/sources.txt: printf '%s\n' $(sources) > $@ @@ -286,8 +344,11 @@ src/sources.txt: src/all-contents.txt: printf '%s\n' $(all-contents) > $@ -src/all-filelists.txt: - printf '%s\n' $(all-filelists) > $@ +src/all-filelists.txt: src/all-symlinks.txt + printf '%s\n' $(all-filelists) src/all-symlinks.txt > $@ + +src/all-symlinks.txt: src/content/.gitignore + sed 's|^|src/content|' src/content/.gitignore > $@ src/install.txt: src/all-contents.txt src/all-filelists.txt $(all-filelists) cat src/all-contents.txt `cat src/all-filelists.txt` > $@ @@ -297,6 +358,10 @@ install.txt: src/install.txt sources.txt install.txt: sed 's|^src/content/||' src/$(@F) > $@ +i18n.sentinel: po/po4a.cfg po/note.txt $(sources.po) $(po4a.in) + po4a po/po4a.cfg + touch $@ + src/sort-expected.txt: @@ -334,9 +399,36 @@ check-unit-links-internal: $(sources.links-internal-check) check-unit-links-external: +symlink-deps = \ + $(sources.html) \ + $(feeds.xml) \ + $(categories.xml) \ + src/content/.well-known/security.txt \ + +check-unit-symlinks: src/all-symlinks.txt $(symlink-deps) + find `cat src/all-symlinks.txt` | xargs -n1 test -e + + check-unit-links: check-unit-links-internal check-unit-links-external +check-unit-links: check-unit-symlinks + + +MAXSIZE = 52428800 # from spec: https://www.sitemaps.org/protocol.html +check-unit-sitemap-size: src/content/sitemap.xml + test "`stat --printf='%s' src/content/sitemap.xml`" -le $(MAXSIZE) + +check-unit-sitemap-count: src/content/sitemap.xml + test "`grep -cF '</url>' src/content/sitemap.xml`" -le 50000 + +check-unit-sitemap: check-unit-sitemap-count check-unit-sitemap-size + + +check-unit-expiry: expiry-epoch.txt now.txt + test "`cat expiry-epoch.txt`" -gt "`cat now.txt`" + check-unit: check-unit-sorting check-unit-updatedat check-unit-links +check-unit: check-unit-sitemap check-unit-expiry integration-tests = \ @@ -1,26 +1,29 @@ pages.adoc = \ - src/content/about.adoc \ - src/content/index.adoc \ - src/content/pricing.adoc \ - src/content/privacy.adoc \ - src/content/terms.adoc \ + src/content/en/about.adoc \ + src/content/en/index.adoc \ + src/content/en/pricing.adoc \ + src/content/en/privacy.adoc \ + src/content/en/terms.adoc \ + src/content/pt/sobre.adoc \ articles.adoc = \ - src/content/blog/1970/01/01/launch.adoc \ - src/content/blog/2000/01/01/feature-ann.adoc \ - src/content/incidents/2000/01/01/service-start.adoc \ + src/content/en/blog/1970/01/01/launch.adoc \ + src/content/en/blog/2000/01/01/feature-ann.adoc \ + src/content/en/incidents/2000/01/01/service-start.adoc \ -listings.adoc = \ - src/content/blog/index.adoc \ - src/content/incidents/index.adoc \ +slides.adoc = \ + src/content/en/slide/2011/11/11/test.adoc \ -categories.txt = \ - src/content/blog/categories.txt \ - src/content/incidents/categories.txt \ +categories.adoc = \ + src/content/en/blog/categories.adoc \ + +indexes.adoc = \ + src/content/en/blog/index.adoc \ + src/content/en/incidents/index.adoc \ feeds.xml = \ - src/content/blog/feed.xml \ - src/content/incidents/feed.xml \ + src/content/en/blog/feed.xml \ + src/content/en/incidents/feed.xml \ images.svg = \ src/content/img/atom/dark.svg \ @@ -39,133 +42,185 @@ images.svg = \ src/content/img/shield/dark.svg \ src/content/img/shield/light.svg \ +sources.media = \ + +sources.tarballs = \ + sources.extras = \ -src/content/about.htmlbody src/content/about.snippets src/content/about.conf: src/content/about.adoc -src/content/index.htmlbody src/content/index.snippets src/content/index.conf: src/content/index.adoc -src/content/pricing.htmlbody src/content/pricing.snippets src/content/pricing.conf: src/content/pricing.adoc -src/content/privacy.htmlbody src/content/privacy.snippets src/content/privacy.conf: src/content/privacy.adoc -src/content/terms.htmlbody src/content/terms.snippets src/content/terms.conf: src/content/terms.adoc -src/content/blog/1970/01/01/launch.htmlbody src/content/blog/1970/01/01/launch.snippets src/content/blog/1970/01/01/launch.conf: src/content/blog/1970/01/01/launch.adoc -src/content/blog/2000/01/01/feature-ann.htmlbody src/content/blog/2000/01/01/feature-ann.snippets src/content/blog/2000/01/01/feature-ann.conf: src/content/blog/2000/01/01/feature-ann.adoc -src/content/incidents/2000/01/01/service-start.htmlbody src/content/incidents/2000/01/01/service-start.snippets src/content/incidents/2000/01/01/service-start.conf: src/content/incidents/2000/01/01/service-start.adoc -src/content/blog/index.htmlbody src/content/blog/index.snippets src/content/blog/index.conf: src/content/blog/index.adoc -src/content/incidents/index.htmlbody src/content/incidents/index.snippets src/content/incidents/index.conf: src/content/incidents/index.adoc -src/content/about.html: src/content/about.conf src/content/about.htmlbody -src/content/index.html: src/content/index.conf src/content/index.htmlbody -src/content/pricing.html: src/content/pricing.conf src/content/pricing.htmlbody -src/content/privacy.html: src/content/privacy.conf src/content/privacy.htmlbody -src/content/terms.html: src/content/terms.conf src/content/terms.htmlbody -src/content/blog/1970/01/01/launch.html: src/content/blog/1970/01/01/launch.conf src/content/blog/1970/01/01/launch.htmlbody -src/content/blog/2000/01/01/feature-ann.html: src/content/blog/2000/01/01/feature-ann.conf src/content/blog/2000/01/01/feature-ann.htmlbody -src/content/incidents/2000/01/01/service-start.html: src/content/incidents/2000/01/01/service-start.conf src/content/incidents/2000/01/01/service-start.htmlbody -src/content/blog/index.html: src/content/blog/index.conf src/content/blog/index.htmlbody -src/content/incidents/index.html: src/content/incidents/index.conf src/content/incidents/index.htmlbody - -src/content/about.html.gz: src/content/about.html -src/content/index.html.gz: src/content/index.html -src/content/pricing.html.gz: src/content/pricing.html -src/content/privacy.html.gz: src/content/privacy.html -src/content/terms.html.gz: src/content/terms.html -src/content/blog/1970/01/01/launch.html.gz: src/content/blog/1970/01/01/launch.html -src/content/blog/2000/01/01/feature-ann.html.gz: src/content/blog/2000/01/01/feature-ann.html -src/content/incidents/2000/01/01/service-start.html.gz: src/content/incidents/2000/01/01/service-start.html -src/content/blog/index.html.gz: src/content/blog/index.html -src/content/incidents/index.html.gz: src/content/incidents/index.html -src/content/about.snippets.gz: src/content/about.snippets -src/content/index.snippets.gz: src/content/index.snippets -src/content/pricing.snippets.gz: src/content/pricing.snippets -src/content/privacy.snippets.gz: src/content/privacy.snippets -src/content/terms.snippets.gz: src/content/terms.snippets -src/content/blog/1970/01/01/launch.snippets.gz: src/content/blog/1970/01/01/launch.snippets -src/content/blog/2000/01/01/feature-ann.snippets.gz: src/content/blog/2000/01/01/feature-ann.snippets -src/content/incidents/2000/01/01/service-start.snippets.gz: src/content/incidents/2000/01/01/service-start.snippets -src/content/blog/index.snippets.gz: src/content/blog/index.snippets -src/content/incidents/index.snippets.gz: src/content/incidents/index.snippets -src/content/blog/categories.xml.gz: src/content/blog/categories.xml -src/content/incidents/categories.xml.gz: src/content/incidents/categories.xml -src/content/blog/feed.xml.gz: src/content/blog/feed.xml -src/content/incidents/feed.xml.gz: src/content/incidents/feed.xml - -src/content/about.updatedat-check: src/content/about.conf -src/content/index.updatedat-check: src/content/index.conf -src/content/pricing.updatedat-check: src/content/pricing.conf -src/content/privacy.updatedat-check: src/content/privacy.conf -src/content/terms.updatedat-check: src/content/terms.conf -src/content/blog/1970/01/01/launch.updatedat-check: src/content/blog/1970/01/01/launch.conf -src/content/blog/2000/01/01/feature-ann.updatedat-check: src/content/blog/2000/01/01/feature-ann.conf -src/content/incidents/2000/01/01/service-start.updatedat-check: src/content/incidents/2000/01/01/service-start.conf -src/content/blog/index.updatedat-check: src/content/blog/index.conf -src/content/incidents/index.updatedat-check: src/content/incidents/index.conf -src/content/about.links-internal-check: src/content/about.links -src/content/index.links-internal-check: src/content/index.links -src/content/pricing.links-internal-check: src/content/pricing.links -src/content/privacy.links-internal-check: src/content/privacy.links -src/content/terms.links-internal-check: src/content/terms.links -src/content/blog/1970/01/01/launch.links-internal-check: src/content/blog/1970/01/01/launch.links -src/content/blog/2000/01/01/feature-ann.links-internal-check: src/content/blog/2000/01/01/feature-ann.links -src/content/incidents/2000/01/01/service-start.links-internal-check: src/content/incidents/2000/01/01/service-start.links -src/content/blog/index.links-internal-check: src/content/blog/index.links -src/content/incidents/index.links-internal-check: src/content/incidents/index.links -src/content/about.caslinks: src/content/about.links -src/content/index.caslinks: src/content/index.links -src/content/pricing.caslinks: src/content/pricing.links -src/content/privacy.caslinks: src/content/privacy.links -src/content/terms.caslinks: src/content/terms.links -src/content/blog/1970/01/01/launch.caslinks: src/content/blog/1970/01/01/launch.links -src/content/blog/2000/01/01/feature-ann.caslinks: src/content/blog/2000/01/01/feature-ann.links -src/content/incidents/2000/01/01/service-start.caslinks: src/content/incidents/2000/01/01/service-start.links -src/content/blog/index.caslinks: src/content/blog/index.links -src/content/incidents/index.caslinks: src/content/incidents/index.links - -src/content/blog/1970/01/01/launch.feedentry: src/content/blog/1970/01/01/launch.conf src/content/blog/1970/01/01/launch.htmlbody -src/content/blog/2000/01/01/feature-ann.feedentry: src/content/blog/2000/01/01/feature-ann.conf src/content/blog/2000/01/01/feature-ann.htmlbody -src/content/incidents/2000/01/01/service-start.feedentry: src/content/incidents/2000/01/01/service-start.conf src/content/incidents/2000/01/01/service-start.htmlbody -src/content/blog/1970/01/01/launch.sortdata: src/content/blog/1970/01/01/launch.conf -src/content/blog/2000/01/01/feature-ann.sortdata: src/content/blog/2000/01/01/feature-ann.conf -src/content/incidents/2000/01/01/service-start.sortdata: src/content/incidents/2000/01/01/service-start.conf -src/content/blog/1970/01/01/launch.categorydata: src/content/blog/1970/01/01/launch.conf -src/content/blog/2000/01/01/feature-ann.categorydata: src/content/blog/2000/01/01/feature-ann.conf -src/content/incidents/2000/01/01/service-start.categorydata: src/content/incidents/2000/01/01/service-start.conf - -src/content/blog/index.htmlheader src/content/blog/index.htmlfooter: src/content/blog/index.conf -src/content/incidents/index.htmlheader src/content/incidents/index.htmlfooter: src/content/incidents/index.conf -src/content/blog/index.html: src/content/blog/index.htmlheader src/content/blog/index.htmlfooter -src/content/incidents/index.html: src/content/incidents/index.htmlheader src/content/incidents/index.htmlfooter -src/content/blog/index.html: src/content/blog/index.htmllisting src/content/blog/index.htmlbody -src/content/incidents/index.html: src/content/incidents/index.htmllisting src/content/incidents/index.htmlbody - - -articles.blog.adoc = \ - src/content/blog/1970/01/01/launch.adoc \ - src/content/blog/2000/01/01/feature-ann.adoc \ - -articles.blog.sortdata = $(articles.blog.adoc:.adoc=.sortdata) -articles.blog.indexentry = $(articles.blog.adoc:.adoc=.indexentry) -articles.blog.feedentry = $(articles.blog.adoc:.adoc=.feedentry) -articles.blog.categorydata = $(articles.blog.adoc:.adoc=.categorydata) -src/content/blog/sortdata.txt: deps.mk - printf '%s\n' $(articles.blog.sortdata) > $@ - -src/content/blog/categories.txt src/content/blog/feed.xml src/content/blog/index.htmllisting: src/content/blog/sortdata.txt $(articles.blog.sortdata) -src/content/blog/index.htmllisting: $(articles.blog.indexentry) -src/content/blog/categories.txt: $(articles.blog.categorydata) -src/content/blog/categories.xml: src/content/blog/categories.txt -src/content/blog/categories.txt src/content/blog/feed.xml: $(articles.blog.feedentry) - - -articles.incidents.adoc = \ - src/content/incidents/2000/01/01/service-start.adoc \ - -articles.incidents.sortdata = $(articles.incidents.adoc:.adoc=.sortdata) -articles.incidents.indexentry = $(articles.incidents.adoc:.adoc=.indexentry) -articles.incidents.feedentry = $(articles.incidents.adoc:.adoc=.feedentry) -articles.incidents.categorydata = $(articles.incidents.adoc:.adoc=.categorydata) -src/content/incidents/sortdata.txt: deps.mk - printf '%s\n' $(articles.incidents.sortdata) > $@ - -src/content/incidents/categories.txt src/content/incidents/feed.xml src/content/incidents/index.htmllisting: src/content/incidents/sortdata.txt $(articles.incidents.sortdata) -src/content/incidents/index.htmllisting: $(articles.incidents.indexentry) -src/content/incidents/categories.txt: $(articles.incidents.categorydata) -src/content/incidents/categories.xml: src/content/incidents/categories.txt -src/content/incidents/categories.txt src/content/incidents/feed.xml: $(articles.incidents.feedentry) +sources.po = \ + po/en.po \ + po/papo.im.pot \ + po/pt.po \ + +po4a.in = \ + src/content/en/about.adoc \ + +src/content/en/about.html.gz: src/content/en/about.html +src/content/en/index.html.gz: src/content/en/index.html +src/content/en/pricing.html.gz: src/content/en/pricing.html +src/content/en/privacy.html.gz: src/content/en/privacy.html +src/content/en/terms.html.gz: src/content/en/terms.html +src/content/pt/sobre.html.gz: src/content/pt/sobre.html +src/content/en/blog/1970/01/01/launch.html.gz: src/content/en/blog/1970/01/01/launch.html +src/content/en/blog/2000/01/01/feature-ann.html.gz: src/content/en/blog/2000/01/01/feature-ann.html +src/content/en/incidents/2000/01/01/service-start.html.gz: src/content/en/incidents/2000/01/01/service-start.html +src/content/en/blog/index.html.gz: src/content/en/blog/index.html +src/content/en/incidents/index.html.gz: src/content/en/incidents/index.html +src/content/en/blog/categories.html.gz: src/content/en/blog/categories.html +src/content/en/about.snippets.gz: src/content/en/about.snippets +src/content/en/index.snippets.gz: src/content/en/index.snippets +src/content/en/pricing.snippets.gz: src/content/en/pricing.snippets +src/content/en/privacy.snippets.gz: src/content/en/privacy.snippets +src/content/en/terms.snippets.gz: src/content/en/terms.snippets +src/content/pt/sobre.snippets.gz: src/content/pt/sobre.snippets +src/content/en/blog/1970/01/01/launch.snippets.gz: src/content/en/blog/1970/01/01/launch.snippets +src/content/en/blog/2000/01/01/feature-ann.snippets.gz: src/content/en/blog/2000/01/01/feature-ann.snippets +src/content/en/incidents/2000/01/01/service-start.snippets.gz: src/content/en/incidents/2000/01/01/service-start.snippets +src/content/en/blog/index.snippets.gz: src/content/en/blog/index.snippets +src/content/en/incidents/index.snippets.gz: src/content/en/incidents/index.snippets +src/content/en/blog/categories.snippets.gz: src/content/en/blog/categories.snippets +src/content/en/slide/2011/11/11/test.pdf.gz: src/content/en/slide/2011/11/11/test.pdf +src/content/en/blog/feed.xml.gz: src/content/en/blog/feed.xml +src/content/en/incidents/feed.xml.gz: src/content/en/incidents/feed.xml + +src/content/en/about.htmlbody src/content/en/about.snippets src/content/en/about.conf: src/content/en/about.adoc +src/content/en/index.htmlbody src/content/en/index.snippets src/content/en/index.conf: src/content/en/index.adoc +src/content/en/pricing.htmlbody src/content/en/pricing.snippets src/content/en/pricing.conf: src/content/en/pricing.adoc +src/content/en/privacy.htmlbody src/content/en/privacy.snippets src/content/en/privacy.conf: src/content/en/privacy.adoc +src/content/en/terms.htmlbody src/content/en/terms.snippets src/content/en/terms.conf: src/content/en/terms.adoc +src/content/pt/sobre.htmlbody src/content/pt/sobre.snippets src/content/pt/sobre.conf: src/content/pt/sobre.adoc +src/content/en/blog/1970/01/01/launch.htmlbody src/content/en/blog/1970/01/01/launch.snippets src/content/en/blog/1970/01/01/launch.conf: src/content/en/blog/1970/01/01/launch.adoc +src/content/en/blog/2000/01/01/feature-ann.htmlbody src/content/en/blog/2000/01/01/feature-ann.snippets src/content/en/blog/2000/01/01/feature-ann.conf: src/content/en/blog/2000/01/01/feature-ann.adoc +src/content/en/incidents/2000/01/01/service-start.htmlbody src/content/en/incidents/2000/01/01/service-start.snippets src/content/en/incidents/2000/01/01/service-start.conf: src/content/en/incidents/2000/01/01/service-start.adoc +src/content/en/blog/index.htmlbody src/content/en/blog/index.snippets src/content/en/blog/index.conf: src/content/en/blog/index.adoc +src/content/en/incidents/index.htmlbody src/content/en/incidents/index.snippets src/content/en/incidents/index.conf: src/content/en/incidents/index.adoc +src/content/en/blog/categories.htmlbody src/content/en/blog/categories.snippets src/content/en/blog/categories.conf: src/content/en/blog/categories.adoc +src/content/en/about.html: src/content/en/about.conf src/content/en/about.htmlbody +src/content/en/index.html: src/content/en/index.conf src/content/en/index.htmlbody +src/content/en/pricing.html: src/content/en/pricing.conf src/content/en/pricing.htmlbody +src/content/en/privacy.html: src/content/en/privacy.conf src/content/en/privacy.htmlbody +src/content/en/terms.html: src/content/en/terms.conf src/content/en/terms.htmlbody +src/content/pt/sobre.html: src/content/pt/sobre.conf src/content/pt/sobre.htmlbody +src/content/en/blog/1970/01/01/launch.html: src/content/en/blog/1970/01/01/launch.conf src/content/en/blog/1970/01/01/launch.htmlbody +src/content/en/blog/2000/01/01/feature-ann.html: src/content/en/blog/2000/01/01/feature-ann.conf src/content/en/blog/2000/01/01/feature-ann.htmlbody +src/content/en/incidents/2000/01/01/service-start.html: src/content/en/incidents/2000/01/01/service-start.conf src/content/en/incidents/2000/01/01/service-start.htmlbody +src/content/en/blog/index.html: src/content/en/blog/index.conf src/content/en/blog/index.htmlbody +src/content/en/incidents/index.html: src/content/en/incidents/index.conf src/content/en/incidents/index.htmlbody +src/content/en/blog/categories.html: src/content/en/blog/categories.conf src/content/en/blog/categories.htmlbody + +src/content/en/about.updatedat-check: src/content/en/about.conf +src/content/en/index.updatedat-check: src/content/en/index.conf +src/content/en/pricing.updatedat-check: src/content/en/pricing.conf +src/content/en/privacy.updatedat-check: src/content/en/privacy.conf +src/content/en/terms.updatedat-check: src/content/en/terms.conf +src/content/pt/sobre.updatedat-check: src/content/pt/sobre.conf +src/content/en/blog/1970/01/01/launch.updatedat-check: src/content/en/blog/1970/01/01/launch.conf +src/content/en/blog/2000/01/01/feature-ann.updatedat-check: src/content/en/blog/2000/01/01/feature-ann.conf +src/content/en/incidents/2000/01/01/service-start.updatedat-check: src/content/en/incidents/2000/01/01/service-start.conf +src/content/en/blog/index.updatedat-check: src/content/en/blog/index.conf +src/content/en/incidents/index.updatedat-check: src/content/en/incidents/index.conf +src/content/en/blog/categories.updatedat-check: src/content/en/blog/categories.conf +src/content/en/about.links-internal-check: src/content/en/about.links +src/content/en/index.links-internal-check: src/content/en/index.links +src/content/en/pricing.links-internal-check: src/content/en/pricing.links +src/content/en/privacy.links-internal-check: src/content/en/privacy.links +src/content/en/terms.links-internal-check: src/content/en/terms.links +src/content/pt/sobre.links-internal-check: src/content/pt/sobre.links +src/content/en/blog/1970/01/01/launch.links-internal-check: src/content/en/blog/1970/01/01/launch.links +src/content/en/blog/2000/01/01/feature-ann.links-internal-check: src/content/en/blog/2000/01/01/feature-ann.links +src/content/en/incidents/2000/01/01/service-start.links-internal-check: src/content/en/incidents/2000/01/01/service-start.links +src/content/en/blog/index.links-internal-check: src/content/en/blog/index.links +src/content/en/incidents/index.links-internal-check: src/content/en/incidents/index.links +src/content/en/blog/categories.links-internal-check: src/content/en/blog/categories.links +src/content/en/about.caslinks: src/content/en/about.links +src/content/en/index.caslinks: src/content/en/index.links +src/content/en/pricing.caslinks: src/content/en/pricing.links +src/content/en/privacy.caslinks: src/content/en/privacy.links +src/content/en/terms.caslinks: src/content/en/terms.links +src/content/pt/sobre.caslinks: src/content/pt/sobre.links +src/content/en/blog/1970/01/01/launch.caslinks: src/content/en/blog/1970/01/01/launch.links +src/content/en/blog/2000/01/01/feature-ann.caslinks: src/content/en/blog/2000/01/01/feature-ann.links +src/content/en/incidents/2000/01/01/service-start.caslinks: src/content/en/incidents/2000/01/01/service-start.links +src/content/en/blog/index.caslinks: src/content/en/blog/index.links +src/content/en/incidents/index.caslinks: src/content/en/incidents/index.links +src/content/en/blog/categories.caslinks: src/content/en/blog/categories.links + +src/content/en/blog/1970/01/01/launch.feedentry: src/content/en/blog/1970/01/01/launch.conf src/content/en/blog/1970/01/01/launch.htmlbody +src/content/en/blog/2000/01/01/feature-ann.feedentry: src/content/en/blog/2000/01/01/feature-ann.conf src/content/en/blog/2000/01/01/feature-ann.htmlbody +src/content/en/incidents/2000/01/01/service-start.feedentry: src/content/en/incidents/2000/01/01/service-start.conf src/content/en/incidents/2000/01/01/service-start.htmlbody +src/content/en/blog/1970/01/01/launch.sortdata: src/content/en/blog/1970/01/01/launch.conf +src/content/en/blog/2000/01/01/feature-ann.sortdata: src/content/en/blog/2000/01/01/feature-ann.conf +src/content/en/incidents/2000/01/01/service-start.sortdata: src/content/en/incidents/2000/01/01/service-start.conf +src/content/en/blog/1970/01/01/launch.categorydata: src/content/en/blog/1970/01/01/launch.conf +src/content/en/blog/2000/01/01/feature-ann.categorydata: src/content/en/blog/2000/01/01/feature-ann.conf +src/content/en/incidents/2000/01/01/service-start.categorydata: src/content/en/incidents/2000/01/01/service-start.conf + +src/content/en/blog/index.htmlheader src/content/en/blog/index.htmlfooter: src/content/en/blog/index.conf +src/content/en/incidents/index.htmlheader src/content/en/incidents/index.htmlfooter: src/content/en/incidents/index.conf +src/content/en/blog/categories.htmlheader src/content/en/blog/categories.htmlfooter: src/content/en/blog/categories.conf +src/content/en/blog/index.htmllisting: src/content/en/blog/index.conf +src/content/en/incidents/index.htmllisting: src/content/en/incidents/index.conf +src/content/en/blog/categories.htmllisting: src/content/en/blog/categories.conf +src/content/en/blog/index.html: src/content/en/blog/index.htmlheader src/content/en/blog/index.htmlfooter +src/content/en/incidents/index.html: src/content/en/incidents/index.htmlheader src/content/en/incidents/index.htmlfooter +src/content/en/blog/categories.html: src/content/en/blog/categories.htmlheader src/content/en/blog/categories.htmlfooter +src/content/en/blog/index.html: src/content/en/blog/index.htmllisting src/content/en/blog/index.htmlbody +src/content/en/incidents/index.html: src/content/en/incidents/index.htmllisting src/content/en/incidents/index.htmlbody +src/content/en/blog/categories.html: src/content/en/blog/categories.htmllisting src/content/en/blog/categories.htmlbody + + +src/content/en/slide/2011/11/11/test.ps: src/content/en/slide/2011/11/11/test.adoc +src/content/en/slide/2011/11/11/test.pdf: src/content/en/slide/2011/11/11/test.ps + + + +articles.en.blog.adoc = \ + src/content/en/blog/1970/01/01/launch.adoc \ + src/content/en/blog/2000/01/01/feature-ann.adoc \ + +articles.en.blog.sortdata = $(articles.en.blog.adoc:.adoc=.sortdata) +articles.en.blog.indexentry = $(articles.en.blog.adoc:.adoc=.indexentry) +articles.en.blog.feedentry = $(articles.en.blog.adoc:.adoc=.feedentry) +articles.en.blog.categorydata = $(articles.en.blog.adoc:.adoc=.categorydata) +src/content/en/blog/sortdata.txt: deps.mk + printf '%s\n' $(articles.en.blog.sortdata) > $@ + +src/content/en/blog/feed.xml: src/content/en/blog/sortdata.txt +src/content/en/blog/feed.xml: $(articles.en.blog.sortdata) +src/content/en/blog/index.htmllisting: src/content/en/blog/sortdata.txt +src/content/en/blog/index.htmllisting: $(articles.en.blog.sortdata) +src/content/en/blog/categories.htmllisting: src/content/en/blog/sortdata.txt +src/content/en/blog/categories.htmllisting: $(articles.en.blog.sortdata) +src/content/en/blog/categories.txt: src/content/en/blog/sortdata.txt +src/content/en/blog/categories.txt: $(articles.en.blog.sortdata) +src/content/en/blog/index.htmllisting src/content/en/blog/categories.htmllisting: $(articles.en.blog.indexentry) +src/content/en/blog/categories.txt: $(articles.en.blog.categorydata) +src/content/en/blog/categories.txt src/content/en/blog/feed.xml: $(articles.en.blog.feedentry) +src/content/en/blog/categories.htmllisting src/content/en/blog/categories.xml: src/content/en/blog/categories.txt +src/content/en/blog/categories.xml.gz: src/content/en/blog/categories.xml + + +articles.en.incidents.adoc = \ + src/content/en/incidents/2000/01/01/service-start.adoc \ + +articles.en.incidents.sortdata = $(articles.en.incidents.adoc:.adoc=.sortdata) +articles.en.incidents.indexentry = $(articles.en.incidents.adoc:.adoc=.indexentry) +articles.en.incidents.feedentry = $(articles.en.incidents.adoc:.adoc=.feedentry) +articles.en.incidents.categorydata = $(articles.en.incidents.adoc:.adoc=.categorydata) +src/content/en/incidents/sortdata.txt: deps.mk + printf '%s\n' $(articles.en.incidents.sortdata) > $@ + +src/content/en/incidents/feed.xml: src/content/en/incidents/sortdata.txt +src/content/en/incidents/feed.xml: $(articles.en.incidents.sortdata) +src/content/en/incidents/index.htmllisting: src/content/en/incidents/sortdata.txt +src/content/en/incidents/index.htmllisting: $(articles.en.incidents.sortdata) +src/content/en/incidents/categories.htmllisting: src/content/en/incidents/sortdata.txt +src/content/en/incidents/categories.htmllisting: $(articles.en.incidents.sortdata) +src/content/en/incidents/categories.txt: src/content/en/incidents/sortdata.txt +src/content/en/incidents/categories.txt: $(articles.en.incidents.sortdata) +src/content/en/incidents/index.htmllisting src/content/en/incidents/categories.htmllisting: $(articles.en.incidents.indexentry) +src/content/en/incidents/categories.txt: $(articles.en.incidents.categorydata) +src/content/en/incidents/categories.txt src/content/en/incidents/feed.xml: $(articles.en.incidents.feedentry) +src/content/en/incidents/categories.htmllisting src/content/en/incidents/categories.xml: src/content/en/incidents/categories.txt +src/content/en/incidents/categories.xml.gz: src/content/en/incidents/categories.xml @@ -5,28 +5,51 @@ export LANG=POSIX.UTF-8 normalize() { - xargs realpath | - awk -vPWD="$PWD/" '{ print substr($0, length(PWD) + 1) }' | - sort + xargs realpath --relative-to=. | sort } pages() { - find src/pages/*/*.adoc -type f | normalize + find src/pages/*/*.adoc -type f | normalize } articles() { - find src/collections/*/*/ -type f -name '*.adoc' | normalize + find src/collections/*/*/*/ -type f -name '*.adoc' | normalize } -listings() { - find src/collections/*/index.adoc | normalize +slides() { + find src/slides/*/*/ -type f -name '*.adoc' | normalize +} + +indexes() { + find src/collections/*/*/index.adoc | normalize +} + +categories() { + grep -l '^:type: categories$' src/collections/*/*/*.adoc | normalize +} + +media() { + find src/content/ \( -type f -and \! -type l \) -and \( \ + -name '*.flac' -or \ + -name '*.ogg' -or \ + -name '*.webm' \ + \) +} + +tarballs() { + find src/content/ \( -type f -and \! -type l \) -and \( \ + -name '*.tar.gz' \ + \) } extras() { - find src/content/ -type f \ - -name '*.flac' -or \ - -name '*.webm' -or \ - -name '*.tar.gz' + media + tarballs +} + +listings() { + indexes + categories } files() { @@ -36,23 +59,34 @@ files() { } -pages | varlist 'pages.adoc' -articles | varlist 'articles.adoc' -listings | varlist 'listings.adoc' -listings | sed 's|/index\.adoc$|/categories.txt|' | varlist 'categories.txt' -listings | sed 's|/index\.adoc$|/feed.xml|' | varlist 'feeds.xml' -find src/content/img/ -name '*.svg' | varlist 'images.svg' -extras | varlist 'sources.extras' +pages | varlist 'pages.adoc' +articles | varlist 'articles.adoc' +slides | varlist 'slides.adoc' +categories | varlist 'categories.adoc' +indexes | varlist 'indexes.adoc' +indexes | sed 's|/index\.adoc$|/feed.xml|' | varlist 'feeds.xml' +find src/content/img/ -name '*.svg' | varlist 'images.svg' +media | varlist 'sources.media' +tarballs | varlist 'sources.tarballs' +extras | varlist 'sources.extras' +find po/*.po po/*.pot | varlist 'sources.po' -files | sed 's/^\(.*\)\.adoc$/\1.htmlbody\t\1.snippets\t\1.conf:\t\1.adoc/' -files | sed 's/^\(.*\)\.adoc$/\1.html:\t\1.conf\t\1.htmlbody/' +cat po/po4a.cfg | + awk '$1 == "[type:" && $2 == "asciidoc]" && $4 != "" && $0=$3' | + varlist 'po4a.in' + + +{ + files | sed 's/^\(.*\)\.adoc$/\1.html/' + files | sed 's/^\(.*\)\.adoc$/\1.snippets/' + slides | sed 's/^\(.*\)\.adoc$/\1.pdf/' + indexes | sed 's|^\(.*\)/index\.adoc$|\1/feed.xml|' +} | sed 's/^\(.*\)$/\1.gz:\t\1/' printf '\n' -files | sed 's/^\(.*\)\.adoc$/\1.html.gz:\t\1.html/' -files | sed 's/^\(.*\)\.adoc$/\1.snippets.gz:\t\1.snippets/' -listings | sed 's|^\(.*\)/index\.adoc$|\1/categories.xml.gz:\t\1/categories.xml|' -listings | sed 's|^\(.*\)/index\.adoc$|\1/feed.xml.gz:\t\1/feed.xml|' +files | sed 's/^\(.*\)\.adoc$/\1.htmlbody\t\1.snippets\t\1.conf:\t\1.adoc/' +files | sed 's/^\(.*\)\.adoc$/\1.html:\t\1.conf\t\1.htmlbody/' printf '\n' files | sed 's/^\(.*\)\.adoc$/\1.updatedat-check:\t\1.conf/' @@ -66,32 +100,71 @@ articles | sed 's/^\(.*\)\.adoc$/\1.categorydata:\t\1.conf/' printf '\n' listings | sed 's/^\(.*\)\.adoc$/\1.htmlheader\t\1.htmlfooter:\t\1.conf/' +listings | sed 's/^\(.*\)\.adoc$/\1.htmllisting:\t\1.conf/' listings | sed 's/^\(.*\)\.adoc$/\1.html:\t\1.htmlheader\t\1.htmlfooter/' listings | sed 's/^\(.*\)\.adoc$/\1.html:\t\1.htmllisting\t\1.htmlbody/' +printf '\n' + +media | sed 's/^\(.*\)$/\1.torrent:\t\1/' +printf '\n' -for colllink in src/collections/*; do +slides | sed 's/^\(.*\)\.adoc$/\1.ps:\t\1.adoc/' +slides | sed 's/^\(.*\)\.adoc$/\1.pdf:\t\1.ps/' +printf '\n' + + + +collectionentries() { + langlink="$1" + colllink="$2" + lang="$(basename "$langlink")" c="$(printf '%s' "$colllink" | normalize)" + plural="$(cat src/names/categories/"$lang".txt)" printf '\n\n' name="$(basename "$c")" - find "$c"/*/ -type f -name '*.adoc' | varlist "articles.$name.adoc" - art=articles # so things fit in 80 columns + art=articles."$lang" + find "$c"/*/ -type f -name '*.adoc' | varlist "$art.$name.adoc" echo "$art.$name.sortdata = \$($art.$name.adoc:.adoc=.sortdata)" echo "$art.$name.indexentry = \$($art.$name.adoc:.adoc=.indexentry)" echo "$art.$name.feedentry = \$($art.$name.adoc:.adoc=.feedentry)" echo "$art.$name.categorydata = \$($art.$name.adoc:.adoc=.categorydata)" - printf '%s/sortdata.txt:\tdeps.mk\n' "$c" - printf '\tprintf %s $(articles.%s.sortdata) > $@\n\n' "'%s\n'" "$name" + printf '\tprintf %s $(%s.%s.sortdata) > $@\n\n' "'%s\n'" "$art" "$name" + + listings=" + feed.xml + index.htmllisting + $plural.htmllisting + $plural.txt + " + for lst in $listings; do + printf '%s/%s:\t%s/sortdata.txt\n' "$c" "$lst" "$c" + printf '%s/%s:\t$(%s.%s.sortdata)\n' "$c" "$lst" "$art" "$name" + done + + printf '%s/index.htmllisting\t' "$c" + printf '%s/%s.htmllisting:\t' "$c" "$plural" + printf '$(%s.%s.indexentry)\n' "$art" "$name" + + printf '%s/%s.txt:\t' "$c" "$plural" + printf '$(%s.%s.categorydata)\n' "$art" "$name" + + printf '%s/%s.txt\t' "$c" "$plural" + printf '%s/feed.xml:\t' "$c" + printf '$(%s.%s.feedentry)\n' "$art" "$name" + + printf '%s/%s.htmllisting\t' "$c" "$plural" + printf '%s/%s.xml:\t' "$c" "$plural" + printf '%s/%s.txt\n' "$c" "$plural" + + printf '%s/%s.xml.gz:\t%s/%s.xml\n' "$c" "$plural" "$c" "$plural" +} - printf '%s/categories.txt\t%s/feed.xml\t%s/index.htmllisting:' \ - "$c" "$c" "$c" - printf '\t%s/sortdata.txt\t$(articles.%s.sortdata)\n' "$c" "$name" - printf '%s/index.htmllisting:\t$(articles.%s.indexentry)\n' "$c" "$name" - printf '%s/categories.txt:\t$(articles.%s.categorydata)\n' "$c" "$name" - printf '%s/categories.xml:\t%s/categories.txt\n' "$c" "$c" - printf '%s/categories.txt\t%s/feed.xml:\t$(articles.%s.feedentry)\n' \ - "$c" "$c" "$name" +for langlink in src/collections/*; do + for colllink in "$langlink"/*; do + collectionentries "$langlink" "$colllink" + done done diff --git a/po/en.po b/po/en.po new file mode 100644 index 0000000..32077e4 --- /dev/null +++ b/po/en.po @@ -0,0 +1,48 @@ +# English translations for PACKAGE package +# Copyright (C) 2025 Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# Automatically generated, 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2025-05-01 20:58-0300\n" +"PO-Revision-Date: 2025-05-01 20:50-0300\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. type: Plain text +#: src/headers/ref.txt:6 +msgid "" +"pricing.html\tPricing privacy.html\tPrivacy terms.html\tTerms about." +"html\tAbout blog/\tBlog incidents/\tIncidents" +msgstr "" +"pricing.html\tPricing privacy.html\tPrivacy terms.html\tTerms about." +"html\tAbout blog/\tBlog incidents/\tIncidents" + +#. type: Plain text +#: src/names/categories/ref.txt:1 +msgid "categories" +msgstr "" + +#. type: Plain text +#: src/names/category/ref.txt:1 +msgid "category" +msgstr "" + +#. type: Title = +#: src/content/en/about.adoc:1 +#, no-wrap +msgid "About" +msgstr "About" + +#. type: Title == +#: src/content/en/about.adoc:3 +#, no-wrap +msgid "It's a good service" +msgstr "It's a good service" diff --git a/po/note.txt b/po/note.txt new file mode 100644 index 0000000..45279a4 --- /dev/null +++ b/po/note.txt @@ -0,0 +1,5 @@ +PO4A-HEADER: mode=eof + + + +// Generated from po4a(1). diff --git a/po/papo.im.pot b/po/papo.im.pot new file mode 100644 index 0000000..ebc7ad0 --- /dev/null +++ b/po/papo.im.pot @@ -0,0 +1,46 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2025-05-01 20:58-0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. type: Plain text +#: src/headers/ref.txt:6 +msgid "" +"pricing.html\tPricing privacy.html\tPrivacy terms.html\tTerms " +"about.html\tAbout blog/\tBlog incidents/\tIncidents" +msgstr "" + +#. type: Plain text +#: src/names/categories/ref.txt:1 +msgid "categories" +msgstr "" + +#. type: Plain text +#: src/names/category/ref.txt:1 +msgid "category" +msgstr "" + +#. type: Title = +#: src/content/en/about.adoc:1 +#, no-wrap +msgid "About" +msgstr "" + +#. type: Title == +#: src/content/en/about.adoc:3 +#, no-wrap +msgid "It's a good service" +msgstr "" diff --git a/po/po4a.cfg b/po/po4a.cfg new file mode 100644 index 0000000..e6453e0 --- /dev/null +++ b/po/po4a.cfg @@ -0,0 +1,9 @@ +[options] --keep 0 --master-charset UTF-8 --localized-charset UTF-8 --addendum-charset UTF-8 + +[po_directory] po + +[type: text] src/headers/ref.txt $lang:src/headers/$lang.txt +[type: text] src/names/categories/ref.txt $lang:src/names/categories/$lang.txt +[type: text] src/names/category/ref.txt $lang:src/names/category/$lang.txt + +[type: asciidoc] src/content/en/about.adoc pt:src/content/pt/sobre.adoc add_$lang:po/note.txt diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..b409533 --- /dev/null +++ b/po/pt.po @@ -0,0 +1,46 @@ +# Portuguese translations for PACKAGE package +# Copyright (C) 2025 Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# Automatically generated, 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2025-05-01 20:58-0300\n" +"PO-Revision-Date: 2025-05-01 20:50-0300\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. type: Plain text +#: src/headers/ref.txt:6 +msgid "" +"pricing.html\tPricing privacy.html\tPrivacy terms.html\tTerms about." +"html\tAbout blog/\tBlog incidents/\tIncidents" +msgstr "" + +#. type: Plain text +#: src/names/categories/ref.txt:1 +msgid "categories" +msgstr "" + +#. type: Plain text +#: src/names/category/ref.txt:1 +msgid "category" +msgstr "" + +#. type: Title = +#: src/content/en/about.adoc:1 +#, no-wrap +msgid "About" +msgstr "" + +#. type: Title == +#: src/content/en/about.adoc:3 +#, no-wrap +msgid "It's a good service" +msgstr "" diff --git a/src/collections/blog b/src/collections/blog deleted file mode 120000 index 8c3a331..0000000 --- a/src/collections/blog +++ /dev/null @@ -1 +0,0 @@ -../content/blog
\ No newline at end of file diff --git a/src/collections/en/blog b/src/collections/en/blog new file mode 120000 index 0000000..973ecf5 --- /dev/null +++ b/src/collections/en/blog @@ -0,0 +1 @@ +../../content/en/blog
\ No newline at end of file diff --git a/src/collections/en/incidents b/src/collections/en/incidents new file mode 120000 index 0000000..024c5fb --- /dev/null +++ b/src/collections/en/incidents @@ -0,0 +1 @@ +../../content/en/incidents
\ No newline at end of file diff --git a/src/collections/incidents b/src/collections/incidents deleted file mode 120000 index 607e060..0000000 --- a/src/collections/incidents +++ /dev/null @@ -1 +0,0 @@ -../content/incidents
\ No newline at end of file diff --git a/src/content/about.adoc b/src/content/en/about.adoc index 8f8dd75..8f8dd75 100644 --- a/src/content/about.adoc +++ b/src/content/en/about.adoc diff --git a/src/content/blog/1970/01/01/launch.adoc b/src/content/en/blog/1970/01/01/launch.adoc index f82187d..f82187d 100644 --- a/src/content/blog/1970/01/01/launch.adoc +++ b/src/content/en/blog/1970/01/01/launch.adoc diff --git a/src/content/blog/2000/01/01/feature-ann.adoc b/src/content/en/blog/2000/01/01/feature-ann.adoc index c7c3cca..220a7ff 100644 --- a/src/content/blog/2000/01/01/feature-ann.adoc +++ b/src/content/en/blog/2000/01/01/feature-ann.adoc @@ -1,4 +1,5 @@ = Feature announcement +:categories: ann == New feature X diff --git a/src/content/en/blog/categories.adoc b/src/content/en/blog/categories.adoc new file mode 100644 index 0000000..feb64ff --- /dev/null +++ b/src/content/en/blog/categories.adoc @@ -0,0 +1,2 @@ += Articles by category +:type: categories diff --git a/src/content/blog/index.adoc b/src/content/en/blog/index.adoc index 075f77f..075f77f 100644 --- a/src/content/blog/index.adoc +++ b/src/content/en/blog/index.adoc diff --git a/src/content/incidents/2000/01/01/service-start.adoc b/src/content/en/incidents/2000/01/01/service-start.adoc index d5013c0..d5013c0 100644 --- a/src/content/incidents/2000/01/01/service-start.adoc +++ b/src/content/en/incidents/2000/01/01/service-start.adoc diff --git a/src/content/incidents/index.adoc b/src/content/en/incidents/index.adoc index 9d57213..9d57213 100644 --- a/src/content/incidents/index.adoc +++ b/src/content/en/incidents/index.adoc diff --git a/src/content/index.adoc b/src/content/en/index.adoc index 7bf7d54..7bf7d54 100644 --- a/src/content/index.adoc +++ b/src/content/en/index.adoc diff --git a/src/content/pricing.adoc b/src/content/en/pricing.adoc index 5318ba6..5318ba6 100644 --- a/src/content/pricing.adoc +++ b/src/content/en/pricing.adoc diff --git a/src/content/privacy.adoc b/src/content/en/privacy.adoc index a77b26c..a77b26c 100644 --- a/src/content/privacy.adoc +++ b/src/content/en/privacy.adoc diff --git a/src/content/en/slide/2011/11/11/test.adoc b/src/content/en/slide/2011/11/11/test.adoc new file mode 100644 index 0000000..e34479a --- /dev/null +++ b/src/content/en/slide/2011/11/11/test.adoc @@ -0,0 +1,10 @@ +--- +# Rollout, feature flag, experiment, operational toggle + +@Different use cases for backend, frontend and mobile + +--- +. +. +. +# "Feature flags" tend to come up when talking about continuous deployment diff --git a/src/content/terms.adoc b/src/content/en/terms.adoc index cecbc54..cecbc54 100644 --- a/src/content/terms.adoc +++ b/src/content/en/terms.adoc diff --git a/src/content/favicon.png b/src/content/favicon.png Binary files differnew file mode 100644 index 0000000..fdc9d9b --- /dev/null +++ b/src/content/favicon.png diff --git a/src/content/pt/sobre.adoc b/src/content/pt/sobre.adoc new file mode 100644 index 0000000..2d0d479 --- /dev/null +++ b/src/content/pt/sobre.adoc @@ -0,0 +1,7 @@ += About + +== It's a good service + + + +// Generated from po4a(1). diff --git a/src/content/public.asc b/src/content/public.asc.txt index e69de29..e69de29 100644 --- a/src/content/public.asc +++ b/src/content/public.asc.txt diff --git a/src/headers/en.txt b/src/headers/en.txt new file mode 100644 index 0000000..464fe1b --- /dev/null +++ b/src/headers/en.txt @@ -0,0 +1,2 @@ +pricing.html Pricing privacy.html Privacy terms.html Terms about.html About +blog/ Blog incidents/ Incidents diff --git a/src/headers/pt.txt b/src/headers/pt.txt new file mode 100644 index 0000000..464fe1b --- /dev/null +++ b/src/headers/pt.txt @@ -0,0 +1,2 @@ +pricing.html Pricing privacy.html Privacy terms.html Terms about.html About +blog/ Blog incidents/ Incidents diff --git a/src/headers.txt b/src/headers/ref.txt index 27f2ac3..27f2ac3 100644 --- a/src/headers.txt +++ b/src/headers/ref.txt diff --git a/src/linkonly-dirs.txt b/src/linkonly-dirs.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/linkonly-dirs.txt diff --git a/src/names/categories/en.txt b/src/names/categories/en.txt new file mode 100644 index 0000000..36e8f75 --- /dev/null +++ b/src/names/categories/en.txt @@ -0,0 +1 @@ +categories diff --git a/src/names/categories/pt.txt b/src/names/categories/pt.txt new file mode 100644 index 0000000..36e8f75 --- /dev/null +++ b/src/names/categories/pt.txt @@ -0,0 +1 @@ +categories diff --git a/src/names/categories/ref.txt b/src/names/categories/ref.txt new file mode 100644 index 0000000..36e8f75 --- /dev/null +++ b/src/names/categories/ref.txt @@ -0,0 +1 @@ +categories diff --git a/src/names/category/en.txt b/src/names/category/en.txt new file mode 100644 index 0000000..46e72f3 --- /dev/null +++ b/src/names/category/en.txt @@ -0,0 +1 @@ +category diff --git a/src/names/category/pt.txt b/src/names/category/pt.txt new file mode 100644 index 0000000..46e72f3 --- /dev/null +++ b/src/names/category/pt.txt @@ -0,0 +1 @@ +category diff --git a/src/names/category/ref.txt b/src/names/category/ref.txt new file mode 100644 index 0000000..46e72f3 --- /dev/null +++ b/src/names/category/ref.txt @@ -0,0 +1 @@ +category diff --git a/src/pages/en b/src/pages/en new file mode 120000 index 0000000..2d811cf --- /dev/null +++ b/src/pages/en @@ -0,0 +1 @@ +../content/en
\ No newline at end of file diff --git a/src/pages/pt b/src/pages/pt new file mode 120000 index 0000000..12d2087 --- /dev/null +++ b/src/pages/pt @@ -0,0 +1 @@ +../content/pt
\ No newline at end of file diff --git a/src/pages/root b/src/pages/root deleted file mode 120000 index efcdaa6..0000000 --- a/src/pages/root +++ /dev/null @@ -1 +0,0 @@ -../content
\ No newline at end of file diff --git a/src/slides/en b/src/slides/en new file mode 120000 index 0000000..5cbb4c2 --- /dev/null +++ b/src/slides/en @@ -0,0 +1 @@ +../content/en/slide
\ No newline at end of file diff --git a/src/static.conf b/src/static.conf index f2ec25f..b11a528 100644 --- a/src/static.conf +++ b/src/static.conf @@ -1,5 +1,6 @@ +export headers_dir=src/headers +export names_dir=src/names export root_dir=src/content -export header_links=src/headers.txt export list_addr='~euandreh/papoim@lists.sr.ht' export discussions_url_prefix='https://lists.sr.ht/~euandreh/papoim?search=' export sourcecode_url_prefix="$sourcecode_url/tree" diff --git a/src/symlinks.txt b/src/symlinks.txt new file mode 100644 index 0000000..19ba6d8 --- /dev/null +++ b/src/symlinks.txt @@ -0,0 +1,3 @@ +# "Official" redirections +index.html en/index.html +security.txt .well-known/security.txt |