From: Lady Date: Sat, 25 Jan 2025 20:09:34 +0000 (-0500) Subject: Add DATAOPTS X-Git-Tag: 1.0.1^0 X-Git-Url: https://git.ladys.computer/Shushe/commitdiff_plain/refs/heads/current?ds=inline;hp=af35f96d77cd8ae1b6fb5332509ba115f07fefb5 Add DATAOPTS This is a bit hacky, but probably is still the simplest and most elegant solution to the problem of ⛩📰 书社 needing to use different variables for different stages of a two‐stage build. Note that the core variables used to manage the two‐stage process (`INCLUDEDIR`, `BUILDDIR`, `FINDRULES`, `FINDINCLUDERULES`, and `MODE`) can _not_ be overridden thru this (or any) mechanism. This commit also adds a new callable variable, `varquote`, for escaping dollar signs when passing them thru to submakes. --- diff --git a/GNUmakefile b/GNUmakefile index 3161ecd..80e1c4c 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023, 2024 Lady +# SPDX-FileCopyrightText: 2023, 2024, 2025 Lady # SPDX-License-Identifier: MPL-2.0 SHELL = /bin/sh @@ -188,6 +188,11 @@ EXTRAFINDINCLUDERULES := FINDRULES := '!' '(' '(' -name '[.-]*' -a '!' -name '.' -o -name '*[][*?:|$$%\#\\; ]*' -o -name '*[)]' ')' -a -prune ')'$(if $(EXTRAFINDRULES), -a '(' $(EXTRAFINDRULES) ')',) FINDINCLUDERULES := $(FINDRULES)$(if $(EXTRAFINDINCLUDERULES), -a '(' $(EXTRAFINDINCLUDERULES) ')',) +# Options to use when calling Make for the first build of a two‐stage build. +# +# This can be used to override variables which are only applicable to the second build. +DATAOPTS := + # File extensions which indicate files in `SRCDIR´ which should be built as part of the first, rather than second, stage of the two‐stage `MODE´. DATAEXT := rdf @@ -197,6 +202,46 @@ DATAEXT := rdf EXTRAFINDDATARULES := FINDDATARULES := -name '.' $(foreach ext,$(DATAEXT), -o -name '$(subst ','"'"',[!.]*.$(ext))')$(if $(EXTRAFINDDATARULES), -a '(' $(EXTRAFINDDATARULES) ')',) +# A semicolon‐separated list of regular expressions which paths should be required to match when finding files. +FINDFILTERONLY := + +# A semicolon‐separated list of regular expressions for paths which should be filtered out when finding files. +FINDFILTEROUT := + +# A semicolon‐separated list of regular expressions for paths which paths should be required to match when finding includes. +# +# This is generally only useful when `SRCDIR´ and `INCLUDEDIR´ point to the same location. +# In that situation, this variable can be used to select certain files as includes, leaving the others to be recognized as sources instead. +# +# Otherwise, appropriately constructing `FINDFILTERONLY´ to look at the base directory of the files it finds should be sufficient. +FINDINCLUDEFILTERONLY := + +# A semicolon‐separated list of regular expressions for paths which should be filtered out in addition to those in `FINDFILTEROUT´ when finding includes. +# +# This is generally only useful when `SRCDIR´ and `INCLUDEDIR´ point to the same location. +# In that situation, this variable can be used to exclude certain files from being recognized as includes, which will make them recognized as sources instead. +# +# Otherwise, appropriately constructing `FINDFILTEROUT´ to look at the base directory of the files it finds should be sufficient. +FINDINCLUDEFILTEROUT := + +# If not empty, the regular expression provided by `FINDFILTERONLY´ is an extended regular expression. +FINDFILTERONLYEXTENDED := + +# If not empty, the regular expression provided by `FINDFILTEROUT´ is an extended regular expression. +# +# By default, this matches `FINDFILTERONLYEXTENDED´ +FINDFILTEROUTEXTENDED := $(FINDFILTERONLYEXTENDED) + +# If not empty, the regular expression provided by `FINDFILTEROUT´ is an extended regular expression. +# +# By default, this matches `FINDFILTERONLYEXTENDED´ +FINDINCLUDEFILTERONLYEXTENDED := $(FINDFILTERONLYEXTENDED) + +# If not empty, the regular expression provided by `FINDINCLUDEFILTEROUT´ is an extended regular expression. +# +# By default, this matches `FINDFILTEROUTEXTENDED´ +FINDINCLUDEFILTEROUTEXTENDED := $(and $(FINDFILTERONLYEXTENDED),$(FINDFILTEROUTEXTENDED),1) + # The list of magic files to use when determining media types. # # Some are provided as part of this repository, but you can add more if you need different media type detection. @@ -275,7 +320,7 @@ export LC_ALL # Posix timezone information. TZ := UTC0 -export UTC0 +export TZ # The default target for this makefile. .DEFAULT_GOAL := all @@ -311,6 +356,9 @@ override not = $(if $1,,1) # (callable) Quote the given string for use within shell calls. override quote = '$(subst ','"'"',$1)' +# (callable) Quote the given string for use defining a variable to send to a submake. +override varquote = $(subst $$,$$$$,$(call quote,$1)) + # The command to use for percent‐decoding. override perdeccmd := $(SED) 's/|/%7C/g;s/[\]/%5C/g;s/%[0123456789ABCDEFabcdef]\{2\}/|&|/g' | $(TR) '|' '\n' | $(SED) '/^%[0123456789ABCDEFabcdef]\{2\}$$/!s/%/|%25|/' | $(TR) '|' '\n' | $(AWK) '$$0!~/%/{printf "%s",$$0}/%/{d="0123456789ABCDEF";v=substr(toupper($$0),2,2);printf "\\%04o",(index(d,substr(v,1,1))-1)*16+index(d,substr(v,2,1))-1}' | $(SED) $(call quote,s/'/'"'"'/g;s/^/'/;s/$$/'/;$$!s/$$/\\/) | $(XARGS) -E '' $(PRINTF) '%b' @@ -354,7 +402,7 @@ override notbuilding := $(and $(filter help clean,$(MAKECMDGOALS)),$(call not,$( # If `$(notbuilding)´ is non·empty, this variable produces no result to avoid unnecessary work. # # ☡ This variable creates at least one subshell every time it is computed. -override diffprereqs = $(if $(notbuilding),,$(and $(subst $(shell $(CAT) $(call quote,$(BUILDDIR)/lastprereqs/$1) 2>>/dev/null || :),,$2),$(shell $(call ensuredirectory,$(BUILDDIR)/lastprereqs) && $(PRINTF) '%s\n' $(call quote,$2) >|$(BUILDDIR)/lastprereqs/$1),)$2 $(BUILDDIR)/lastprereqs/$1) +override diffprereqs = $(if $(notbuilding),,$(and $(or $(wildcard $(BUILDDIR)/lastprereqs/$1),$(shell $(TOUCH) $(call quote,$(BUILDDIR)/lastprereqs/$1)),1),$(subst $(shell $(CAT) $(call quote,$(BUILDDIR)/lastprereqs/$1) 2>>/dev/null || :),,$2),$(shell $(call ensuredirectory,$(BUILDDIR)/lastprereqs) && $(PRINTF) '%s\n' $(call quote,$2) >|$(call quote,$(BUILDDIR)/lastprereqs/$1)),)$2 $(BUILDDIR)/lastprereqs/$1) # ─ ¶ Recipe Variable Definitions ───────────────────────────────────── @@ -385,7 +433,7 @@ override id = $(XMLLINT) --noent --nonet --xpath '/*/*[local-name()="id" and nam override extracttext = $(PRINTF) '%s' '' | $(XSLTPROC) --nonet --novalid --nomkdir --nowrite - $(call quote,$1) # (callable) Process the provided transformation result and output the result to the provided location, given the provided relative path. -override processresultto = if $(call xpath,/*[local-name()="raw-text" and namespace-uri()="urn:fdc:ladys.computer:20231231:Shu1She4"],$1); then $(call extracttext,$1) >|$(call quote,$2); elif $(call xpath,/*[local-name()="base64-binary" and namespace-uri()="urn:fdc:ladys.computer:20231231:Shu1She4"],$1); then { $(PRINTF) '%s\n' 'begin-base64 644 -'; $(call extracttext,$1) | $(TR) -d '\t\n\f\r '; $(PRINTF) '\n%s\n' '===='; } | $(UUDECODE) -o /dev/stdout >|$(call quote,$2); elif $(call xpath,/*[local-name()="archive" and namespace-uri()="urn:fdc:ladys.computer:20231231:Shu1She4"],$1); then $(MAKE) -f $(makefile) NAME=$(call quote,$3) SRC=$(call quote,$1) BUILDDIR=$(call quote,$(BUILDDIR)/archive/$3) DESTDIR=$(call quote,$(patsubst %/,%,$(dir $2))) MODE='urn:fdc:ladys.computer:20231231:Shu1She4:mode:archive' $(call quote,$2); else $(FINALIZE) $(call quote,$1) >|$(call quote,$2); fi +override processresultto = if $(call xpath,/*[local-name()="raw-text" and namespace-uri()="urn:fdc:ladys.computer:20231231:Shu1She4"],$1); then $(call extracttext,$1) >|$(call quote,$2); elif $(call xpath,/*[local-name()="base64-binary" and namespace-uri()="urn:fdc:ladys.computer:20231231:Shu1She4"],$1); then { $(PRINTF) '%s\n' 'begin-base64 644 -'; $(call extracttext,$1) | $(TR) -d '\t\n\f\r '; $(PRINTF) '\n%s\n' '===='; } | $(UUDECODE) -o /dev/stdout >|$(call quote,$2); elif $(call xpath,/*[local-name()="archive" and namespace-uri()="urn:fdc:ladys.computer:20231231:Shu1She4"],$1); then $(MAKE) -f $(makefile) NAME=$(call varquote,$3) SRC=$(call varquote,$1) BUILDDIR=$(call varquote,$(BUILDDIR)/archive/$3) DESTDIR=$(call varquote,$(patsubst %/,%,$(dir $2))) MODE='urn:fdc:ladys.computer:20231231:Shu1She4:mode:archive' $(call varquote,$2); else $(FINALIZE) $(call quote,$1) >|$(call quote,$2); fi # ━ § BEGIN DEFAULT MAKE·FILE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ @@ -403,10 +451,10 @@ override attresc = $(subst ",",$(call xmlesc,$1)) override sedesc = $(subst /,[/],$(subst $$,\$$,$(subst *,\*,$(subst .,\.,$(subst [,\[,$(subst ^,\^,$(subst \,\\,$1))))))) # (overridable) Collect all of the applicable includes from the includes directory. -sourceincludes := $(if $(and $(INCLUDEDIR),$(wildcard $(INCLUDEDIR))),$(patsubst ./%,%,$(shell $(FIND) $(foreach dir,$(INCLUDEDIR),$(call quote,$(dir))) '(' $(FINDINCLUDERULES) ')' -a -type f -a -print)),) +sourceincludes := $(foreach dir,$(INCLUDEDIR),$(and $(dir),$(wildcard $(dir)),$(patsubst ./%,%,$(shell $(FIND) $(call quote,$(dir)) '(' $(FINDINCLUDERULES) ')' -a -type f -a -print$(and $(FINDFILTERONLY),$(space)| $(GREP)$(and $(FINDFILTERONLYEXTENDED),$(space)-E) $(foreach filter,$(shell $(PRINTF) '%s\n' $(call quote,$(FINDFILTERONLY)) | $(TR) ' ;' '; '),-e $(call quote,$(subst ;, ,$(filter)))))$(and $(FINDINCLUDEFILTERONLY),$(space)| $(GREP)$(and $(FINDINCLUDEFILTERONLYEXTENDED),$(space)-E) $(foreach filter,$(shell $(PRINTF) '%s\n' $(call quote,$(FINDINCLUDEFILTERONLY)) | $(TR) ' ;' '; '),-e $(call quote,$(subst ;, ,$(filter)))))$(and $(FINDFILTEROUT),$(space)| $(GREP)$(and $(FINDFILTEROUTEXTENDED),$(space)-E) -v $(foreach filter,$(shell $(PRINTF) '%s\n' $(call quote,$(FINDFILTEROUT)) | $(TR) ' ;' '; '),-e $(call quote,$(subst ;, ,$(filter)))))$(and $(FINDINCLUDEFILTEROUT),$(space)| $(GREP)$(and $(FINDINCLUDEFILTEROUTEXTENDED),$(space)-E) -v $(foreach filter,$(shell $(PRINTF) '%s\n' $(call quote,$(FINDINCLUDEFILTEROUT)) | $(TR) ' ;' '; '),-e $(call quote,$(subst ;, ,$(filter))))))))) # (overridable) Collect all of the applicable source files from the source directory, removing any which are also includes. -sourcefiles := $(if $(and $(SRCDIR),$(wildcard $(SRCDIR))),$(filter-out $(sourceincludes),$(patsubst ./%,%,$(shell $(FIND) $(foreach dir,$(SRCDIR),$(call quote,$(dir))) '(' $(FINDRULES) ')' -a -type f -a -print)))) +sourcefiles := $(filter-out $(sourceincludes),$(foreach dir,$(SRCDIR),$(and $(dir),$(wildcard $(dir)),$(patsubst ./%,%,$(shell $(FIND) $(call quote,$(dir)) '(' $(FINDRULES) ')' -a -type f -a -print$(and $(FINDFILTERONLY),$(space)| $(GREP)$(and $(FINDFILTERONLYEXTENDED),$(space)-E) $(foreach filter,$(shell $(PRINTF) '%s\n' $(call quote,$(FINDFILTERONLY)) | $(TR) ' ;' '; '),-e $(call quote,$(subst ;, ,$(filter)))))$(and $(FINDFILTEROUT),$(space)| $(GREP)$(and $(FINDFILTEROUTEXTENDED),$(space)-E) -v $(foreach filter,$(shell $(PRINTF) '%s\n' $(call quote,$(FINDFILTEROUT)) | $(TR) ' ;' '; '),-e $(call quote,$(subst ;, ,$(filter)))))))))) # Figure out the file type of each source file and source include. ifneq ($(wildcard $(BUILDDIR)/magic.mgc),) @@ -575,7 +623,7 @@ listout : # Destroy installed files. uninstall : - $(foreach file,$(installablefiles),$(if $(wildcard $(call installed,$(file))),$(silent)$(PRINTF) '%s\n' $(call quote,Removing …)$(newline)$(silent)$(RM) -f $(call quote,$(call installed,$(file)))$(newline),)) + $(foreach file,$(installablefiles),$(if $(wildcard $(call installed,$(file))),$(silent)$(PRINTF) '%s\n' $(call quote,Removing …)$(newline)$(silent)$(RM) -f -R $(call quote,$(call installed,$(file)))$(newline),)) # Raise an error when attempting to build any files with recursive dependencies. $(call built,$(recursivefiles)) : @@ -649,13 +697,13 @@ $(BUILDDIR)/transform.xslt : $(BUILDDIR)/transform.catalog $(BUILDDIR)/metadata # • When the metadata of ⹐source files they depend on⹑ change. # # This is to reduce the number of needless regenerations of files with no substantial change. -$(call compiled,$(compilablefiles)) : $(BUILDDIR)/results/% : $$(call parsed,$$(call uncompiled,$$@)) $$(call parsed,$$(call dependencies,$$(call uncompiled,$$@))) $(BUILDDIR)/transform.catalog $(TRANSFORMLIBS) $$(call metadata,$$(call dependencies,$$(call uncompiled,$$@))) +$(call compiled,$(compilablefiles)) : $(BUILDDIR)/results/% : $$(call parsed,$$(call uncompiled,$$@)) $$(call parsed,$$(call dependencies,$$(call uncompiled,$$@))) $(BUILDDIR)/transform.catalog $(THISDIR)/lib/catalog2transform.xslt $(TRANSFORMLIBS) $$(call metadata,$$(call dependencies,$$(call uncompiled,$$@))) $(call inform,$(PRINTF) '%s\n' $(call quote,Compiling …) >&2) $(silent)$(call ensuredirectory,$(dir $@)) $(silent)$(XSLTPROC) --nonet --novalid --nomkdir --nowrite --stringparam METADATA 'metadata' --stringparam BUILDTIME $$($(DATE) -u '+%Y-%m-%dT%H:%M:%SZ') --stringparam IDENTIFIER $(call quote,$(call localuri,$(call uncompiled,$@)))$(if $(THISREV), --stringparam THISREV $(call quote,$(THISREV)),)$(if $(SRCREV), --stringparam SRCREV $(call quote,$(SRCREV)),) $(call quote,$(BUILDDIR)/transform.xslt) $(call quote,$<) >|$(call quote,$@) # Create the final files from the compiled results (or error in the case of recursive ones). -$(call built,$(compilablefiles)) : $(BUILDDIR)/public/% : $(BUILDDIR)/results/% +$(call built,$(compilablefiles)) : $(BUILDDIR)/public/% : $(BUILDDIR)/results/% $(THISDIR)/lib/archive2extractor.xslt $(call inform,$(PRINTF) '%s\n' $(call quote,Building …) >&2) $(silent)$(call ensuredirectory,$(dir $@)) $(silent)$(RM) -f -R $(call quote,$@) @@ -746,7 +794,7 @@ else ifeq ($(MODE),urn:fdc:ladys.computer:20231231:Shu1She4:mode:initial) # ─ ¶ Non‐Recipe Variable Definitions ───────────────────────────────── # Non·empty if this is a two‐step build. -override twostep := $(if $(DATADIR),$(shell if $(TEST) -d $(call quote,$(DATADIR)); then $(PRINTF) '%s\n' '1'; fi),) +override twostep := $(if $(DATADIR),$(call not,$(shell for dir in $(foreach dir,$(DATADIR),$(call quote,$(dir))); do if $(TEST) '!' -d "$$dir"; then $(PRINTF) '%s\n' '0'; fi; done)),) # Pair each source magic file with its location in the build directory. override magicpair := $(foreach magicfile,$(MAGIC),$(magicfile)|$(BUILDDIR)/magic/$(call namehash,$(magicfile))) @@ -768,10 +816,10 @@ ifeq ($(twostep),) shusheopts := MODE='urn:fdc:ladys.computer:20231231:Shu1She4:mode:default' else # (overridable) Options to use when calling ⛩📰 书社 the first time. -shushedataopts := INCLUDEDIR=$(call quote,$(DATADIR)) BUILDDIR=$(call quote,$(BUILDDIR)/data) FINDRULES=$(subst $$,$$$$,$(call quote,$(FINDRULES) -a '(' $(FINDDATARULES) ')')) FINDINCLUDERULES=$(subst $$,$$$$,$(call quote,$(FINDINCLUDERULES))) MODE='urn:fdc:ladys.computer:20231231:Shu1She4:mode:default' +shushedataopts := $(and $(DATAOPTS),$(DATAOPTS)$(space))INCLUDEDIR=$(call varquote,$(DATADIR)) BUILDDIR=$(call varquote,$(BUILDDIR)/data) FINDRULES=$(call varquote,$(FINDRULES) -a '(' $(FINDDATARULES) ')') FINDINCLUDERULES=$(call varquote,$(FINDINCLUDERULES)) MODE='urn:fdc:ladys.computer:20231231:Shu1She4:mode:default' # (overridable) Options to use when calling ⛩📰 书社 the second time. -shushesiteopts := INCLUDEDIR=$(call quote,$(INCLUDEDIR) $(BUILDDIR)/data/public) BUILDDIR=$(call quote,$(BUILDDIR)/site) FINDRULES=$(subst $$,$$$$,$(call quote,$(FINDRULES) -a '!' '(' $(FINDDATARULES) ')')) FINDINCLUDERULES=$(subst $$,$$$$,$(call quote,$(FINDINCLUDERULES))) MODE='urn:fdc:ladys.computer:20231231:Shu1She4:mode:default' +shushesiteopts := INCLUDEDIR=$(call varquote,$(INCLUDEDIR) $(BUILDDIR)/data/public) BUILDDIR=$(call varquote,$(BUILDDIR)/site) FINDRULES=$(call varquote,$(FINDRULES) -a '!' '(' $(FINDDATARULES) ')') FINDINCLUDERULES=$(call varquote,$(FINDINCLUDERULES)) MODE='urn:fdc:ladys.computer:20231231:Shu1She4:mode:default' endif # ─ ¶ Recipe Variable Definitions ───────────────────────────────────── @@ -807,7 +855,7 @@ clean : ifneq ($(twostep),) # Build the data and remove outdated data files. data : $(BUILDDIR)/data.out - $(silent)$(FIND) $(call quote,$(BUILDDIR)/data/public) '!' -exec $(GREP) -F -q -x '{}' $(call quote,$<) ';' -a '(' -type d -o -print ')' | $(xargsmultiquote) | $(XARGS) -E '' $(RM) + $(silent)$(FIND) $(call quote,$(BUILDDIR)/data/public) '!' '(' -exec $(GREP) -F -q -x '{}' $(call quote,$<) ';' -a -prune ')' -a '(' -type d -o -print ')' | $(xargsmultiquote) | $(XARGS) -E '' $(RM) endif # Provide help. diff --git a/README.markdown b/README.markdown index af78725..70a9730 100644 --- a/README.markdown +++ b/README.markdown @@ -1,5 +1,5 @@ # ⛩📰 书社 @@ -307,6 +307,12 @@ The following additional variables can be used to control the behaviour default, to enable additional rules without overriding the existing ones. +- **`DATAOPTS`:** + Additional options to use when calling Make during the first stage of a two‐stage build using `DATADIR`. + + This can be used to override variables which are only applicable during the second stage. + Note that when supplying this variable on the shell, it will need to be double‐quoted. + - **`DATAEXT`:** A list of file extensions which signify “data” files during a two‐stage build using `DATADIR`. @@ -319,6 +325,32 @@ The following additional variables can be used to control the behaviour default, to enable additional rules without overriding the existing ones. +- **`FINDFILTERONLY`:** + A semicolon‐separated list of regular expressions, at least one of which the paths for sources and includes are required to match, unless empty (default: empty). + +- **`FINDFILTEROUT`:** + A semicolon‐separated list of regular expressions, each of which matches paths that should _not_ be considered sources or includes (default: empty). + +- **`FINDINCLUDEFILTERONLY`:** + A semicolon‐separated list of regular expressions, at least one of which the paths for includes are required to match, unless empty (default: empty). + + Note that only paths which already match `FINDFILTERONLY` are considered. + +- **`FINDINCLUDEFILTEROUT`:** + A semicolon‐separated list of regular expressions, each of which matches paths that should _not_ be considered includes, but may still be considered sources (default: empty). + +- **`FINDFILTERONLYEXTENDED`:** + If non·empty, `FINDFILTERONLY` is an extended regular expression; otherwise, it is basic (default: empty). + +- **`FINDFILTEROUTEXTENDED`:** + If non·empty, `FINDFILTEROUT` is an extended regular expression; otherwise, it is basic (default: matches `FINDFILTERONLYEXTENDED`). + +- **`FINDINCLUDEFILTERONLYEXTENDED`:** + If non·empty, `FINDINCLUDEFILTERONLY` is an extended regular expression; otherwise, it is basic (default: matches `FINDFILTERONLYEXTENDED`). + +- **`FINDINCLUDEFILTEROUTEXTENDED`:** + If non·empty, `FINDINCLUDEFILTEROUT` is an extended regular expression; otherwise, it is basic (default: `1` if either `FINDFILTEROUTEXTENDED` or `FINDINCLUDEFILTERONLYEXTENDED` is non·empty). + - **`PARSERS`:** A white·space‐separated list of parsers to use (default: `$(THISDIR)/parsers/*.xslt`). diff --git a/lib/archive2extractor.xslt b/lib/archive2extractor.xslt index b07b734..f9c8bdf 100644 --- a/lib/archive2extractor.xslt +++ b/lib/archive2extractor.xslt @@ -1,12 +1,12 @@ + ]> - + @@ -237,9 +238,9 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one - + - + @@ -248,9 +249,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one - + - + + + + generator + + @@ -271,15 +277,19 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one - - - - + + + + - + + + + + - - + + diff --git a/parsers/plain.xslt b/parsers/plain.xslt index 01e6f8d..3430526 100644 --- a/parsers/plain.xslt +++ b/parsers/plain.xslt @@ -11,14 +11,19 @@ SPDX-License-Identifier: MPL-2.0 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 . --> + +]> <书社:id>urn:fdc:ladys.computer:20231231:Shu1She4:plain.xslt diff --git a/parsers/record-jar.xslt b/parsers/record-jar.xslt index abaf08c..b58505d 100644 --- a/parsers/record-jar.xslt +++ b/parsers/record-jar.xslt @@ -11,11 +11,14 @@ SPDX-License-Identifier: MPL-2.0 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 . --> + +]> urn:fdc:ladys.computer:20231231:Shu1She4:record-jar.xslt diff --git a/parsers/tsv.xslt b/parsers/tsv.xslt index 5b3cc68..90e156e 100644 --- a/parsers/tsv.xslt +++ b/parsers/tsv.xslt @@ -11,11 +11,14 @@ SPDX-License-Identifier: MPL-2.0 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 . --> + +]> - + - - + + - + + + col + - + - - - + + + @@ -61,9 +67,9 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one - + - + @@ -74,16 +80,16 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one - + - + - + - - + + diff --git a/transforms/asset.xslt b/transforms/asset.xslt index 2b43595..89f1475 100644 --- a/transforms/asset.xslt +++ b/transforms/asset.xslt @@ -13,11 +13,12 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one --> + ]> urn:fdc:ladys.computer:20231231:Shu1She4:asset.xslt