]> Lady’s Gitweb - Shushe/commitdiff
Use colon as delimiter and hymin as recursive sigil
authorLady <redacted>
Tue, 16 Jan 2024 01:29:06 +0000 (20:29 -0500)
committerLady <redacted>
Thu, 18 Jan 2024 02:36:51 +0000 (21:36 -0500)
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.

GNUmakefile
lib/catalog2dependencies.xslt

index be1cf1a372bdb6fc6bd526419688b5a184252197..b306ff25ebdd85fc258a14542a75c36e69de645f 100644 (file)
@@ -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' '<?xml version=\042\061.0\042?>\n<script xmlns=\042http://www.w3.org/1999/xhtml\042 type=\042$(patsubst $1?type=%,%,$(filter $1?type=%,$(types)))\042><![CDATA['; $(CAT) $(call quote,$1) | $(TR) '\000\013\014' '\032\011\012' | $(SED) $$($(PRINTF) '%s%b' 's/]]>/]]]]><!\[CDATA\[>/g;s/\xEF\xBF\xBE/�/g;s/\xEF\xBF\xBF/�/g;$$!s/\r$$//g;s/\r/\n/g;$$!s/\xC2\x85$$//g;s/\xC2\x85/\n/g;s/\xE2\x80\xA8/\n/g;' 's/[\0001-\0010]/�/g;s/[\0016-\0037]/�/g'); $(PRINTF) '%s' ']]></script>')"
+override wrapplaintext = $(PRINTF) '%s\n' "$$($(PRINTF) '%b' '<?xml version=\042\061.0\042?>\n<script xmlns=\042http://www.w3.org/1999/xhtml\042 type=\042$(call typeoffile,$1)\042><![CDATA['; $(CAT) $(call quote,$1) | $(TR) '\000\013\014' '\032\011\012' | $(SED) $$($(PRINTF) '%s%b' 's/]]>/]]]]><!\[CDATA\[>/g;s/\xEF\xBF\xBE/�/g;s/\xEF\xBF\xBF/�/g;$$!s/\r$$//g;s/\r/\n/g;$$!s/\xC2\x85$$//g;s/\xC2\x85/\n/g;s/\xE2\x80\xA8/\n/g;' 's/[\0001-\0010]/�/g;s/[\0016-\0037]/�/g'); $(PRINTF) '%s' ']]></script>')"
 
 # ─ ¶ 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 ─────────────────────────────────────────────────
 
index b1e54a1f3d6cb02fdd7f35df66d4ddd1795a4345..3d36949fb237f05d123595931f394dfc79a0c3d1 100644 (file)
@@ -2,7 +2,7 @@
 <!--
 ⁌ ⛩️📰 书社 ∷ lib/catalog2dependencies.xslt
 
-© 2023 Lady [@ Lady’s Computer]
+© 2023–2024 Lady [@ Lady’s Computer]
 
 This Source Code Form is subject to the terms of the Mozilla Public License, v 2.0.
 If a copy of the M·P·L was not distributed with this file, You can obtain one at <https://mozilla.org/MPL/2.0/>.
@@ -98,7 +98,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                        <text>&#xA;</text>
                        <for-each select="exsl:node-set($dependencies)/书社:recursive-dependency">
                                <text>&#x9;</text>
-                               <text>!</text>
+                               <text>-</text>
                                <value-of select="."/>
                                <text>&#xA;</text>
                        </for-each>
This page took 0.031382 seconds and 4 git commands to generate.