1
0
mirror of https://github.com/konpa/devicon.git synced 2025-08-04 13:47:26 +02:00

Added check script for the icons and fix icons with fill or viewBox issues (#460)

* Added script to check svg fill and viewBox

* Fix cucumber-plain-wordmark

* Fix various fill and viewBox issues in svgs

* Added check for height and width attr

* Added check_svgs workflow

* Fix an issue where the error is not log properly

* Added on push for testing

* Updated trigger so it now runs whenever PR is update

* Added sleep to script to make logs nicer

* Added script that create env var

* Updated the github_env to accomodate ubuntu

* Change format of log and allow filehandler to return Path

* Updated logging messages

* Updated refs for the checkout action

* Make logging nicer

* Updated fix messaging so it's more clear

* fix icons: icons/cucumber/cucumber-plain-wordmark.svg, icons/intellij/intellij-plain-wordmark.svg, icons/jenkins/jenkins-plain.svg, icons/twitter/twitter-original.svg, icons/yunohost/yunohost-plain.svg
This commit is contained in:
Thomas Bui
2021-01-08 12:36:45 -08:00
committed by GitHub
parent 1eedcd8b4a
commit 82bccb11fd
17 changed files with 397 additions and 419 deletions

View File

@@ -3,6 +3,10 @@ from build_assets.PathResolverAction import PathResolverAction
def get_selenium_runner_args(peek_mode=False):
"""
Get the commandline arguments for the icomoon_peek.py and
icomoon_build.py.
"""
parser = ArgumentParser(description="Upload svgs to Icomoon to create icon files.")
parser.add_argument("--headless",
@@ -34,3 +38,22 @@ def get_selenium_runner_args(peek_mode=False):
help="The title of the PR that we are peeking at")
return parser.parse_args()
def get_check_svgs_args():
"""
Get the commandline arguments for the chec_svgs.py.
"""
parser = ArgumentParser(description="Check the SVGs to ensure their attributes are correct.")
parser.add_argument("icomoon_json_path",
help="The path to the icomoon.json aka the selection.json created by Icomoon",
action=PathResolverAction)
parser.add_argument("devicon_json_path",
help="The path to the devicon.json",
action=PathResolverAction)
parser.add_argument("icons_folder_path",
help="The path to the icons folder",
action=PathResolverAction)
return parser.parse_args()

View File

@@ -0,0 +1,37 @@
from typing import List
# abandoned since it's not too hard to check devicon objects using our eyes
# however, still keep in case we need it in the future
def check_devicon_objects(icons: List[dict]):
"""
Check that the devicon objects added is up to standard.
"""
err_msgs = []
for icon in icons:
if type(icon["name"]) != str:
err_msgs.append("'name' must be a string, not: " + str(icon["name"]))
try:
for tag in icon["tags"]:
if type(tag) != str:
raise TypeError()
except TypeError:
err_msgs.append("'tags' must be an array of strings, not: " + str(icon["tags"]))
break
if type(icon["versions"]["svg"]) != list or len(icon["versions"]["svg"]) == 0:
err_msgs.append("Icon name must be a string")
if type(icon["versions"]["font"]) != list or len(icon["versions"]["svg"]) == 0:
err_msgs.append("Icon name must be a string")
if type(icon["color"]) != str or "#" not in icon["color"]:
err_msgs.append("'color' must be a string in the format '#abcdef'")
if type(icon["aliases"]) != list:
err_msgs.append("'aliases' must be an array of dicts")
if len(err_msgs) > 0:
raise Exception("Error found in devicon.json: \n" + "\n".join(err_msgs))

View File

@@ -44,12 +44,16 @@ def is_not_in_icomoon_json(icon, icomoon_json) -> bool:
return True
def get_svgs_paths(new_icons: List[dict], icons_folder_path: str) -> List[str]:
def get_svgs_paths(new_icons: List[dict], icons_folder_path: str,
icon_versions_only: bool=False, as_str: bool=True) -> List[str] or List[Path]:
"""
Get all the suitable svgs file path listed in the devicon.json.
:param new_icons, a list containing the info on the new icons.
:param icons_folder_path, the path where the function can find the
listed folders.
:param icon_versions_only, whether to only get the svgs that can be
made into an icon.
:param: as_str, whether to add the path as a string or as a Path.
:return: a list of svg file paths that can be uploaded to Icomoon.
"""
file_paths = []
@@ -59,27 +63,56 @@ def get_svgs_paths(new_icons: List[dict], icons_folder_path: str) -> List[str]:
if not folder_path.is_dir():
raise ValueError(f"Invalid path. This is not a directory: {folder_path}.")
# TODO: remove the try-except when the devicon.json is upgraded
try:
if icon_versions_only:
get_icon_svgs_paths(folder_path, icon_info, file_paths, as_str)
else:
get_all_svgs_paths(folder_path, icon_info, file_paths, as_str)
return file_paths
def get_icon_svgs_paths(folder_path: Path, icon_info: dict,
file_paths: List[str], as_str: bool):
"""
Get only the svg file paths that can be made into an icon from the icon_info.
:param: folder_path, the folder where we can find the icons.
:param: icon_info, an icon object in the devicon.json.
:param: file_paths, an array containing all the file paths found.
:param: as_str, whether to add the path as a string or as a Path.
"""
aliases = icon_info["aliases"]
except KeyError:
aliases = [] # create empty list of aliases if not provided in devicon.json
for font_version in icon_info["versions"]["font"]:
# if it's an alias, we don't want to make it into an icon
if is_alias(font_version, aliases):
print(f"Not exist {icon_info['name']}-{font_version}.svg")
print(f"Skipping this font since it's an alias: {icon_info['name']}-{font_version}.svg")
continue
file_name = f"{icon_info['name']}-{font_version}.svg"
path = Path(folder_path, file_name)
if path.exists():
file_paths.append(str(path))
file_paths.append(str(path) if as_str else path)
else:
raise ValueError(f"This path doesn't exist: {path}")
return file_paths
def get_all_svgs_paths(folder_path: Path, icon_info: dict,
file_paths: List[str], as_str: bool):
"""
Get all the svg file paths of an icon.
:param: folder_path, the folder where we can find the icons.
:param: icon_info, an icon object in the devicon.json.
:param: file_paths, an array containing all the file paths found.
:param: as_str, whether to add the path as a string or as a Path.
"""
for font_version in icon_info["versions"]["svg"]:
file_name = f"{icon_info['name']}-{font_version}.svg"
path = Path(folder_path, file_name)
if path.exists():
file_paths.append(str(path) if as_str else path)
else:
raise ValueError(f"This path doesn't exist: {path}")
def is_alias(font_version: str, aliases: List[dict]):

View File

@@ -0,0 +1,33 @@
import os
import platform
def set_env_var(key: str, value: str, delimiter: str='~'):
"""
Set the GitHub env variable of 'key' to 'value' using
the method specified here:
https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
Support both Windows and Ubuntu machines provided by GitHub Actions.
:param: key, the name of the env variable.
:param: value, the value of the env variable.
:param: delimiter, the delimiter that you want to use
to write to the file. Only applicable if the 'value' contains
'\n' character aka a multiline string.
"""
if platform.system() == "Windows":
if "\n" in value:
os.system(f'echo "{key}<<{delimiter}" >> %GITHUB_ENV%')
os.system(f'echo "{value}" >> %GITHUB_ENV%')
os.system(f'echo "{delimiter}" >> %GITHUB_ENV%')
else:
os.system(f'echo "{key}={value}" >> %GITHUB_ENV%')
elif platform.system() == "Linux":
if "\n" in value:
os.system(f'echo "{key}<<{delimiter}" >> $GITHUB_ENV')
os.system(f'echo "{value}" >> $GITHUB_ENV')
os.system(f'echo "{delimiter}" >> $GITHUB_ENV')
else:
os.system(f'echo "{key}={value}" >> $GITHUB_ENV')
else:
raise Exception("This function doesn't support this platform: " + platform.system())

18
.github/scripts/check_all_icons.py vendored Normal file
View File

@@ -0,0 +1,18 @@
from pathlib import Path
import json
# pycharm complains that build_assets is an unresolved ref
# don't worry about it, the script still runs
from build_assets import filehandler
if __name__ == "__main__":
"""
Use as a cmd line script to check all the icons of the devicon.json.
"""
devicon_json_path = str(Path("./devicon.json").resolve())
icons_folder_path = str(Path("./icons").resolve())
with open(devicon_json_path) as json_file:
devicon_json = json.load(json_file)
svgs = filehandler.get_svgs_paths(devicon_json, icons_folder_path)

91
.github/scripts/check_svgs.py vendored Normal file
View File

@@ -0,0 +1,91 @@
from typing import List
import sys
import xml.etree.ElementTree as et
import time
from pathlib import Path
# pycharm complains that build_assets is an unresolved ref
# don't worry about it, the script still runs
from build_assets import filehandler, arg_getters
from build_assets import github_env
def main():
"""
Check the quality of the svgs.
If any error is found, set an environmental variable called ERR_MSGS
that will contains the error messages.
"""
args = arg_getters.get_check_svgs_args()
new_icons = filehandler.find_new_icons(args.devicon_json_path, args.icomoon_json_path)
if len(new_icons) == 0:
sys.exit("No files need to be uploaded. Ending script...")
# print list of new icons
print("SVGs being checked:", *new_icons, sep = "\n", end='\n\n')
time.sleep(1) # do this so the logs stay clean
try:
# check the svgs
svgs = filehandler.get_svgs_paths(new_icons, args.icons_folder_path, as_str=False)
check_svgs(svgs)
print("All SVGs found were good.\nTask completed.")
except Exception as e:
github_env.set_env_var("ERR_MSGS", str(e))
sys.exit(str(e))
def check_svgs(svg_file_paths: List[Path]):
"""
Check the width, height, viewBox and style of each svgs passed in.
The viewBox must be '0 0 128 128'.
If the svg has a width and height attr, ensure it's '128px'.
The style must not contain any 'fill' declarations.
If any error is found, they will be thrown.
:param: svg_file_paths, the file paths to the svg to check for.
"""
# batch err messages together so user can fix everything at once
err_msgs = []
for svg_path in svg_file_paths:
tree = et.parse(svg_path)
root = tree.getroot()
namespace = "{http://www.w3.org/2000/svg}"
err_msg = [f"{svg_path.name}:"]
if root.tag != f"{namespace}svg":
err_msg.append(f"-root is '{root.tag}'. Root must be an 'svg' element")
if root.get("viewBox") != "0 0 128 128":
err_msg.append("-'viewBox' is not '0 0 128 128' -> Set it or scale the file using https://www.iloveimg.com/resize-image/resize-svg")
acceptable_size = [None, "128px", "128"]
if root.get("height") not in acceptable_size:
err_msg.append("-'height' is present in svg element but is not '128' or '128px' -> Remove it or set it to '128' or '128px'")
if root.get("width") not in acceptable_size:
err_msg.append("-'width' is present in svg element but is not '128' or '128px' -> Remove it or set it to '128' or '128px'")
if root.get("style") is not None and "enable-background" in root.get("style"):
err_msg.append("-deprecated 'enable-background' in style attribute -> Remove it")
if root.get("x") is not None:
err_msg.append("-unneccessary 'x' attribute in svg element -> Remove it")
if root.get("y") is not None:
err_msg.append("-unneccessary 'y' attribute in svg element -> Remove it")
style = root.findtext(f".//{namespace}style")
if style != None and "fill" in style:
err_msg.append("-contains style declaration using 'fill' -> Replace classes with the 'fill' attribute instead")
if len(err_msg) > 1:
err_msgs.append("\n".join(err_msg))
if len(err_msgs) > 0:
raise Exception("Errors found in these files:\n" + "\n\n".join(err_msgs))
if __name__ == "__main__":
main()

View File

@@ -22,7 +22,7 @@ def main():
runner = SeleniumRunner(args.download_path,
args.geckodriver_path, args.headless)
runner.upload_icomoon(args.icomoon_json_path)
svgs = filehandler.get_svgs_paths(new_icons, args.icons_folder_path)
svgs = filehandler.get_svgs_paths(new_icons, args.icons_folder_path, True)
runner.upload_svgs(svgs)
zip_name = "devicon-v1.0.zip"
@@ -34,7 +34,7 @@ def main():
except TimeoutException as e:
sys.exit("Selenium Time Out Error: \n" + str(e))
except Exception as e:
sys.exit(e)
sys.exit(str(e))
finally:
runner.close()

View File

@@ -2,6 +2,7 @@ from typing import List
import re
import sys
from selenium.common.exceptions import TimeoutException
import xml.etree.ElementTree as et
# pycharm complains that build_assets is an unresolved ref
# don't worry about it, the script still runs
@@ -21,7 +22,7 @@ def main():
if len(filtered_icons) == 0:
message = "No icons found matching the icon name in the PR's title.\n" \
"Ensure that the PR title matches the convention here: \n" \
"Ensure that a new icon entry is added in the devicon.json and the PR title matches the convention here: \n" \
"https://github.com/devicons/devicon/blob/master/CONTRIBUTING.md#overview.\n" \
"Ending script...\n"
sys.exit(message)
@@ -33,14 +34,14 @@ def main():
runner = None
try:
runner = SeleniumRunner(args.download_path, args.geckodriver_path, args.headless)
svgs = filehandler.get_svgs_paths(filtered_icons, args.icons_folder_path)
svgs = filehandler.get_svgs_paths(filtered_icons, args.icons_folder_path, True)
screenshot_folder = filehandler.create_screenshot_folder("./")
runner.upload_svgs(svgs, screenshot_folder)
print("Task completed.")
except TimeoutException as e:
sys.exit("Selenium Time Out Error: \n" + str(e))
except Exception as e:
sys.exit(e)
sys.exit(str(e))
finally:
runner.close()
@@ -62,5 +63,7 @@ def find_object_added_in_this_pr(icons: List[dict], pr_title: str):
return []
if __name__ == "__main__":
main()

View File

@@ -8,7 +8,6 @@ jobs:
- uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
repository: ${{ github.event.pull_request.head.repo.full_name}}
- name: Setup Python v3.8
uses: actions/setup-python@v2
with:
@@ -44,13 +43,24 @@ jobs:
uses: peter-evans/create-pull-request@v3
env:
MESSAGE: |
Automated font-building task ran by GitHub Actions bot. This PR built new font files and devicon.css file.
What's up!
Here are all the files that were built:
I'm Devicon's Build Bot and I just built some new font files and devicon.min.css file.
Here are all the files that were built into icons:
![Files Built]({0})
The devicon.min.css file contains:
-The icon content
-The aliases
-The colored classes
-The default fallback font
More information can be found in the GitHub Action logs for this workflow.
Adios,
Build Bot :sunglasses:
with:
branch: 'master-build-result'
base: 'master'

60
.github/workflows/check_svgs.yml vendored Normal file
View File

@@ -0,0 +1,60 @@
name: Check SVGs
on: pull_request
jobs:
check:
name: Check the SVGs' quality
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
- name: Setup Python v3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install dependencies
run: python -m pip install --upgrade pip
- name: Run the check_svg script
run: >
python ./.github/scripts/check_svgs.py ./icomoon.json ./devicon.json ./icons
- name: Comment on the PR about the result - Success
if: success()
uses: github-actions-up-and-running/pr-comment@v1.0.1
env:
MESSAGE: |
Hi!
I'm Devicons' SVG-Checker Bot and I just checked all the SVGs in this branch.
Everything looks great. Good job!
Have a nice day,
SVG-Checker Bot :grin:
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
message: ${{ env.MESSAGE }}
- name: Comment on the PR about the result - Failed
if: failure()
uses: github-actions-up-and-running/pr-comment@v1.0.1
env:
MESSAGE: |
Hi!
I'm Devicons' SVG-Checker Bot and it seems we've ran into a problem. I'm supposed to check your svgs but I couldn't do my task due to an issue.
Here is what went wrong:
```
{0}
```
For more reference, check out our [CONTRIBUTING guide](https://github.com/devicons/devicon/blob/develop/CONTRIBUTING.md#svgStandards)
Please address these issues. When you update this PR, I will check your SVGs again.
Thanks for your help,
SVG-Checker Bot :smile:
PS. One day, I will be smart enough to fix these errors for you :persevere:. Until then, I can only point them out.
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
message: ${{ format(env.MESSAGE, env.ERR_MSGS)}}

View File

@@ -4,11 +4,13 @@ on:
types: [labeled]
jobs:
build:
name: Get Fonts From Icomoon
name: Peek Icons
if: contains(github.event.pull_request.labels.*.name, 'bot:peek')
runs-on: windows-2019
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
- name: Setup Python v3.8
uses: actions/setup-python@v2
with:
@@ -42,23 +44,20 @@ jobs:
uses: github-actions-up-and-running/pr-comment@v1.0.1
env:
MESSAGE: |
Hi!
~Hi
I'm Devicons' Peek Bot and it seems we've ran into a problem. I'm supposed to check your svgs but I couldn't do my task due to an issue.
I'm Devicons' Peek Bot and it seems we've ran into a problem (sorry!).
Can you please double check and fix the possible issues below:
Please double check and fix the possible issues below:
- Your svgs are named and added correctly to the /icons folder as seen [here](https://github.com/devicons/devicon/blob/master/CONTRIBUTING.md#orgGuidelines).
- Your icon information has been added to the `devicon.json` as seen [here](https://github.com/devicons/devicon/blob/master/CONTRIBUTING.md#updateDevicon)
- Your PR title follows the format seen [here](https://github.com/devicons/devicon/blob/master/CONTRIBUTING.md#overview)
Once everything is fixed, the maintainers will try again. If I still fail, the maintainers will investigate what cause this problem.
Once everything is fixed, I will try. If I still fail (sorry!), the maintainers will investigate further.
Thank you for your help :smile:
Cheers :),
Peek Bot
Best of luck,
Peek Bot :relaxed:
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
message: ${{env.MESSAGE}}

View File

@@ -73,13 +73,14 @@ First of all, thanks for taking the time to contribute! This project can only gr
<p>Before you submit your logos/svgs, please ensure that they meet the following standard:</p>
<ul>
<li>The background must be transparent.</li>
<li>The <b>plain</b> and <b>line</b> versions (with or without wordmark) need to stay as simple as possible. They must have only one color and the paths are united before exporting to svg. We will strip the color when turning it into icons.
<li>The svg name follows this convention: <code>(Icon name)-(original|plain|line)(-wordmark?).</code></li>
<li>The <b>plain</b> and <b>line</b> versions (with or without wordmark) need to stay as simple as possible. They must have only one color and the paths are united. We will strip the color when turning it into icons so they can have any color.
</li>
<li>Optimize/compress your SVGs. You can use a service like <a href="https://compressor.io/">compressor</a> or <a href="https://petercollingridge.appspot.com/svg-editor">SVG Editor</a>.</li>
<li>The icon's strokes and texts must be fills. This is to satisfy our conversion website's <a href="https://icomoon.io/#docs/stroke-to-fill">requirements.</a></li>
<li>Each <code>.svg</code> file contains one version of an icon in a <code>0 0 128 128</code> viewbox.</li>
<li>Each <code>.svg</code> file contains one version of an icon in a <code>0 0 128 128</code> viewbox. You can use a service like <a href="https://www.iloveimg.com/resize-image/resize-svg">resize-image</a> for scaling the svg.</li>
<li>The <code>svg</code> element does not need the <code>height</code> and <code>width</code> attributes. However, if you do use it, ensure their values are either <code>"128"</code> or <code>"128px"</code>. Ex: <code>height="128"</code></li>
<li>Each <code>.svg</code> must use the <code>fill</code> attribute instead of using <code>classes</code> for colors. See <a href="https://github.com/devicons/devicon/issues/407">here</a> for more details.</li>
<li>The naming convention for the svg file is the following: <code>(Icon name)-(original|plain|line)(-wordmark?).</code></li>
</ul>
<hr>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

@@ -1 +1 @@
<svg id="intelij" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><defs><style>.cls-1{fill:#136ba2;}</style></defs><title>Artboard 13</title><g id="plain-wordmark"><path fill="#136ba2" d="M38.51,61.26V72.9H36.91V61.26Z"/><path fill="#136ba2" d="M41.45,66.81c0-.86,0-1.57-.07-2.26h1.44l.09,1.38h0a3.33,3.33,0,0,1,3-1.57c1.24,0,3.16.69,3.16,3.56v5H47.43V68.08c0-1.35-.54-2.47-2.07-2.47a2.29,2.29,0,0,0-2.18,1.55,2.06,2.06,0,0,0-.11.71v5H41.45Z"/><path fill="#136ba2" d="M53.58,62.14v2.4h2.33V65.7H53.58v4.51c0,1,.31,1.62,1.22,1.62a3.84,3.84,0,0,0,.94-.1l.07,1.14a4.22,4.22,0,0,1-1.44.21,2.34,2.34,0,0,1-1.75-.64A3,3,0,0,1,52,70.26V65.7H50.61V64.54H52v-2Z"/><path fill="#136ba2" d="M58.53,69a2.78,2.78,0,0,0,3.07,2.9,6.23,6.23,0,0,0,2.47-.43l.28,1.09a7.68,7.68,0,0,1-3,.52c-2.75,0-4.4-1.69-4.4-4.22s1.59-4.51,4.19-4.51c2.92,0,3.69,2.4,3.69,3.94a5.49,5.49,0,0,1-.05.71Zm4.76-1.09A2.21,2.21,0,0,0,61,65.44a2.59,2.59,0,0,0-2.49,2.47Z"/><path fill="#136ba2" d="M66.87,60.64H68.5V72.9H66.87Z"/><path fill="#136ba2" d="M71.23,60.64h1.63V72.9H71.23Z"/><path fill="#136ba2" d="M77.4,62.19a1,1,0,0,1-2,0,1,1,0,0,1,1-1A.93.93,0,0,1,77.4,62.19ZM75.59,72.9V64.54h1.63V72.9H75.59Z"/><path fill="#136ba2" d="M82.51,61.26h1.61v7.79c0,3.09-1.63,4-3.77,4a5.52,5.52,0,0,1-1.72-.28l.24-1.23a4.07,4.07,0,0,0,1.35.22c1.44,0,2.29-.6,2.29-2.89V61.26Z"/><path fill="#136ba2" d="M91.4,61.26V72.9H88.57V61.26Z"/><path fill="#136ba2" d="M93.83,61.41a26.81,26.81,0,0,1,3.8-.24,8.42,8.42,0,0,1,5.1,1.24,5,5,0,0,1,2.11,4.39,5.74,5.74,0,0,1-2.07,4.72A9.38,9.38,0,0,1,97,73a26,26,0,0,1-3.2-.17V61.41Zm2.83,9.5a5.58,5.58,0,0,0,1,.05c2.55,0,4.21-1.3,4.21-4.08,0-2.42-1.5-3.7-3.92-3.7a6.25,6.25,0,0,0-1.27.1Z"/><path fill="#136ba2" d="M114.09,68h-4.58v2.76h5.12V72.9h-7.94V61.26h7.68v2.16h-4.86v2.42h4.58V68Z"/><path fill="#136ba2" d="M119.44,69.91l-.89,3h-2.92l3.8-11.64h3.69L127,72.9h-3l-1-3Zm3.16-2-.78-2.47c-.22-.69-.44-1.55-.63-2.25h0c-.18.69-.37,1.57-.57,2.25l-.74,2.47Z"/><path fill="#136ba2" d="M1,64.13a3.28,3.28,0,0,0,3.38,3.16,3.16,3.16,0,1,0,0-6.32A3.28,3.28,0,0,0,1,64.13Z"/><path fill="#136ba2" d="M21.14,53c-1.85,0-3,1.4-3,3.74V71.16c0,2.34,1.1,3.74,3,3.74s3-1.4,3-3.74V66.35h0V56.78C24.1,54.44,23,53,21.14,53Z"/><path fill="#136ba2" d="M16,53.35H3.83a2.76,2.76,0,1,0,0,5.51v0H10v5S10,64,10,64h0s0,.07,0,.1a5.5,5.5,0,0,1-5.67,5.3H4.23l0,0H4A2.77,2.77,0,1,0,4,75h.42C10.76,75,16,70.1,16,64.14c0,0,0-.06,0-.1h0c0-.23,0-.89,0-1.77v0S16,53.6,16,53.35Z"/></g></svg>
<svg id="intelij" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><title>Artboard 13</title><g id="plain-wordmark"><path fill="#136ba2" d="M38.51,61.26V72.9H36.91V61.26Z"/><path fill="#136ba2" d="M41.45,66.81c0-.86,0-1.57-.07-2.26h1.44l.09,1.38h0a3.33,3.33,0,0,1,3-1.57c1.24,0,3.16.69,3.16,3.56v5H47.43V68.08c0-1.35-.54-2.47-2.07-2.47a2.29,2.29,0,0,0-2.18,1.55,2.06,2.06,0,0,0-.11.71v5H41.45Z"/><path fill="#136ba2" d="M53.58,62.14v2.4h2.33V65.7H53.58v4.51c0,1,.31,1.62,1.22,1.62a3.84,3.84,0,0,0,.94-.1l.07,1.14a4.22,4.22,0,0,1-1.44.21,2.34,2.34,0,0,1-1.75-.64A3,3,0,0,1,52,70.26V65.7H50.61V64.54H52v-2Z"/><path fill="#136ba2" d="M58.53,69a2.78,2.78,0,0,0,3.07,2.9,6.23,6.23,0,0,0,2.47-.43l.28,1.09a7.68,7.68,0,0,1-3,.52c-2.75,0-4.4-1.69-4.4-4.22s1.59-4.51,4.19-4.51c2.92,0,3.69,2.4,3.69,3.94a5.49,5.49,0,0,1-.05.71Zm4.76-1.09A2.21,2.21,0,0,0,61,65.44a2.59,2.59,0,0,0-2.49,2.47Z"/><path fill="#136ba2" d="M66.87,60.64H68.5V72.9H66.87Z"/><path fill="#136ba2" d="M71.23,60.64h1.63V72.9H71.23Z"/><path fill="#136ba2" d="M77.4,62.19a1,1,0,0,1-2,0,1,1,0,0,1,1-1A.93.93,0,0,1,77.4,62.19ZM75.59,72.9V64.54h1.63V72.9H75.59Z"/><path fill="#136ba2" d="M82.51,61.26h1.61v7.79c0,3.09-1.63,4-3.77,4a5.52,5.52,0,0,1-1.72-.28l.24-1.23a4.07,4.07,0,0,0,1.35.22c1.44,0,2.29-.6,2.29-2.89V61.26Z"/><path fill="#136ba2" d="M91.4,61.26V72.9H88.57V61.26Z"/><path fill="#136ba2" d="M93.83,61.41a26.81,26.81,0,0,1,3.8-.24,8.42,8.42,0,0,1,5.1,1.24,5,5,0,0,1,2.11,4.39,5.74,5.74,0,0,1-2.07,4.72A9.38,9.38,0,0,1,97,73a26,26,0,0,1-3.2-.17V61.41Zm2.83,9.5a5.58,5.58,0,0,0,1,.05c2.55,0,4.21-1.3,4.21-4.08,0-2.42-1.5-3.7-3.92-3.7a6.25,6.25,0,0,0-1.27.1Z"/><path fill="#136ba2" d="M114.09,68h-4.58v2.76h5.12V72.9h-7.94V61.26h7.68v2.16h-4.86v2.42h4.58V68Z"/><path fill="#136ba2" d="M119.44,69.91l-.89,3h-2.92l3.8-11.64h3.69L127,72.9h-3l-1-3Zm3.16-2-.78-2.47c-.22-.69-.44-1.55-.63-2.25h0c-.18.69-.37,1.57-.57,2.25l-.74,2.47Z"/><path fill="#136ba2" d="M1,64.13a3.28,3.28,0,0,0,3.38,3.16,3.16,3.16,0,1,0,0-6.32A3.28,3.28,0,0,0,1,64.13Z"/><path fill="#136ba2" d="M21.14,53c-1.85,0-3,1.4-3,3.74V71.16c0,2.34,1.1,3.74,3,3.74s3-1.4,3-3.74V66.35h0V56.78C24.1,54.44,23,53,21.14,53Z"/><path fill="#136ba2" d="M16,53.35H3.83a2.76,2.76,0,1,0,0,5.51v0H10v5S10,64,10,64h0s0,.07,0,.1a5.5,5.5,0,0,1-5.67,5.3H4.23l0,0H4A2.77,2.77,0,1,0,4,75h.42C10.76,75,16,70.1,16,64.14c0,0,0-.06,0-.1h0c0-.23,0-.89,0-1.77v0S16,53.6,16,53.35Z"/></g></svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,22 +1,21 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="128px" height="128px" viewBox="0 0 1280 1280" preserveAspectRatio="xMidYMid meet">
<g id="layer101" fill="#fdfdfd" stroke="none">
<path d="M628 1243 c-35 -4 -38 -7 -53 -56 -17 -59 -49 -236 -43 -242 19 -19 226 -24 237 -6 10 15 26 290 18 298 -8 7 -115 12 -159 6z"/>
<path d="M816 1178 c-11 -34 -12 -69 -4 -75 14 -8 28 16 28 49 0 29 -17 48 -24 26z"/>
<path d="M470 1091 c-36 -11 -88 -39 -95 -51 -4 -6 -9 -41 -12 -78 -3 -37 -14 -101 -25 -142 -11 -41 -22 -84 -25 -95 -6 -30 120 -115 145 -97 9 7 41 26 69 43 44 26 54 37 64 72 6 23 18 48 27 55 9 7 17 22 17 33 0 19 23 36 75 56 20 8 5 11 -73 17 -53 4 -102 4 -108 0 -7 -4 -9 -22 -7 -43 3 -20 2 -45 -3 -56 -5 -14 -8 -2 -8 36 -1 62 -7 75 -29 56 -13 -10 -14 -9 -10 3 3 8 -2 20 -11 27 -14 11 -11 12 16 13 29 0 32 3 37 40 3 22 9 58 12 80 6 43 -1 47 -56 31z"/>
<path d="M801 1000 c-1 -54 2 -70 13 -70 9 0 18 19 25 50 14 67 14 77 -5 84 -29 11 -32 6 -33 -64z"/>
<path d="M1016 1036 c4 -9 -8 -12 -42 -12 l-46 1 -4 -55 -4 -55 47 -17 c56 -20 66 -14 82 47 12 48 3 88 -23 98 -10 4 -13 1 -10 -7z m-16 -52 c0 -2 -12 -4 -27 -4 -21 0 -24 3 -14 9 13 8 41 5 41 -5z m0 -33 c0 -5 -11 -8 -25 -5 -31 5 -33 -4 -3 -15 12 -4 17 -10 12 -13 -13 -9 -47 19 -39 31 8 13 55 15 55 2z"/>
<path d="M876 993 c-3 -21 -6 -47 -6 -58 1 -20 1 -20 15 -1 16 21 21 96 6 96 -4 0 -11 -17 -15 -37z"/>
<path d="M820 894 c0 -1 15 -27 34 -58 32 -53 34 -62 32 -131 -2 -41 -8 -81 -15 -89 -7 -8 -8 -17 -3 -20 4 -2 25 12 45 33 40 41 47 76 25 128 -6 15 -12 35 -14 43 -2 9 -10 32 -18 52 -13 30 -21 36 -51 40 -19 2 -35 3 -35 2z"/>
<path d="M691 846 l-45 -23 27 -27 c14 -14 30 -26 36 -26 8 0 51 77 51 93 0 13 -24 6 -69 -17z"/>
<path d="M767 804 c-21 -42 -25 -59 -16 -65 13 -8 46 8 52 26 3 5 1 30 -2 54 l-6 43 -28 -58z"/>
<path d="M824 815 c3 -22 5 -46 5 -52 1 -15 27 -17 36 -3 3 5 -5 29 -20 52 l-25 43 4 -40z"/>
<path d="M611 749 c-14 -41 -14 -86 0 -94 18 -12 99 24 92 41 -3 8 0 14 6 14 32 0 -18 49 -65 64 -18 5 -24 1 -33 -25z"/>
<path d="M790 713 c0 -6 6 -14 13 -16 9 -4 9 -8 -2 -15 -10 -8 -8 -13 10 -26 32 -22 38 -20 50 10 16 43 4 63 -36 61 -19 -1 -35 -7 -35 -14z"/>
<path d="M545 660 c-3 -5 3 -10 15 -10 12 0 18 5 15 10 -3 6 -10 10 -15 10 -5 0 -12 -4 -15 -10z"/>
<path d="M525 623 c-39 -21 -52 -38 -69 -93 -9 -29 -10 -49 -4 -57 15 -19 0 -35 -22 -23 -25 13 -26 13 -50 -12 -11 -13 -20 -35 -20 -54 0 -54 48 -85 70 -45 13 25 13 42 -1 19 -5 -10 -18 -18 -28 -18 -14 0 -17 6 -13 32 5 32 5 32 14 8 9 -24 10 -24 24 -6 8 11 14 15 14 9 0 -7 12 -13 28 -15 21 -2 26 -8 24 -23 -5 -28 -4 -80 1 -148 3 -47 9 -63 33 -88 70 -74 163 -91 262 -49 64 28 108 80 67 80 -14 0 -18 10 -12 27 1 4 11 6 23 5 42 -6 72 69 66 168 -1 19 -3 47 -3 63 -1 15 -5 27 -10 27 -4 0 -10 13 -14 29 -19 88 -104 161 -185 161 -54 0 -90 -20 -139 -77 -27 -32 -41 -42 -41 -31 0 15 54 86 85 111 6 5 0 6 -12 2 -12 -3 -24 -1 -28 5 -9 14 -25 12 -60 -7z m276 -73 c10 0 19 -3 19 -7 0 -5 -23 -9 -51 -10 -37 -1 -57 -7 -75 -24 -13 -12 -24 -18 -24 -12 0 26 67 66 98 57 8 -2 22 -4 33 -4z m8 -63 c-2 -3 -31 -7 -64 -10 -48 -5 -56 -4 -40 6 28 16 88 25 99 15 5 -4 8 -9 5 -11z m59 -3 c12 -8 22 -19 22 -24 0 -12 -63 15 -68 29 -5 16 20 13 46 -5z m-38 -40 c60 -24 69 -49 32 -88 -17 -17 -39 -47 -51 -66 -11 -19 -21 -28 -21 -19 0 9 11 31 25 50 13 19 32 44 41 57 20 28 13 38 -42 57 -34 12 -41 11 -56 -2 -20 -18 -25 -4 -6 15 16 16 30 15 78 -4z m-112 -126 c7 -9 5 -20 -9 -37 -10 -13 -19 -18 -19 -13 0 6 5 14 10 17 20 12 9 25 -21 25 -17 0 -28 4 -24 10 9 14 51 12 63 -2z m190 -7 c9 -5 11 -17 6 -35 -9 -39 -28 -46 -19 -7 6 27 4 31 -15 31 -12 0 -18 5 -15 10 7 12 25 13 43 1z m-270 -131 c23 0 30 -14 12 -25 -9 -5 -70 20 -70 29 0 3 -3 13 -7 23 -5 15 -2 15 19 -4 13 -13 34 -23 46 -23z"/>
<path d="M445 299 c-4 -6 -21 -9 -38 -7 -28 3 -32 0 -35 -23 -5 -43 15 -79 54 -95 41 -17 47 -15 45 18 -1 13 -2 44 -2 71 0 45 -10 59 -24 36z"/>
<path d="M430 130 c0 -10 17 -23 63 -49 l38 -21 -28 35 c-15 19 -30 35 -33 36 -3 0 -13 2 -22 4 -10 2 -18 0 -18 -5z"/>
</g>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128px" height="128px" viewBox="0 0 128 128" version="1.1">
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 62.800781 124.300781 C 59.300781 123.898438 59 123.601562 57.5 118.699219 C 55.800781 112.800781 52.601562 95.101562 53.199219 94.5 C 55.101562 92.601562 75.800781 92.101562 76.898438 93.898438 C 77.898438 95.398438 79.5 122.898438 78.699219 123.699219 C 77.898438 124.398438 67.199219 124.898438 62.800781 124.300781 Z M 62.800781 124.300781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 81.601562 117.800781 C 80.5 114.398438 80.398438 110.898438 81.199219 110.300781 C 82.601562 109.5 84 111.898438 84 115.199219 C 84 118.101562 82.300781 120 81.601562 117.800781 Z M 81.601562 117.800781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 47 109.101562 C 43.398438 108 38.199219 105.199219 37.5 104 C 37.101562 103.398438 36.601562 99.898438 36.300781 96.199219 C 36 92.5 34.898438 86.101562 33.800781 82 C 32.699219 77.898438 31.601562 73.601562 31.300781 72.5 C 30.699219 69.5 43.300781 61 45.800781 62.800781 C 46.699219 63.5 49.898438 65.398438 52.699219 67.101562 C 57.101562 69.699219 58.101562 70.800781 59.101562 74.300781 C 59.699219 76.601562 60.898438 79.101562 61.800781 79.800781 C 62.699219 80.5 63.5 82 63.5 83.101562 C 63.5 85 65.800781 86.699219 71 88.699219 C 73 89.5 71.5 89.800781 63.699219 90.398438 C 58.398438 90.800781 53.5 90.800781 52.898438 90.398438 C 52.199219 90 52 88.199219 52.199219 86.101562 C 52.5 84.101562 52.398438 81.601562 51.898438 80.5 C 51.398438 79.101562 51.101562 80.300781 51.101562 84.101562 C 51 90.300781 50.398438 91.601562 48.199219 89.699219 C 46.898438 88.699219 46.800781 88.800781 47.199219 90 C 47.5 90.800781 47 92 46.101562 92.699219 C 44.699219 93.800781 45 93.898438 47.699219 94 C 50.601562 94 50.898438 94.300781 51.398438 98 C 51.699219 100.199219 52.300781 103.800781 52.601562 106 C 53.199219 110.300781 52.5 110.699219 47 109.101562 Z M 47 109.101562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 80.101562 100 C 80 94.601562 80.300781 93 81.398438 93 C 82.300781 93 83.199219 94.898438 83.898438 98 C 85.300781 104.699219 85.300781 105.699219 83.398438 106.398438 C 80.5 107.5 80.199219 107 80.101562 100 Z M 80.101562 100 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 101.601562 103.601562 C 102 102.699219 100.800781 102.398438 97.398438 102.398438 L 92.800781 102.5 L 92.398438 97 L 92 91.5 L 96.699219 89.800781 C 102.300781 87.800781 103.300781 88.398438 104.898438 94.5 C 106.101562 99.300781 105.199219 103.300781 102.601562 104.300781 C 101.601562 104.699219 101.300781 104.398438 101.601562 103.601562 Z M 100 98.398438 C 100 98.199219 98.800781 98 97.300781 98 C 95.199219 98 94.898438 98.300781 95.898438 98.898438 C 97.199219 99.699219 100 99.398438 100 98.398438 Z M 100 95.101562 C 100 94.601562 98.898438 94.300781 97.5 94.601562 C 94.398438 95.101562 94.199219 94.199219 97.199219 93.101562 C 98.398438 92.699219 98.898438 92.101562 98.398438 91.800781 C 97.101562 90.898438 93.699219 93.699219 94.5 94.898438 C 95.300781 96.199219 100 96.398438 100 95.101562 Z M 100 95.101562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 87.601562 99.300781 C 87.300781 97.199219 87 94.601562 87 93.5 C 87.101562 91.5 87.101562 91.5 88.5 93.398438 C 90.101562 95.5 90.601562 103 89.101562 103 C 88.699219 103 88 101.300781 87.601562 99.300781 Z M 87.601562 99.300781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 82 89.398438 C 82 89.300781 83.5 86.699219 85.398438 83.601562 C 88.601562 78.300781 88.800781 77.398438 88.601562 70.5 C 88.398438 66.398438 87.800781 62.398438 87.101562 61.601562 C 86.398438 60.800781 86.300781 59.898438 86.800781 59.601562 C 87.199219 59.398438 89.300781 60.800781 91.300781 62.898438 C 95.300781 67 96 70.5 93.800781 75.699219 C 93.199219 77.199219 92.601562 79.199219 92.398438 80 C 92.199219 80.898438 91.398438 83.199219 90.601562 85.199219 C 89.300781 88.199219 88.5 88.800781 85.5 89.199219 C 83.601562 89.398438 82 89.5 82 89.398438 Z M 82 89.398438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 69.101562 84.601562 L 64.601562 82.300781 L 67.300781 79.601562 C 68.699219 78.199219 70.300781 77 70.898438 77 C 71.699219 77 76 84.699219 76 86.300781 C 76 87.601562 73.601562 86.898438 69.101562 84.601562 Z M 69.101562 84.601562 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 76.699219 80.398438 C 74.601562 76.199219 74.199219 74.5 75.101562 73.898438 C 76.398438 73.101562 79.699219 74.699219 80.300781 76.5 C 80.601562 77 80.398438 79.5 80.101562 81.898438 L 79.5 86.199219 Z M 76.699219 80.398438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 82.398438 81.5 C 82.699219 79.300781 82.898438 76.898438 82.898438 76.300781 C 83 74.800781 85.601562 74.601562 86.5 76 C 86.800781 76.5 86 78.898438 84.5 81.199219 L 82 85.5 Z M 82.398438 81.5 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 61.101562 74.898438 C 59.699219 70.800781 59.699219 66.300781 61.101562 65.5 C 62.898438 64.300781 71 67.898438 70.300781 69.601562 C 70 70.398438 70.300781 71 70.898438 71 C 74.101562 71 69.101562 75.898438 64.398438 77.398438 C 62.601562 77.898438 62 77.5 61.101562 74.898438 Z M 61.101562 74.898438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 79 71.300781 C 79 70.699219 79.601562 69.898438 80.300781 69.699219 C 81.199219 69.300781 81.199219 68.898438 80.101562 68.199219 C 79.101562 67.398438 79.300781 66.898438 81.101562 65.601562 C 84.300781 63.398438 84.898438 63.601562 86.101562 66.601562 C 87.699219 70.898438 86.5 72.898438 82.5 72.699219 C 80.601562 72.601562 79 72 79 71.300781 Z M 79 71.300781 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 54.5 66 C 54.199219 65.5 54.800781 65 56 65 C 57.199219 65 57.800781 65.5 57.5 66 C 57.199219 66.601562 56.5 67 56 67 C 55.5 67 54.800781 66.601562 54.5 66 Z M 54.5 66 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 52.5 62.300781 C 48.601562 60.199219 47.300781 58.5 45.601562 53 C 44.699219 50.101562 44.601562 48.101562 45.199219 47.300781 C 46.699219 45.398438 45.199219 43.800781 43 45 C 40.5 46.300781 40.398438 46.300781 38 43.800781 C 36.898438 42.5 36 40.300781 36 38.398438 C 36 33 40.800781 29.898438 43 33.898438 C 44.300781 36.398438 44.300781 38.101562 42.898438 35.800781 C 42.398438 34.800781 41.101562 34 40.101562 34 C 38.699219 34 38.398438 34.601562 38.800781 37.199219 C 39.300781 40.398438 39.300781 40.398438 40.199219 38 C 41.101562 35.601562 41.199219 35.601562 42.601562 37.398438 C 43.398438 38.5 44 38.898438 44 38.300781 C 44 37.601562 45.199219 37 46.800781 36.800781 C 48.898438 36.601562 49.398438 36 49.199219 34.5 C 48.699219 31.699219 48.800781 26.5 49.300781 19.699219 C 49.601562 15 50.199219 13.398438 52.601562 10.898438 C 59.601562 3.5 68.898438 1.800781 78.800781 6 C 85.199219 8.800781 89.601562 14 85.5 14 C 84.101562 14 83.699219 15 84.300781 16.699219 C 84.398438 17.101562 85.398438 17.300781 86.601562 17.199219 C 90.800781 16.601562 93.800781 24.101562 93.199219 34 C 93.101562 35.898438 92.898438 38.699219 92.898438 40.300781 C 92.800781 41.800781 92.398438 43 91.898438 43 C 91.5 43 90.898438 44.300781 90.5 45.898438 C 88.601562 54.699219 80.101562 62 72 62 C 66.601562 62 63 60 58.101562 54.300781 C 55.398438 51.101562 54 50.101562 54 51.199219 C 54 52.699219 59.398438 59.800781 62.5 62.300781 C 63.101562 62.800781 62.5 62.898438 61.300781 62.5 C 60.101562 62.199219 58.898438 62.398438 58.5 63 C 57.601562 64.398438 56 64.199219 52.5 62.300781 Z M 80.101562 55 C 81.101562 55 82 54.699219 82 54.300781 C 82 53.800781 79.699219 53.398438 76.898438 53.300781 C 73.199219 53.199219 71.199219 52.601562 69.398438 50.898438 C 68.101562 49.699219 67 49.101562 67 49.699219 C 67 52.300781 73.699219 56.300781 76.800781 55.398438 C 77.601562 55.199219 79 55 80.101562 55 Z M 80.898438 48.699219 C 80.699219 48.398438 77.800781 48 74.5 47.699219 C 69.699219 47.199219 68.898438 47.300781 70.5 48.300781 C 73.300781 49.898438 79.300781 50.800781 80.398438 49.800781 C 80.898438 49.398438 81.199219 48.898438 80.898438 48.699219 Z M 86.800781 48.398438 C 88 47.601562 89 46.5 89 46 C 89 44.800781 82.699219 47.5 82.199219 48.898438 C 81.699219 50.5 84.199219 50.199219 86.800781 48.398438 Z M 83 44.398438 C 89 42 89.898438 39.5 86.199219 35.601562 C 84.5 33.898438 82.300781 30.898438 81.101562 29 C 80 27.101562 79 26.199219 79 27.101562 C 79 28 80.101562 30.199219 81.5 32.101562 C 82.800781 34 84.699219 36.5 85.601562 37.800781 C 87.601562 40.601562 86.898438 41.601562 81.398438 43.5 C 78 44.699219 77.300781 44.601562 75.800781 43.300781 C 73.800781 41.5 73.300781 42.898438 75.199219 44.800781 C 76.800781 46.398438 78.199219 46.300781 83 44.398438 Z M 71.800781 31.800781 C 72.5 30.898438 72.300781 29.800781 70.898438 28.101562 C 69.898438 26.800781 69 26.300781 69 26.800781 C 69 27.398438 69.5 28.199219 70 28.5 C 72 29.699219 70.898438 31 67.898438 31 C 66.199219 31 65.101562 31.398438 65.5 32 C 66.398438 33.398438 70.601562 33.199219 71.800781 31.800781 Z M 90.800781 31.101562 C 91.699219 30.601562 91.898438 29.398438 91.398438 27.601562 C 90.5 23.699219 88.601562 23 89.5 26.898438 C 90.101562 29.601562 89.898438 30 88 30 C 86.800781 30 86.199219 30.5 86.5 31 C 87.199219 32.199219 89 32.300781 90.800781 31.101562 Z M 63.800781 18 C 66.101562 18 66.800781 16.601562 65 15.5 C 64.101562 15 58 17.5 58 18.398438 C 58 18.699219 57.699219 19.699219 57.300781 20.699219 C 56.800781 22.199219 57.101562 22.199219 59.199219 20.300781 C 60.5 19 62.601562 18 63.800781 18 Z M 63.800781 18 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 44.5 29.898438 C 44.101562 29.300781 42.398438 29 40.699219 29.199219 C 37.898438 29.5 37.5 29.199219 37.199219 26.898438 C 36.699219 22.601562 38.699219 19 42.601562 17.398438 C 46.699219 15.699219 47.300781 15.898438 47.101562 19.199219 C 47 20.5 46.898438 23.601562 46.898438 26.300781 C 46.898438 30.800781 45.898438 32.199219 44.5 29.898438 Z M 44.5 29.898438 "/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(99.215686%,99.215686%,99.215686%);fill-opacity:1;" d="M 43 13 C 43 12 44.699219 10.699219 49.300781 8.101562 L 53.101562 6 L 50.300781 9.5 C 48.800781 11.398438 47.300781 13 47 13.101562 C 46.699219 13.101562 45.699219 13.300781 44.800781 13.5 C 43.800781 13.699219 43 13.5 43 13 Z M 43 13 "/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1 +1,6 @@
<svg id="twitter" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 126.24 102.59"><path id="original" fill="#1da1f2" d="M40.58,115.3c47.64,0,73.69-39.47,73.69-73.69,0-1.12,0-2.24-.07-3.35a52.7,52.7,0,0,0,12.92-13.41,51.7,51.7,0,0,1-14.87,4.08A26,26,0,0,0,123.63,14.6a51.9,51.9,0,0,1-16.45,6.29A25.92,25.92,0,0,0,63.05,44.51,73.53,73.53,0,0,1,9.67,17.45a25.92,25.92,0,0,0,8,34.58A25.71,25.71,0,0,1,6,48.78c0,.11,0,.22,0,.33A25.91,25.91,0,0,0,26.73,74.5a25.86,25.86,0,0,1-11.7.44,25.93,25.93,0,0,0,24.2,18A52,52,0,0,1,7.06,104a52.72,52.72,0,0,1-6.18-.36,73.32,73.32,0,0,0,39.7,11.63" transform="translate(-0.88 -12.7)"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128px" height="128px" viewBox="0 0 128 128" version="1.1">
<g id="surface1">
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(11.372549%,63.137255%,94.901961%);fill-opacity:1;" d="M 40.253906 127.636719 C 88.558594 127.636719 114.972656 78.679688 114.972656 36.234375 C 114.972656 34.84375 114.972656 33.457031 114.898438 32.078125 C 120.039062 27.53125 124.476562 21.898438 128 15.445312 C 123.210938 18.046875 118.128906 19.75 112.921875 20.507812 C 118.402344 16.488281 122.503906 10.171875 124.460938 2.734375 C 119.304688 6.476562 113.664062 9.113281 107.78125 10.535156 C 99.644531 -0.0507812 86.710938 -2.644531 76.234375 4.214844 C 65.761719 11.074219 60.351562 25.675781 63.035156 39.832031 C 41.921875 38.539062 22.246094 26.335938 8.914062 6.269531 C 1.933594 20.941406 5.488281 39.722656 17.023438 49.160156 C 12.875 48.988281 8.816406 47.605469 5.191406 45.128906 C 5.191406 45.265625 5.191406 45.402344 5.191406 45.539062 C 5.191406 60.8125 13.976562 73.976562 26.210938 77.03125 C 22.34375 78.320312 18.285156 78.503906 14.347656 77.574219 C 17.785156 90.667969 27.644531 99.644531 38.882812 99.902344 C 29.578125 108.820312 18.089844 113.652344 6.265625 113.621094 C 4.171875 113.621094 2.078125 113.472656 0 113.175781 C 12.007812 122.609375 25.980469 127.617188 40.253906 127.597656 "/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 623 B

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 79 KiB