scour icon indicating copy to clipboard operation
scour copied to clipboard

Unknown attribute cleaning.

Open kevincox opened this issue 2 years ago • 3 comments

It would be useful to have an option to remove attributes that aren't part of the SVG spec as they are added by many tools and editors.

Possible configurations would be:

  1. Remove anything not part of the SVG specs.
  2. Remove anything matching a pattern (ex: data-.*)
  3. Remove a specific list of attributes.

kevincox avatar Jun 20 '22 15:06 kevincox

@kevincox

  1. Is implemented in (i) for SVG1.1: https://github.com/RazrFalcon/svgcleaner/ --remove-nonsvg-attributes yes --remove-nonsvg-elements yes or (ii) for SVG2.0 simplification: https://github.com/RazrFalcon/resvg/tree/master/usvg or (iii) for file-size-reduction: https://github.com/svg/svgo or (iv) if you just want default settings: https://vecta.io/nano
  2. (a) Use a basic texteditor or (b) since data-* is not part of SVG1.1 specs, it would get removed in https://github.com/RazrFalcon/svgcleaner/ or (c) since it does not influence rendering https://github.com/RazrFalcon/resvg/tree/master/usvg will remove it.
  3. E.g. if you would like to remove all SystemLanguage=", search for this attribute in a texteditor and replace it by e.g. SystemLanguageDELETE=", then apply https://github.com/RazrFalcon/svgcleaner/ or https://github.com/RazrFalcon/resvg/tree/master/usvg and everything unknown is removed.

I think all three options might be dangerous breaking specific SVG-files. The first for example needs to know which element may have which attributes. e.g. writing-mode= is allowed in <text but not in <tspan , however most renderer (Chromium, Firefox, librsvg,...) apply it even if it is in tspan. Or flowRoot of SVG1.2, which is used by Inkscape, is not in SVG1.1 nor will it be in SVG2.0. So removing everything unknown is a SVG-version-dependent question.

Why do you want those features? Validating of the file? Reduction of File-size? Better source-code-readable? No private metadata? Reducing of rendering-errors? (Maybe provide an example, with input and desired output.)

@Developers: Sorry for pointing user to competitors, but I'm also recommending scour in other projects. Scour is imho the one with fewest bugs. I try to help Users with their problems.

JoKalliauer avatar Jun 21 '22 18:06 JoKalliauer

I think all three options might be dangerous breaking specific SVG-files.

It can be opt-in. For some people the risk of breakage is worth it.

however most renderer .. apply it even if it is in tspan

For cases like this I would recommend that option 1 from the original request keeps them as "defacto standards". But I'm not too bothered either way.

Why do you want those features?

For me I want reduction of file-size and no private metadata.

kevincox avatar Jun 21 '22 18:06 kevincox

It can be opt-in. For some people the risk of breakage is worth it.

I agree on that (implementing unstable beta-featurs as opt-in), however developers generally don't implement it. Maybe because that will lead to many bug-reports. And your feature-request is imho not something easy to implement.

For me I want reduction of file-size and no private metadata.

Scour is imho more the conservative approach if you want to minimize file-size I recommend to use -https://github.com/RazrFalcon/svgcleaner/ -https://github.com/svg/svgo or https://jakearchibald.github.io/svgomg/ serial.

JoKalliauer avatar Jun 21 '22 21:06 JoKalliauer