From f042a2414815046bd0661799710056f9e9124b4d Mon Sep 17 00:00:00 2001 From: Gabriel Darbord <78592838+Gabriel-Darbord@users.noreply.github.com> Date: Tue, 10 Nov 2026 20:04:27 +0100 Subject: [PATCH] Keep Zinc-Character-Encoding-Core free of later packages ZnPercentEncoder read the #urlAsIri option from ZnCurrentOptions in Zinc-Resource-Meta-Core, which itself requires Zinc-Character-Encoding-Core, and the package extended SocketStream from Network-Kernel. The encoder now carries the IRI choice, set from the option by ZnResourceMetaUtils and ZnDataUrl, and the SocketStream extensions move to Zinc-HTTP. Co-Authored-By: Claude Opus 5.5 --- .../ZnPercentEncoder.class/instance/urlAsIri..st | 6 ++++++ .../ZnPercentEncoder.class/instance/urlAsIri.st | 7 +++++-- .../ZnPercentEncoder.class/properties.json | 3 ++- .../SocketStream.extension/instance/rawStream.st | 2 +- .../SocketStream.extension/instance/wrappedStream.st | 2 +- .../SocketStream.extension/properties.json | 0 .../ZnDataUrl.class/instance/parseFrom..st | 1 + .../ZnDataUrl.class/instance/printOn..st | 1 + .../ZnResourceMetaUtils.class/class/decodePercent..st | 1 + .../class/decodePercentForQuery..st | 1 + .../class/encodePercent.safeSet.encoder..st | 1 + 11 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/instance/urlAsIri..st rename repository/{Zinc-Character-Encoding-Core.package => Zinc-HTTP.package}/SocketStream.extension/instance/rawStream.st (86%) rename repository/{Zinc-Character-Encoding-Core.package => Zinc-HTTP.package}/SocketStream.extension/instance/wrappedStream.st (78%) rename repository/{Zinc-Character-Encoding-Core.package => Zinc-HTTP.package}/SocketStream.extension/properties.json (100%) diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/instance/urlAsIri..st b/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/instance/urlAsIri..st new file mode 100644 index 000000000..161a4a6c8 --- /dev/null +++ b/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/instance/urlAsIri..st @@ -0,0 +1,6 @@ +initialize-release +urlAsIri: boolean + "When boolean is true, I encode as an IRI, leaving non-ASCII characters as they are, and accept them when decoding. + Else I percent-encode everything outside my safe set, and reject non-ASCII characters when decoding." + + urlAsIri := boolean \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/instance/urlAsIri.st b/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/instance/urlAsIri.st index 826eac9ef..b5d15d9f4 100644 --- a/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/instance/urlAsIri.st +++ b/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/instance/urlAsIri.st @@ -1,3 +1,6 @@ -private +accessing urlAsIri - ^ ZnCurrentOptions at: #urlAsIri \ No newline at end of file + "Return if I encode as an IRI, leaving non-ASCII characters as they are, and accept them when decoding. + ZnUrl and friends set this from the #urlAsIri ZnOptions, which this package cannot see." + + ^ urlAsIri ifNil: [ urlAsIri := false ] \ No newline at end of file diff --git a/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/properties.json b/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/properties.json index 95cdd52a3..d3f875a1a 100644 --- a/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/properties.json +++ b/repository/Zinc-Character-Encoding-Core.package/ZnPercentEncoder.class/properties.json @@ -8,7 +8,8 @@ "instvars" : [ "characterEncoder", "safeSet", - "decodePlusAsSpace" + "decodePlusAsSpace", + "urlAsIri" ], "name" : "ZnPercentEncoder", "type" : "normal" diff --git a/repository/Zinc-Character-Encoding-Core.package/SocketStream.extension/instance/rawStream.st b/repository/Zinc-HTTP.package/SocketStream.extension/instance/rawStream.st similarity index 86% rename from repository/Zinc-Character-Encoding-Core.package/SocketStream.extension/instance/rawStream.st rename to repository/Zinc-HTTP.package/SocketStream.extension/instance/rawStream.st index a527c7086..3e59f3eb7 100644 --- a/repository/Zinc-Character-Encoding-Core.package/SocketStream.extension/instance/rawStream.st +++ b/repository/Zinc-HTTP.package/SocketStream.extension/instance/rawStream.st @@ -1,4 +1,4 @@ -*Zinc-Character-Encoding-Core +*Zinc-HTTP rawStream "Answer the innermost stream wrapped by the receiver, e.g. a raw binary file stream, socket stream, or regular Read/WriteStream. diff --git a/repository/Zinc-Character-Encoding-Core.package/SocketStream.extension/instance/wrappedStream.st b/repository/Zinc-HTTP.package/SocketStream.extension/instance/wrappedStream.st similarity index 78% rename from repository/Zinc-Character-Encoding-Core.package/SocketStream.extension/instance/wrappedStream.st rename to repository/Zinc-HTTP.package/SocketStream.extension/instance/wrappedStream.st index 1b11b96a2..08c6b3e12 100644 --- a/repository/Zinc-Character-Encoding-Core.package/SocketStream.extension/instance/wrappedStream.st +++ b/repository/Zinc-HTTP.package/SocketStream.extension/instance/wrappedStream.st @@ -1,4 +1,4 @@ -*Zinc-Character-Encoding-Core +*Zinc-HTTP wrappedStream "Answer the stream that the receiver wraps. Since this the base stream, answer nil" diff --git a/repository/Zinc-Character-Encoding-Core.package/SocketStream.extension/properties.json b/repository/Zinc-HTTP.package/SocketStream.extension/properties.json similarity index 100% rename from repository/Zinc-Character-Encoding-Core.package/SocketStream.extension/properties.json rename to repository/Zinc-HTTP.package/SocketStream.extension/properties.json diff --git a/repository/Zinc-Resource-Meta-Core.package/ZnDataUrl.class/instance/parseFrom..st b/repository/Zinc-Resource-Meta-Core.package/ZnDataUrl.class/instance/parseFrom..st index 6915858b5..6fbeda1aa 100644 --- a/repository/Zinc-Resource-Meta-Core.package/ZnDataUrl.class/instance/parseFrom..st +++ b/repository/Zinc-Resource-Meta-Core.package/ZnDataUrl.class/instance/parseFrom..st @@ -20,4 +20,5 @@ parseFrom: string ifFalse: [ ZnPercentEncoder new characterEncoder: mediaType charSet asZnCharacterEncoder; + urlAsIri: (ZnCurrentOptions at: #urlAsIri); decode: data ] \ No newline at end of file diff --git a/repository/Zinc-Resource-Meta-Core.package/ZnDataUrl.class/instance/printOn..st b/repository/Zinc-Resource-Meta-Core.package/ZnDataUrl.class/instance/printOn..st index bf699dfee..832620c26 100644 --- a/repository/Zinc-Resource-Meta-Core.package/ZnDataUrl.class/instance/printOn..st +++ b/repository/Zinc-Resource-Meta-Core.package/ZnDataUrl.class/instance/printOn..st @@ -11,4 +11,5 @@ printOn: stream stream nextPut: $,. ZnPercentEncoder new characterEncoder: mediaType charSet asZnCharacterEncoder; + urlAsIri: (ZnCurrentOptions at: #urlAsIri); encode: data readStream to: stream ] \ No newline at end of file diff --git a/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/decodePercent..st b/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/decodePercent..st index 0c16aba7b..01772633e 100644 --- a/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/decodePercent..st +++ b/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/decodePercent..st @@ -2,4 +2,5 @@ converting decodePercent: string ^ ZnPercentEncoder new decodePlusAsSpace: false; + urlAsIri: (ZnCurrentOptions at: #urlAsIri); decode: string \ No newline at end of file diff --git a/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/decodePercentForQuery..st b/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/decodePercentForQuery..st index 538a87a43..d9b8253e7 100644 --- a/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/decodePercentForQuery..st +++ b/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/decodePercentForQuery..st @@ -2,4 +2,5 @@ converting decodePercentForQuery: string ^ ZnPercentEncoder new decodePlusAsSpace: true; + urlAsIri: (ZnCurrentOptions at: #urlAsIri); decode: string \ No newline at end of file diff --git a/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/encodePercent.safeSet.encoder..st b/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/encodePercent.safeSet.encoder..st index f1ae51c73..54d3c50f4 100644 --- a/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/encodePercent.safeSet.encoder..st +++ b/repository/Zinc-Resource-Meta-Core.package/ZnResourceMetaUtils.class/class/encodePercent.safeSet.encoder..st @@ -3,4 +3,5 @@ encodePercent: string safeSet: safeSet encoder: encoder ^ ZnPercentEncoder new characterEncoder: encoder; safeSet: (self perform: safeSet); + urlAsIri: (ZnCurrentOptions at: #urlAsIri); encode: string \ No newline at end of file