mirror of
https://github.com/PapirusDevelopmentTeam/papirus-icon-theme.git
synced 2024-10-19 09:40:47 -04:00
86a45e66ce
* _clean_attrs and _clean_style_attr delete more default values * convert.sh now creates directories that needed
217 lines
6.2 KiB
Sed
217 lines
6.2 KiB
Sed
#!/bin/sed -rf
|
|
#
|
|
# Written in 2016 by Sergei Eremenko <https://github.com/SmartFinn>
|
|
#
|
|
# To the extent possible under law, the author(s) have dedicated all copyright
|
|
# and related and neighboring rights to this software to the public domain
|
|
# worldwide. This software is distributed without any warranty.
|
|
#
|
|
# You should have received a copy of the CC0 Public Domain Dedication along
|
|
# with this software. If not, see
|
|
# <http://creativecommons.org/publicdomain/zero/1.0/>.
|
|
#
|
|
# Description:
|
|
# This script removes unused properties and removes properties with default
|
|
# values from style attributes.
|
|
# Details https://www.w3.org/TR/SVG/styling.html
|
|
#
|
|
# Get CSS defaults from Inkscape:
|
|
# sed -e '/^$/d' -e '/NO.DEFAULT/d' -e 's/"//g' \
|
|
# /usr/share/inkscape/attributes/css_defaults \
|
|
# | awk -F" - " '{printf "s/%s:%s;//gI\n", $1,$2}'
|
|
#
|
|
# Usage:
|
|
# sed -r -i -f _clean_style_attr.sed FILE...
|
|
|
|
/style=/ {
|
|
|
|
# add a trailing semicolon for secure matching
|
|
s/style="([^"]+[^;])"/style="\1;"/gI
|
|
|
|
# delete properties with default values
|
|
s/alignment-baseline:auto;//gI
|
|
s/backface-visibility:visible;//gI
|
|
s/baseline-shift:baseline;//gI
|
|
s/block-progression:tb;//gI
|
|
s/clip:auto;//gI
|
|
s/clip-path:none;//gI
|
|
s/clip-rule:nonzero;//gI
|
|
s/color-interpolation:sRGB;//gI
|
|
s/color-interpolation-filters:linearRGB;//gI
|
|
s/color-profile:auto;//gI
|
|
s/color-rendering:auto;//gI
|
|
s/cursor:auto;//gI
|
|
s/direction:ltr;//gI
|
|
s/display:inline;//gI
|
|
s/dominant-baseline:auto;//gI
|
|
s/enable-background:accumulate;//gI
|
|
s/fill:black;//gI
|
|
s/fill-opacity:1;//gI
|
|
s/fill-rule:nonzero;//gI
|
|
s/filter:none;//gI
|
|
s/flood-color:black;//gI
|
|
s/flood-opacity:1;//gI
|
|
s/font-feature-settings:normal;//gI
|
|
s/font-size:medium;//gI
|
|
s/font-size-adjust:none;//gI
|
|
s/font-stretch:normal;//gI
|
|
s/font-style:normal;//gI
|
|
s/font-variant:normal;//gI
|
|
s/font-variant-alternates:normal;//gI
|
|
s/font-variant-caps:normal;//gI
|
|
s/font-variant-east-asian:normal;//gI
|
|
s/font-variant-ligatures:normal;//gI
|
|
s/font-variant-numeric:normal;//gI
|
|
s/font-variant-position:normal;//gI
|
|
s/font-weight:normal;//gI
|
|
s/glyph-orientation-horizontal:0deg;//gI
|
|
s/glyph-orientation-vertical:auto;//gI
|
|
s/image-rendering:auto;//gI
|
|
s/isolation:auto;//gI
|
|
s/kerning:auto;//gI
|
|
s/letter-spacing:normal;//gI
|
|
s/lighting-color:white;//gI
|
|
s/marker:none;//gI
|
|
s/marker-end:none;//gI
|
|
s/marker-mid:none;//gI
|
|
s/marker-start:none;//gI
|
|
s/mask:none;//gI
|
|
s/mix-blend-mode:normal;//gI
|
|
s/([^-])opacity:1;/\1/gI
|
|
s/overflow:hidden;//gI
|
|
s/paint-order:normal;//gI
|
|
s/perspective:none;//gI
|
|
s/pointer-events:visiblePainted;//gI
|
|
s/shape-inside:auto;//gI
|
|
s/shape-margin:0;//gI
|
|
s/shape-outside:auto;//gI
|
|
s/shape-padding:none;//gI
|
|
s/shape-rendering:auto;//gI
|
|
s/solid-color:#000000;//gI
|
|
s/solid-opacity:1;//gI
|
|
s/stop-color:black;//gI
|
|
s/stop-opacity:1;//gI
|
|
s/stroke:none;//gI
|
|
s/stroke-dasharray:none;//gI
|
|
s/stroke-dashoffset:0;//gI
|
|
s/stroke-linecap:butt;//gI
|
|
s/stroke-linejoin:miter;//gI
|
|
s/stroke-miterlimit:4;//gI
|
|
s/stroke-opacity:1;//gI
|
|
s/stroke-width:1;//gI
|
|
s/text-align:start;//gI
|
|
s/text-anchor:start;//gI
|
|
s/text-decoration-line:none;//gI
|
|
s/text-decoration-style:solid;//gI
|
|
s/text-decoration:none;//gI
|
|
s/text-indent:0;//gI
|
|
s/text-orientation:mixed;//gI
|
|
s/text-rendering:auto;//gI
|
|
s/text-transform:none;//gI
|
|
s/transform:none;//gI
|
|
s/transform-style:flat;//gI
|
|
s/unicode-bidi:normal;//gI
|
|
s/vector-effect:none;//gI
|
|
s/visibility:visible;//gI
|
|
s/white-space:normal;//gI
|
|
s/word-spacing:normal;//gI
|
|
s/writing-mode:lr-tb;//gI
|
|
|
|
# delete properties with nonsense values
|
|
s/fill-opacity:[1-9][0-9.]*;//gI
|
|
s/font-family:(sans|sans-serif);//gI
|
|
s/line-height:normal;//gI
|
|
s/([^-])opacity:[1-9][0-9.]*;/\1/gI
|
|
s/overflow:visible;//gI
|
|
s/shape-padding:0;//gI
|
|
s/solid-color:(#000|#000000|black);//gI
|
|
s/solid-opacity:[1-9][0-9.]*;//gI
|
|
s/stroke-opacity:[1-9][0-9.]*;//gI
|
|
s/text-decoration-color:(#000|#000000|black|currentColor);//gI
|
|
|
|
# delete Inkscape properties
|
|
/-inkscape-/ {
|
|
s/-inkscape-[^;"]+;//gI
|
|
}
|
|
|
|
# delete 'fill- *' properties if fill equal none
|
|
/fill[:=]"?none/ {
|
|
s/fill-rule:[^;"]+;//gI
|
|
s/fill-opacity:[^;"]+;//gI
|
|
}
|
|
|
|
# delete a fill property if it has the default value and fill attribute not exist
|
|
/fill="[^"]/! {
|
|
s/fill:(#000|#000000|black);//gI
|
|
}
|
|
|
|
# delete a color property if currentColor not exists and fill has a value
|
|
/currentColor/! {
|
|
s/([^-])color:[^;"]+;/\1/gI
|
|
}
|
|
|
|
# delete 'stroke- *' properties if an object doesn't have a stroke
|
|
/stroke[:=]/! {
|
|
s/stroke-width:[^;"]+;//gI
|
|
s/stroke-linecap:[^;"]+;//gI
|
|
s/stroke-linejoin:[^;"]+;//gI
|
|
s/stroke-miterlimit:[^;"]+;//gI
|
|
s/stroke-dasharray:[^;"]+;//gI
|
|
s/stroke-dashoffset:[^;"]+;//gI
|
|
s/stroke-opacity:[^;"]+;//gI
|
|
}
|
|
|
|
# delete unused properties from non-container elements
|
|
/<(a|defs|glyph|g|marker|mask|missing-glyph|pattern|svg|switch|symbol|use)/! {
|
|
s/enable-background:[^;"]+;//gI
|
|
}
|
|
|
|
# delete unused properties from non-text content elements
|
|
/<(altGlyph|textPath|text|tref|tspan|flowRoot|flowPara|flowSpan|a|defs|glyph|g|marker|mask|missing-glyph|pattern|svg|switch|symbol|use)/! {
|
|
s/alignment-baseline:[^;"]+;//gI
|
|
s/baseline-shift:[^;"]+;//gI
|
|
s/block-progression:[^;"]+;//gI
|
|
s/direction:[^;"]+;//gI
|
|
s/dominant-baseline:[^;"]+;//gI
|
|
s/font:[^;"]+;//gI
|
|
s/font-family:[^;"]+;//gI
|
|
s/font-feature-settings:[^;"]+;//gI
|
|
s/font-size-adjust:[^;"]+;//gI
|
|
s/font-size:[^;"]+;//gI
|
|
s/font-stretch:[^;"]+;//gI
|
|
s/font-style:[^;"]+;//gI
|
|
s/font-variant-alternates:[^;"]+;//gI
|
|
s/font-variant-caps:[^;"]+;//gI
|
|
s/font-variant-ligatures:[^;"]+;//gI
|
|
s/font-variant-numeric:[^;"]+;//gI
|
|
s/font-variant-position:[^;"]+;//gI
|
|
s/font-variant:[^;"]+;//gI
|
|
s/font-weight:[^;"]+;//gI
|
|
s/glyph-orientation-horizontal:[^;"]+;//gI
|
|
s/glyph-orientation-vertical:[^;"]+;//gI
|
|
s/kerning:[^;"]+;//gI
|
|
s/letter-spacing:[^;"]+;//gI
|
|
s/line-height:[^;"]+;//gI
|
|
s/text-align:[^;"]+;//gI
|
|
s/text-anchor:[^;"]+;//gI
|
|
s/text-decoration-color:[^;"]+;//gI
|
|
s/text-decoration-line:[^;"]+;//gI
|
|
s/text-decoration-style:[^;"]+;//gI
|
|
s/text-decoration:[^;"]+;//gI
|
|
s/text-indent:[^;"]+;//gI
|
|
s/text-orientation:[^;"]+;//gI
|
|
s/text-transform:[^;"]+;//gI
|
|
s/unicode-bidi:[^;"]+;//gI
|
|
s/word-spacing:[^;"]+;//gI
|
|
s/writing-mode:[^;"]+;//gI
|
|
}
|
|
|
|
# replace 2 and more semicolons by one
|
|
s/;{2,}/;/g
|
|
|
|
# delete trailing semicolon
|
|
s/;+"/"/g
|
|
|
|
# delete style attribute if it's empty
|
|
s/[[:space:]]?style=""//g
|
|
}
|