From 9e357b1bbd811254206848f9b9e9894c576f8b05 Mon Sep 17 00:00:00 2001 From: Sebastian Frey Date: Fri, 21 Feb 2025 22:27:29 +0100 Subject: [PATCH 1/2] fix: support spaces as separator for vendor-option graphic-margin --- .../pattern_polygon_alternative_margin.sld | 37 +++++++++++++++++++ src/SldStyleParser.geoserver.spec.ts | 6 +++ src/SldStyleParser.ts | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 data/slds/geoserver/pattern_polygon_alternative_margin.sld diff --git a/data/slds/geoserver/pattern_polygon_alternative_margin.sld b/data/slds/geoserver/pattern_polygon_alternative_margin.sld new file mode 100644 index 00000000..329d93bb --- /dev/null +++ b/data/slds/geoserver/pattern_polygon_alternative_margin.sld @@ -0,0 +1,37 @@ + + + + + Pattern polygon + + + pattern_polygon + Pattern polygon + Polygon with spaced purple circle symbols + + + Polygon with spaced purple circle symbols + Polygon with spaced purple circle symbols + + 4 6 2 3 + + + + + circle + + #880088 + + + 6 + + + + + + + + + diff --git a/src/SldStyleParser.geoserver.spec.ts b/src/SldStyleParser.geoserver.spec.ts index e611580d..67f2a4f5 100644 --- a/src/SldStyleParser.geoserver.spec.ts +++ b/src/SldStyleParser.geoserver.spec.ts @@ -185,6 +185,12 @@ describe('SldStyleParser implements StyleParser', () => { expect(geoStylerStyle).toBeDefined(); expect(geoStylerStyle).toEqual(pattern_polygon); }); + it('can read the geoserver pattern_polygon_alternative_margin.sld', async () => { + const sld = fs.readFileSync('./data/slds/geoserver/pattern_polygon_alternative_margin.sld', 'utf8'); + const { output: geoStylerStyle } = await styleParser.readStyle(sld); + expect(geoStylerStyle).toBeDefined(); + expect(geoStylerStyle).toEqual(pattern_polygon); + }); }); describe('#writeStyle', () => { diff --git a/src/SldStyleParser.ts b/src/SldStyleParser.ts index 7d3af4e3..98b24466 100644 --- a/src/SldStyleParser.ts +++ b/src/SldStyleParser.ts @@ -1001,7 +1001,7 @@ export class SldStyleParser implements StyleParser { if (this.withGeoServerVendorOption) { const graphicFillPadding = getVendorOptionValue(sldSymbolizer, 'graphic-margin'); if (!isNil(graphicFillPadding)) { - fillSymbolizer.graphicFillPadding = graphicFillPadding.split(',').map(numberExpression); + fillSymbolizer.graphicFillPadding = graphicFillPadding.split(/[,\s]/).map(numberExpression); } } if (!isNil(color)) { From fe8db5b55daa6c9db2a0951fafcc06c43b154b75 Mon Sep 17 00:00:00 2001 From: Sebastian Frey Date: Mon, 24 Feb 2025 15:15:44 +0100 Subject: [PATCH 2/2] fix: join graphic-margin values with spaces for GeoServer vendor option --- src/SldStyleParser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SldStyleParser.ts b/src/SldStyleParser.ts index 98b24466..9b5089e5 100644 --- a/src/SldStyleParser.ts +++ b/src/SldStyleParser.ts @@ -2559,7 +2559,7 @@ export class SldStyleParser implements StyleParser { const fillArray: any[] = []; const graphicFillPadding = fillSymbolizer.graphicFillPadding; if (graphicFillPadding) { - this.pushGeoServerVendorOption(polygonSymbolizer, 'graphic-margin', `${graphicFillPadding}`); + this.pushGeoServerVendorOption(polygonSymbolizer, 'graphic-margin', graphicFillPadding.join(' ')); } polygonSymbolizer.push({ [Fill]: fillArray }); if (fillCssParameters.length > 0) {