diff --git a/.github/workflows/xep-validation.yml b/.github/workflows/xep-validation.yml index 34ee09cd..76731bf5 100644 --- a/.github/workflows/xep-validation.yml +++ b/.github/workflows/xep-validation.yml @@ -31,5 +31,11 @@ jobs: if ! tools/validate-xep0001-conformance.sh "$xep"; then result=1 fi + if [[ ${xep} == xep-* ]]; then + echo Checking ${xep} by invoking \"make .${xep}.check.ok\" + if ! make ".${xep}.check.ok"; then + result=1 + fi + fi done exit $result diff --git a/.gitignore b/.gitignore index e8200919..f8b40f4d 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,5 @@ Session.vim /tools/xeps-email.conf /tmp/ /pr-worktree/ + +.*.xml.check.ok diff --git a/Makefile b/Makefile index 051bc7bd..0eb413e9 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,7 @@ xep_pdfs=$(patsubst %.xml,$(OUTDIR)/%.pdf,$(xeps)) xep_refs=$(patsubst xep-%.xml, $(REFSDIR)/reference.XSF.XEP-%.xml, $(xeps)) xep_examples=$(patsubst xep-%.xml, $(EXAMPLESDIR)/%.xml, $(xeps)) +all_xep_check_ok=$(patsubst %.xml, .%.xml.check.ok, $(xeps)) .PHONY: help help: @@ -46,6 +47,7 @@ help: @echo ' refs - build all IETF refs' @echo ' html - build all XEPs' @echo ' inbox-html - build all ProtoXEPs' + @echo ' check - check all XEPs for errors' @echo ' clean - recursively unlink the build tree' @echo ' preview - builds html whenever an XEP changes (requires inotify-tools)' @echo ' examples - extract all examples' @@ -82,6 +84,9 @@ refs: $(xep_refs) .PHONY: examples examples: $(xep_examples) +.PHONY: check +check: $(all_xep_check_ok) + .PHONY: xep-% xep-%: $(OUTDIR)/xep-%.html $(REFSDIR)/reference.XSF.XEP-%.xml $(OUTDIR)/xep-%.pdf $(EXAMPLESDIR)/%.xml; @@ -106,30 +111,24 @@ $(EXAMPLESDIR)/%.xml: xep-%.xml $(XMLDEPS) examples.xsl | $(EXAMPLESDIR) $(REFSDIR)/reference.XSF.XEP-%.xml: xep-%.xml $(XMLDEPS) ref.xsl | $(REFSDIR) xsltproc --path $(CURDIR) ref.xsl "$<" > "$@" && echo "Finished building $@" -$(xep_htmls): $(OUTDIR)/xep-%.html: xep-%.xml $(XMLDEPS) $(HTMLDEPS) | $(OUTDIR) +.%.xml.check.ok: %.xml xmllint --nonet --noout --noent --loaddtd --valid "$<" - # Check for non-data URIs - ! xmllint --nonet --noout --noent --loaddtd --xpath "//img/@src[not(starts-with(., 'data:'))]" $< 2>/dev/null && true + # Check for non-data URIs, the result set of the XPath expression below should be empty + # Disabled for now, see + # https://github.com/xsf/xeps/issues/1316 and https://gitlab.gnome.org/GNOME/libxml2/-/issues/673 + # xmllint --loaddtd --xpath "//img/@src[not(starts-with(., 'data:'))]" $< > /dev/null + touch $@ - # Actually build the HTML +$(xep_htmls): $(OUTDIR)/xep-%.html: xep-%.xml $(XMLDEPS) $(HTMLDEPS) | $(OUTDIR) xsltproc --path $(CURDIR) --param htmlbase "$(if $(findstring inbox,$<),'../','./')" xep.xsl "$<" > "$@" && echo "Finished building $@" $(proto_xep_htmls): $(OUTDIR)/inbox/%.html: inbox/%.xml $(XMLDEPS) $(proto_HTMLDEPS) | $(OUTDIR) - xmllint --nonet --noout --noent --loaddtd --valid "$<" - # Check for non-data URIs - ! xmllint --nonet --noout --noent --loaddtd --xpath "//img/@src[not(starts-with(., 'data:'))]" $< 2>/dev/null && true - - # Actually build the HTML xsltproc --path $(CURDIR) --param htmlbase "$(if $(findstring inbox,$<),'../','./')" xep.xsl "$<" > "$@" && echo "Finished building $@" $(OUTDIR)/xmpp.pdf $(OUTDIR)/xmpp-text.pdf: | $(OUTDIR) cp "resources/$(notdir $@)" "$@" $(OUTDIR)/%.pdf: %.xml $(XMLDEPS) $(TEXMLDEPS) - xmllint --nonet --noout --noent --loaddtd --valid "$<" - # Check for non-data URIs - ! xmllint --nonet --noout --noent --loaddtd --xpath "//img/@src[not(starts-with(., 'data:'))]" $< 2>/dev/null && true - xsltproc --path $(CURDIR) xep2texml.xsl "$<" > "$(@:.pdf=.tex.xml)" texml -e utf8 "$(@:.pdf=.tex.xml)" "$(@:.pdf=.tex)" sed -i -e 's|\([\s"]\)\([^"]http://[^ "]*\)|\1\\path{\2}|g' \ diff --git a/xep-0484.xml b/xep-0484.xml index 07027158..c57ac914 100644 --- a/xep-0484.xml +++ b/xep-0484.xml @@ -32,6 +32,7 @@
  • Promoted to Experimental.
  • + 0.0.1 2022-10-19