From: Lady Date: Tue, 16 Jan 2024 01:29:06 +0000 (-0500) Subject: Use colon as delimiter and hymin as recursive sigil X-Git-Tag: 0.3.0~5 X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/6972774d7db8027876c937abf5a7a5b0420d7965?ds=sidebyside Use colon as delimiter and hymin as recursive sigil Colon is already forbidden in paths by the make syntax, and initial hyphen is forbidden because it is confusable with command‐line options. Re·use these for other semantics to hopefully reduce the number of forbidden characters in filenames. --- diff --git a/GNUmakefile b/GNUmakefile index be1cf1a..b306ff2 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -213,7 +213,7 @@ sourcefiles := $(filter-out $(sourceincludes),$(shell $(FIND) $(FINDOPTS) $(SRCD # Figure out the file type of each source file and source include. ifneq ($(wildcard $(BUILDDIR)/magic.mgc),) -override types := $(shell $(SED) 's/^ *//;s/ *$$//;s/ {2,}/ /g' <<< $(call quote,$(sourcefiles) $(sourceincludes)) | $(TR) ' ' '\n' | $(FILE) -m $(call quote,$(BUILDDIR)/magic.mgc) --mime-type --separator '`' --files-from - | $(SED) 's/` */?type=/g') +override types := $(shell $(SED) 's/^ *//;s/ *$$//;s/ {2,}/ /g' <<< $(call quote,$(sourcefiles) $(sourceincludes)) | $(TR) ' ' '\n' | $(FILE) -m $(call quote,$(BUILDDIR)/magic.mgc) --mime-type --separator ':' --files-from - | $(SED) 's/: */:/g') endif # Get the list of supported plaintext file types from the parser. @@ -223,7 +223,7 @@ endif # (callable) Get all of the files (source and includes) which have the # given types. -override filesoftype = $(foreach type,$1,$(patsubst %?type=$(type),%,$(filter %?type=$(type),$(types)))) +override filesoftype = $(foreach type,$1,$(patsubst %:$(type),%,$(filter %:$(type),$(types)))) # Build up collections of various file types. override xmlfiles := $(call filesoftype,$(XMLTYPES)) @@ -231,7 +231,7 @@ override plaintextfiles := $(filter-out $(xmlfiles),$(call filesoftype,$(plainte override assetfiles := $(filter-out $(xmlfiles) $(plaintextfiles),$(sourcefiles) $(sourceincludes)) # (callable) Get the types of the given files. -override typeoffile = $(patsubst $(foreach file,$1,$(file)?type=%),%,$(filter $(foreach file,$1,$(file)?type=%),$(types))) +override typeoffile = $(patsubst $(foreach file,$1,$(file):%),%,$(filter $(foreach file,$1,$(file):%),$(types))) # (callable) Get the identifier for the given transform. override id = $(or $(shell $(XMLLINT) --xpath '/*/*[local-name()="id" and namespace-uri()="urn:fdc:ladys.computer:20231231:Shu1She4"]/text()[1]' $1),$(basename $(notdir $1))) @@ -245,14 +245,14 @@ override includepath = $(firstword $(foreach directory,$(INCLUDEDIR),$(if $(filt # (callable) Get base64 data u·r·i’s for the given files. override datauri = $(foreach file,$1,data:$(call typeoffile,$(file));base64,$(shell $(UUENCODE) -m -r $(call quote,$(file)) _ | tr -d ' \n')) -# (callable) Get local leiris for the given files. -override localuri = $(foreach file,$1,$(if $(filter $(file),$(sourceincludes)),about:shushe?include=$(call includepath,$(file)),about:shushe?source=$(call sourcepath,$(file)))) - # Pair each source file and include with its local u·r·i. -override sourcelocalpair = $(foreach file,$(sourcefiles) $(sourceincludes),$(file)`$(call localuri,$(file))) +override sourcelocalpair = $(foreach file,$(sourcefiles) $(sourceincludes),$(if $(filter $(file),$(sourceincludes)),$(file):about:shushe?include=$(call includepath,$(file)),$(file):about:shushe?source=$(call sourcepath,$(file)))) + +# (callable) Get local uris for the given files. +override localuri = $(foreach file,$1,$(patsubst $(file):%,%,$(filter $(file):%,$(sourcelocalpair)))) -# (callable) Get the source files for the given local leiris. -override sourcefile = $(foreach local,$1,$(patsubst %`$(local),%,$(filter %`$(local),$(sourcelocalpair)))) +# (callable) Get the source files for the given local uris. +override sourcefile = $(foreach local,$1,$(patsubst %:$(local),%,$(filter %:$(local),$(sourcelocalpair)))) # Adds a requirement on `$(BUILDDIR)/.update-types´ if the file is # present. @@ -267,28 +267,28 @@ override typeupdates := $(wildcard $(BUILDDIR)/.update-types) override parsed = $(foreach file,$1,$(if $(filter $(file),$(sourceincludes)),$(BUILDDIR)/includes/$(call includepath,$(file)),$(BUILDDIR)/sources/$(call sourcepath,$(file)))) # Pair each source file and include with its parsed location. -override sourceparsedpair = $(foreach file,$(sourcefiles) $(sourceincludes),$(file)`$(call parsed,$(file))) +override sourceparsedpair = $(foreach file,$(sourcefiles) $(sourceincludes),$(file):$(call parsed,$(file))) # (callable) Get the source files for the given parsed file. -override unparsed = $(foreach file,$1,$(patsubst %`$(file),%,$(filter %`$(file),$(sourceparsedpair)))) +override unparsed = $(foreach file,$1,$(patsubst %:$(file),%,$(filter %:$(file),$(sourceparsedpair)))) ifneq ($(wildcard $(BUILDDIR)/dependencies),) # Pair each file with a list of dependencies for it. -override dependenciesforfile := $(foreach file,$(sourcefiles),$(file)`$(subst $(space),`,$(shell $(CAT) $(call quote,$(BUILDDIR)/dependencies) | $(SED) $(call quote,/^$(call sedesc,$(call localuri,$(file)))$$/$(comma)/^[^ ]/!d;/^ /!d;s/^ //)))) +override dependenciesforfile := $(foreach file,$(sourcefiles),$(file):$(subst $(space),:,$(shell $(CAT) $(call quote,$(BUILDDIR)/dependencies) | $(SED) $(call quote,/^$(call sedesc,$(call localuri,$(file)))$$/$(comma)/^[^ ]/!d;/^ /!d;s/^ //)))) # (callable) Get the list of dependency leiris for the given source # files. # -# Recursive dependencies are marked with a leading `!´. -override dependencyuris = $(foreach file,$1,$(subst `, ,$(patsubst $(file)`%,%,$(filter $(file)`%,$(dependenciesforfile))))) +# Recursive dependencies are marked with a leading `-´. +override dependencyuris = $(foreach file,$1,$(subst :, ,$(patsubst $(file):%,%,$(filter $(file):%,$(dependenciesforfile))))) # (callable) Get the list of recursive dependencies for the given # source files. -override recursives = $(foreach uri,$(filter !%,$(call dependencyuris,$1)),$(call sourcefile,$(patsubst !%,%,$(uri)))) +override recursives = $(foreach uri,$(filter -%,$(call dependencyuris,$1)),$(call sourcefile,$(patsubst -%,%,$(uri)))) # (callable) Get the list of (nonrecursive) dependencies for the given # source files. -override dependencies = $(foreach uri,$(filter-out !%,$(call dependencyuris,$1)),$(call sourcefile,$(uri))) +override dependencies = $(foreach uri,$(filter-out -%,$(call dependencyuris,$1)),$(call sourcefile,$(uri))) endif # Collect all files with recursive dependencies. @@ -303,10 +303,10 @@ override compilablefiles := $(filter-out $(assetfiles) $(recursivefiles),$(sourc override compiled = $(foreach file,$1,$(BUILDDIR)/public/$(call sourcepath,$(file))) # Pair each source file and include with its compiled location. -override sourcecompiledpair = $(foreach file,$(sourcefiles) $(sourceincludes),$(file)`$(call compiled,$(file))) +override sourcecompiledpair = $(foreach file,$(sourcefiles) $(sourceincludes),$(file):$(call compiled,$(file))) # (callable) Get the source files for the given compiled file. -override uncompiled = $(foreach file,$1,$(patsubst %`$(file),%,$(filter %`$(file),$(sourcecompiledpair)))) +override uncompiled = $(foreach file,$1,$(patsubst %:$(file),%,$(filter %:$(file),$(sourcecompiledpair)))) # (callable) Get the installed locations for the given source files. override installed = $(foreach file,$1,$(DESTDIR)/$(call sourcepath,$(file))) @@ -319,7 +319,7 @@ override ensuredirectory = if $(TEST) ! -d $(call quote,$1); then $(MKDIR) -p $( # (callable) Sanitize and wrap the provided plaintext file in # X·M·L, printing to `stdout´. -override wrapplaintext = $(PRINTF) '%s\n' "$$($(PRINTF) '%b' '\n')" +override wrapplaintext = $(PRINTF) '%s\n' "$$($(PRINTF) '%b' '\n')" # ─ ¶ Phony Targets ─────────────────────────────────────────────────── @@ -343,12 +343,12 @@ install: $(call installed,$(recursivefiles) $(compilablefiles) $(filter $(source # List all source files and includes and their computed types. list: - $(silent)$(PRINTF) '%b' $(call quote,$(foreach file,$(sort $(sourcefiles)) $(sort $(sourceincludes)),\0033[1m$(file)\0033[22m`$(call typeoffile,$(file))`[\0033[3m$(if $(filter $(file),$(xmlfiles)),xml,$(if $(filter $(file),$(plaintextfiles)),text,asset))$(if $(filter $(file),$(sourceincludes)), include,)\0033[23m]$(if $(call dependencies,$(file))$(call recursives,$(file)), $(strip $(foreach recursive,$(call recursives,$(file)),\0033[93;41m•`Recursive`Dependency:\0033[39;49m`$(recursive)) $(foreach dependency,$(call dependencies,$(file)),\0033[2m•`Dependency:\0033[22m`$(dependency)))) )) | $(TR) ' `' '\n ' + $(silent)$(PRINTF) '%b' $(call quote,$(foreach file,$(sort $(sourcefiles)) $(sort $(sourceincludes)),\0033[1m$(file)\0033[22m:$(call typeoffile,$(file)):[\0033[3m$(if $(filter $(file),$(xmlfiles)),xml,$(if $(filter $(file),$(plaintextfiles)),text,asset))$(if $(filter $(file),$(sourceincludes)),:include,)\0033[23m]$(if $(call dependencies,$(file))$(call recursives,$(file)), $(strip $(foreach recursive,$(call recursives,$(file)),\0033[93;41m•:Recursive:Dependency:\0033[39;49m:$(recursive)) $(foreach dependency,$(call dependencies,$(file)),\0033[2m•:Dependency:\0033[22m:$(dependency)))) )) | $(TR) ' :' '\n ' # Raise an error when attempting to build any files with recursive # dependencies. $(call compiled,$(recursivefiles)): $(BUILDDIR)/public/%: - @$(PRINTF) '%b\n' $(call quote,\0033[93;41mError:\0033[39;49m `$*´ has recursive dependencies:\n$(subst `, ,$(subst $(space),$(newline),$(foreach recursive,$(call recursives,$(SRCDIR)/$*),•`$(patsubst $(SRCDIR)/%,%,$(recursive)))))) && false + @$(PRINTF) '%b\n' $(call quote,\0033[93;41mError:\0033[39;49m `$*´ has recursive dependencies:\n$(subst :, ,$(subst $(space),$(newline),$(foreach recursive,$(call recursives,$(SRCDIR)/$*),•:$(patsubst $(SRCDIR)/%,%,$(recursive)))))) && false # ─ ¶ Special Targets ───────────────────────────────────────────────── diff --git a/lib/catalog2dependencies.xslt b/lib/catalog2dependencies.xslt index b1e54a1..3d36949 100644 --- a/lib/catalog2dependencies.xslt +++ b/lib/catalog2dependencies.xslt @@ -2,7 +2,7 @@