Compare commits

...

121 Commits

Author SHA1 Message Date
442d3173c8 don't show context menu entries for ranges when range slider is disabled 2024-03-24 16:46:15 +01:00
627c91e71a change version to 0.2.1 2024-03-24 12:10:20 +01:00
f3a68d0dee add context menu actions to set range start and end 2024-03-24 12:06:48 +01:00
ff3d3ddc27 simplified ScaledScrollbar to (hopefully) fix the issue that the scrollbar became invalid for huge files when used in tandem with the range slider 2024-03-23 17:31:28 +01:00
c63537f84c add icons for range start and end 2024-03-22 15:59:25 +01:00
741454e6f7 remove obsolete method 2024-03-22 15:58:23 +01:00
67e1ee4e06 make circle of stopwatch smaller
maybe this looks better on low res screen
2024-03-21 19:49:35 +01:00
03d615bff0 add shortcut für "copy selection to file" 2024-03-21 19:41:27 +01:00
165b6e0a63 improvements for about dialog 2024-03-21 19:18:50 +01:00
9010d75ff8 update libs 2024-03-21 19:05:56 +01:00
bcbcacf2db pycharm: set sdk name 2024-03-21 18:50:39 +01:00
d1d37ec037 update pyside to 6.6.0 2023-11-27 09:56:16 +01:00
8a6c0659eb update pyside to 5.6.2 2023-08-05 09:37:24 +02:00
a14a76935d update pyside to 5.6.1.1 and pyinstaller to 5.13.0 2023-07-01 13:14:42 +02:00
20f78a983b add view that only shows matches 2023-05-29 19:50:48 +02:00
1950e4a1c4 cleanup 2023-05-29 19:49:42 +02:00
20d8bbfe3e time delta for time diff view is changeable 2023-05-28 10:48:32 +02:00
1bdd7b8071 update libraries 2023-05-20 08:46:50 +02:00
81775cc902 show license in about dialog 2023-03-22 20:03:25 +01:00
6e0eaa392f use a nicer wrapped version of the lgpl 2023-03-22 19:34:00 +01:00
ee022204d5 update setuptools to 67.3.3 2023-02-21 19:21:08 +01:00
b596f0b220 update libraries 2023-02-18 10:57:44 +01:00
707aaf7323 fix select all
Got broken when the range slider was added.
Select all did not select the last 4kb.
2023-02-17 20:16:18 +01:00
df78576f8e use icon from theme if available 2023-02-16 19:28:22 +01:00
3c0cb97703 if a file is given on the command line, then open only this file 2023-01-30 19:28:27 +01:00
82c74e48b5 add fallback icon for color chooser 2023-01-30 18:58:24 +01:00
ab74d11827 add fallback icons 2023-01-30 18:58:01 +01:00
3dcdbdf2d5 skip update of big text if file was not modified 2023-01-29 10:36:56 +01:00
3c47db1d98 clear status bar when removing selection 2023-01-29 09:35:40 +01:00
ee514dc305 add support for regex groups
If a filter regex contains groups, then we only highlight the group matches.
2023-01-29 09:26:04 +01:00
d47949fdca show how many bytes are selected 2023-01-28 18:52:24 +01:00
ee181fb8fc add icons for list modifications 2023-01-26 20:00:50 +01:00
07a6ec69fa make it possible to disable highlighters 2023-01-26 19:31:33 +01:00
8eee09680e update copyright notice to include the year 2023 2023-01-23 19:47:24 +01:00
f952efd1cc Merge remote-tracking branch 'origin/master' 2023-01-23 19:41:15 +01:00
1901747d91 reduce padding around color button
other form elements don't have that padding
2023-01-23 19:37:07 +01:00
b393e4e850 support custom colors in constructor 2023-01-23 19:27:20 +01:00
b0a00b27f5 hide size and modifcation date columns in files browser 2023-01-23 14:25:28 +01:00
04377ca956 remove old highlightingdialog 2023-01-22 19:05:58 +01:00
e8fe759f70 add new highlight dialog 2023-01-22 18:53:38 +01:00
bdac446d51 fix not all characters shown when line contains tabs 2023-01-21 09:47:33 +01:00
49048f5820 fix some tests after renaming method 2023-01-21 09:42:48 +01:00
d17c0a56f9 add missing return types 2023-01-21 09:42:31 +01:00
3e3f51d152 update libraries 2023-01-21 09:07:54 +01:00
ad7787f82d exclude more folder from indexing 2022-12-21 10:38:03 +01:00
1e44790437 move remove unused icons from binary distribution 2022-12-21 10:37:04 +01:00
40623b93bd update python to 3.11 2022-12-21 10:18:27 +01:00
6ef14a854a unused dependency to urllib3 2022-12-21 10:16:54 +01:00
dd42144e5e update to python 3.11 2022-12-21 10:14:36 +01:00
323b204d7c Merge pull request 'only-draw-visible-stuff' (#2) from only-draw-visible-stuff into master
Reviewed-on: #2
2022-12-19 17:00:19 +00:00
209ad71235 don't use anti aliasing for horizontal line when drawing handle 2022-12-19 16:18:39 +01:00
493649dad5 skip highlighter when query is empty 2022-12-18 19:57:45 +01:00
addca937c5 only draw visible highlight 2022-12-18 19:37:36 +01:00
d0fb7d4362 only draw visible full line background instead of maximal possible width 2022-12-18 19:26:02 +01:00
ef7694fdc6 only draw visible text 2022-12-18 19:23:14 +01:00
47334e7f07 update dependencies 2022-12-18 18:44:46 +01:00
ed221d908d respect range limit when selecting all text 2022-12-17 19:28:06 +01:00
9c311f8c67 respect range limit when searching 2022-12-17 18:35:22 +01:00
b8433306fa update min/max for scaledScrollbar
has some issues when scrolling to the end
2022-12-17 18:04:42 +01:00
ed94d7bc67 add more tests 2022-12-17 15:32:50 +01:00
a06a2d01f3 intermediate state after fixing the logfilemodel test 2022-12-17 10:06:15 +01:00
5df0dc0c82 remove obsolete method 2022-12-01 17:55:39 +01:00
e8f9e140fd add range slider component 2022-12-01 17:48:05 +01:00
32c7da6ee5 update pyside to 6.4.0 2022-10-22 09:30:00 +02:00
2f32ecfbf6 disable debug logging 2022-09-18 16:18:02 +02:00
b2db955e9e add follow tail feature 2022-09-18 16:08:41 +02:00
2d414442e5 add custom icon for notes plugin menu item 2022-09-18 09:29:07 +02:00
6a18caaa9d update pyside to 6.3.2 and pyinstaller to 5.4.1 2022-09-17 10:41:17 +02:00
84ba6e3766 fix status bar text prevents window from being made smaller 2022-09-17 10:28:39 +02:00
5c7c057260 all ionicons removed 2022-09-11 09:15:03 +02:00
86f3798c46 use custom stopwatch icon 2022-09-11 09:13:40 +02:00
7f6f1578ba use custom search icon 2022-09-11 08:44:24 +02:00
116325b160 remove unused ionicons 2022-09-10 20:44:48 +02:00
ce21f6f9ed use custom icons for favorites 2022-09-10 20:41:44 +02:00
6fa84d6b2f use custom icons for checkboxes 2022-09-10 20:24:54 +02:00
b93a5d7009 use custom folder icon 2022-09-03 18:31:23 +02:00
160fcaeafc remove icon for recent files menu 2022-09-03 18:31:08 +02:00
d35d87f4a9 use custom document-save-as icon 2022-09-03 18:12:25 +02:00
59c3170757 use custom select all icon 2022-09-03 17:57:02 +02:00
11f4262b96 use custom copy icon 2022-09-03 17:32:25 +02:00
a9038b7231 rename select file icon 2022-09-03 17:31:53 +02:00
7827dd4ded replace open document icon with my own custom icon 2022-09-01 21:01:46 +02:00
a503b6010f add cmd arguments to open files 2022-08-30 20:27:42 +02:00
95486a0eda fix usage of dedent 2022-08-30 19:40:06 +02:00
eac55de2a2 catch errors during install 2022-08-30 19:38:23 +02:00
247d2d543e don't overwrite icon with every start 2022-08-30 19:38:07 +02:00
40598e3b40 add krowlog.ico to have icon on Windows 2022-08-29 17:57:20 +02:00
fa9f960ee8 make eye a little bit bigger
so that it may be visible in smaller images
2022-08-29 17:54:44 +02:00
64ed9ce3a6 Merge remote-tracking branch 'origin/master' 2022-08-29 17:16:42 +02:00
1ad2323753 update installer to work with Windows and Linux 2022-08-29 16:43:08 +02:00
33b79d6935 prepare to add command line options 2022-08-28 14:31:55 +02:00
bfe8ae460e clear selection highlight when query text changes 2022-08-28 14:20:27 +02:00
44a1c77d3c cleanup 2022-08-28 14:13:29 +02:00
95e5b944de fix selection of text when selecting backwards 2022-08-28 14:02:19 +02:00
6adbd7d2c5 use nicer string join api 2022-08-28 14:00:38 +02:00
0bb965336e fix indentation 2022-08-28 13:06:51 +02:00
ac133b07e4 improvements to desktop file
Add german comment. (Seems to be ignored in GNOME.)
Add generic name.
Add keywords.
Add %F parameter to Exec. Currently not supported, but I may add support later.
2022-08-28 12:40:45 +02:00
17f954205b remove radialGradient
The radialGradient was used for the eye.
The eye looks better with it, but Qt does not support it.
2022-08-28 12:36:45 +02:00
e405e908db use different constructor to more reliably set the parent for menus and actions
This may make rendering menus more stable on hi-dpi monitors.
It worked before, but sometimes it had some weird glitches.
2022-08-28 12:00:10 +02:00
fd840a2c95 create a desktop file when running the binary distribution on Linux 2022-08-28 11:54:19 +02:00
554220148f cleanup 2022-08-28 09:34:09 +02:00
a4052bb43e use Icon instead of QIcon 2022-08-28 09:07:34 +02:00
272a0fa076 create binary distribution for Linux with pyinstaller 2022-08-28 09:02:37 +02:00
23cdc14b3b remove unnecessary stuff 2022-08-28 08:45:23 +02:00
32028a54b9 make version accessible without having to read a file
This works when krowlog is bundled into a single executable
2022-08-28 08:44:45 +02:00
b6aa3083d2 find icons if cwd is not in the program root 2022-08-27 17:59:37 +02:00
0c55fdc44b Update 'README.md' 2022-08-27 09:16:31 +00:00
750456642c use krowlog svg as icon 2022-08-27 11:08:56 +02:00
27dbc9085d cleanup 2022-08-26 19:24:16 +02:00
7b0d7f8807 use PySide6-Essentials instead of full install
This reduces the size to 'just' 220mb.
2022-08-26 19:00:37 +02:00
bbedaf73de highlight other matches of selected text 2022-08-26 15:31:45 +02:00
6040b1633d cleanup 2022-08-26 14:31:51 +02:00
1ddd589cc2 support Windows file share locations in drag&drop 2022-08-26 14:09:34 +02:00
5e81d90c1f update urllib3 2022-08-25 19:54:28 +02:00
46a49f1b90 get more library versions programmatically 2022-08-25 19:38:18 +02:00
3772e696ce make version label selectable 2022-08-25 19:27:05 +02:00
f9d10d37ec translate the number of matched lines text 2022-08-25 19:23:46 +02:00
4a082ab8ee fix a few warnings 2022-08-25 19:19:30 +02:00
fcc570d75f show how many lines match 2022-08-25 19:15:30 +02:00
7732d95626 remove abstract method annotation from copy method
The method was not abstract.
2022-08-25 19:13:59 +02:00
fc0922c661 rename folder filesbrowserplugin is in 2022-08-25 19:12:16 +02:00
140 changed files with 2048 additions and 1611 deletions

6
.gitignore vendored
View File

@@ -1,2 +1,8 @@
__pycache__ __pycache__
3rd-party 3rd-party
build
dist
testbed
icons-not-used
venv*
*.spec

5
.idea/misc.xml generated
View File

@@ -1,4 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (krowlog)" project-jdk-type="Python SDK" /> <component name="Black">
<option name="sdkName" value="Python 3.11 (krowlog)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (krowlog)" project-jdk-type="Python SDK" />
</project> </project>

6
.idea/ravenlog.iml generated
View File

@@ -4,8 +4,12 @@
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv310" /> <excludeFolder url="file://$MODULE_DIR$/venv310" />
<excludeFolder url="file://$MODULE_DIR$/3rd-party" /> <excludeFolder url="file://$MODULE_DIR$/3rd-party" />
<excludeFolder url="file://$MODULE_DIR$/venv311" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/dist" />
<excludeFolder url="file://$MODULE_DIR$/icons-not-used" />
</content> </content>
<orderEntry type="jdk" jdkName="Python 3.10 (krowlog)" jdkType="Python SDK" /> <orderEntry type="jdk" jdkName="Python 3.11 (krowlog)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
</module> </module>

421
LICENSE
View File

@@ -1,304 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007 Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions. 0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL. 1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions. You may convey a covered work under sections 3 and 4 of this License
If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: without being bound by section 3 of the GNU GPL.
a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or 2. Conveying Modified Versions.
b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
3. Object Code Incorporating Material from Library Header Files. a) under this License, provided that you make a good faith effort to
The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
b) Accompany the object code with a copy of the GNU GPL and this license document. 3. Object Code Incorporating Material from Library Header Files.
4. Combined Works. The object code form of an Application may incorporate material from
You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license document. b) Accompany the object code with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. 4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following: d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
5. Combined Libraries. Corresponding Source.
You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:
1) Use a suitable shared library mechanism for linking with the
a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
6. Revised Versions of the GNU Lesser General Public License. Version.
The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
e) Provide Installation Information, but only if you would otherwise
Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall necessary to install and execute a modified version of the
apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
GNU GENERAL PUBLIC LICENSE you use option 4d0, the Installation Information must accompany
Version 3, 29 June 2007 the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/> Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
5. Combined Libraries.
Preamble
You may place library facilities that are a work based on the
The GNU General Public License is a free, copyleft license for software and other kinds of works. Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. License, and convey such a combined library under terms of your
choice, if you do both of the following:
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
a) Accompany the combined library with a copy of the same work based
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
b) Give prominent notice with the combined library that part of it
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
6. Revised Versions of the GNU Lesser General Public License.
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
The Free Software Foundation may publish revised and/or new versions
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
The precise terms and conditions for copying, distribution and modification follow. differ in detail to address new problems or concerns.
TERMS AND CONDITIONS Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
0. Definitions. of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
“This License” refers to version 3 of the GNU General Public License. conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. General Public License ever published by the Free Software Foundation.
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
A “covered work” means either the unmodified Program or a work based on the Program. apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. Library.
To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
1. Source Code.
The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
7. Additional Terms.
“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
11. Patents.
A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.
You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.

View File

@@ -1,4 +1,4 @@
# ![Logo for KrowLog](icons/icon.png "Logo for KrowLog") KrowLog # ![Logo for KrowLog](icons/krowlog.svg "Logo for KrowLog") KrowLog
KrowLog is a viewer for text files of arbitrary size. KrowLog is a viewer for text files of arbitrary size.

View File

@@ -1 +0,0 @@
0.2-alpha

View File

@@ -1,3 +1,6 @@
krow_icon = "icons/icon.png" import os
krow_icon = "icons" + os.sep + "krowlog.svg"
license_file = os.path.dirname(os.path.realpath(__file__)) + os.sep + "LICENSE"
tab_width = 4 tab_width = 4

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-a</title>
<polyline points="112 268 256 412 400 268"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px"/>
<line x1="256" y1="392" x2="256" y2="100"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px"/>
</svg>

Before

Width:  |  Height:  |  Size: 430 B

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-a</title>
<polyline points="112 244 256 100 400 244"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px"/>
<line x1="256" y1="120" x2="256" y2="412"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px"/>
</svg>

Before

Width:  |  Height:  |  Size: 430 B

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-h</title>
<path d="M452.37,59.63h0a40.49,40.49,0,0,0-57.26,0L184,294.74c23.08,4.7,46.12,27.29,49.26,49.26L452.37,116.89A40.49,40.49,0,0,0,452.37,59.63Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M138,336c-29.88,0-54,24.5-54,54.86,0,23.95-20.88,36.57-36,36.57C64.56,449.74,92.82,464,120,464c39.78,0,72-32.73,72-73.14C192,360.5,167.88,336,138,336Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 645 B

View File

@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-h</title>
<path d="M393.87,190a32.1,32.1,0,0,1-45.25,0l-26.57-26.57a32.09,32.09,0,0,1,0-45.26L382.19,58a1,1,0,0,0-.3-1.64c-38.82-16.64-89.15-8.16-121.11,23.57-30.58,30.35-32.32,76-21.12,115.84a31.93,31.93,0,0,1-9.06,32.08L64,380a48.17,48.17,0,1,0,68,68L285.86,281a31.93,31.93,0,0,1,31.6-9.13C357,282.46,402,280.47,432.18,250.68c32.49-32,39.5-88.56,23.75-120.93a1,1,0,0,0-1.6-.26Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<circle cx="96" cy="416" r="16"/>
</svg>

Before

Width:  |  Height:  |  Size: 642 B

View File

@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-b</title>
<path d="M98,190.06,237.78,353.18a24,24,0,0,0,36.44,0L414,190.06c13.34-15.57,2.28-39.62-18.22-39.62H116.18C95.68,150.44,84.62,174.49,98,190.06Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 278 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-l</title>
<rect x="416" y="96" width="64" height="320" rx="8" ry="8"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<rect x="288" y="176" width="64" height="240" rx="8" ry="8"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<rect x="160" y="240" width="64" height="176" rx="8" ry="8"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<rect x="32" y="304" width="64" height="112" rx="8" ry="8"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 709 B

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-l</title>
<polyline points="352 176 217.6 336 160 272"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<rect x="64" y="64" width="384" height="384" rx="48" ry="48"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 430 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<polyline points="416 128 192 384 96 288"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 280 B

View File

@@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-m</title>
<path d="M448,256c0-106-86-192-192-192S64,150,64,256s86,192,192,192S448,362,448,256Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
<line x1="320" y1="320" x2="192" y2="192"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="192" y1="320" x2="320" y2="192"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 596 B

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-m</title>
<polyline points="160 368 32 256 160 144"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<polyline points="352 368 480 256 352 144"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 434 B

View File

@@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-m</title>
<polyline points="160 368 32 256 160 144"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<polyline points="352 368 480 256 352 144"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="304" y1="96" x2="208" y2="416"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 582 B

View File

@@ -1,10 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-m</title>
<circle cx="256" cy="256" r="26"/>
<circle cx="346" cy="256" r="26"/>
<circle cx="166" cy="256" r="26"/>
<polyline points="160 368 32 256 160 144"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<polyline points="352 368 480 256 352 144"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 551 B

View File

@@ -1,10 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-m</title>
<path d="M430.11,347.9c-6.6-6.1-16.3-7.6-24.6-9-11.5-1.9-15.9-4-22.6-10-14.3-12.7-14.3-31.1,0-43.8l30.3-26.9c46.4-41,46.4-108.2,0-149.2-34.2-30.1-80.1-45-127.8-45-55.7,0-113.9,20.3-158.8,60.1-83.5,73.8-83.5,194.7,0,268.5,41.5,36.7,97.5,55,152.9,55.4h1.7c55.4,0,110-17.9,148.8-52.4C444.41,382.9,442,359,430.11,347.9Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
<circle cx="144" cy="208" r="32"/>
<circle cx="152" cy="311" r="32"/>
<circle cx="224" cy="144" r="32"/>
<circle cx="256" cy="367" r="48"/>
<circle cx="328" cy="144" r="32"/>
</svg>

Before

Width:  |  Height:  |  Size: 724 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-m</title>
<path d="M436.67,184.11a27.17,27.17,0,0,1-38.3,0l-22.48-22.49a27.15,27.15,0,0,1,0-38.29l50.89-50.89a.85.85,0,0,0-.26-1.38C393.68,57,351.09,64.15,324.05,91c-25.88,25.69-27.35,64.27-17.87,98a27,27,0,0,1-7.67,27.14l-173,160.76a40.76,40.76,0,1,0,57.57,57.54l162.15-173.3A27,27,0,0,1,372,253.44c33.46,8.94,71.49,7.26,97.07-17.94,27.49-27.08,33.42-74.94,20.1-102.33a.85.85,0,0,0-1.36-.22Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M224,284c-17.48-17-25.49-24.91-31-30.29a18.24,18.24,0,0,1-3.33-21.35,20.76,20.76,0,0,1,3.5-4.62l15.68-15.29a18.66,18.66,0,0,1,5.63-3.87,18.11,18.11,0,0,1,20,3.62c5.45,5.29,15.43,15,33.41,32.52"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M317.07,291.3c40.95,38.1,90.62,83.27,110,99.41a13.46,13.46,0,0,1,.94,19.92L394.63,444a14,14,0,0,1-20.29-.76c-16.53-19.18-61.09-67.11-99.27-107"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M17.34,193.5l29.41-28.74a4.71,4.71,0,0,1,3.41-1.35,4.85,4.85,0,0,1,3.41,1.35h0a9.86,9.86,0,0,0,8.19,2.77c3.83-.42,7.92-1.6,10.57-4.12,6-5.8-.94-17.23,4.34-24.54a207,207,0,0,1,19.78-22.6c6-5.88,29.84-28.32,69.9-44.45A107.31,107.31,0,0,1,206.67,64c22.59,0,40,10,46.26,15.67a89.54,89.54,0,0,1,10.28,11.64A78.92,78.92,0,0,0,254,88.54,68.82,68.82,0,0,0,234,87.28c-13.33,1.09-29.41,7.26-38,14-13.9,11-19.87,25.72-20.81,44.71-.68,14.12,2.72,22.1,36.1,55.49a6.6,6.6,0,0,1-.34,9.16l-18.22,18a6.88,6.88,0,0,1-9.54.09c-21.94-21.94-36.65-33.09-45-38.16s-15.07-6.5-18.3-6.85a30.85,30.85,0,0,0-18.27,3.87,11.39,11.39,0,0,0-2.64,2,14.14,14.14,0,0,0,.42,20.08l1.71,1.6a4.63,4.63,0,0,1,0,6.64L71.73,246.6A4.71,4.71,0,0,1,68.32,248a4.86,4.86,0,0,1-3.41-1.35L17.34,200.22A4.88,4.88,0,0,1,17.34,193.5Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<rect x="128" y="128" width="336" height="336" rx="57" ry="57"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<path d="M383.5,128l.5-24a56.16,56.16,0,0,0-56-56H112a64.19,64.19,0,0,0-64,64V328a56.16,56.16,0,0,0,56,56h24"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 493 B

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-n</title>
<path d="M384,224V408a40,40,0,0,1-40,40H104a40,40,0,0,1-40-40V168a40,40,0,0,1,40-40H271.48"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M459.94,53.25a16.06,16.06,0,0,0-23.22-.56L424.35,65a8,8,0,0,0,0,11.31l11.34,11.32a8,8,0,0,0,11.34,0l12.06-12C465.19,69.54,465.76,59.62,459.94,53.25Z"/>
<path d="M399.34,90,218.82,270.2a9,9,0,0,0-2.31,3.93L208.16,299a3.91,3.91,0,0,0,4.86,4.86l24.85-8.35a9,9,0,0,0,3.93-2.31L422,112.66A9,9,0,0,0,422,100L412.05,90A9,9,0,0,0,399.34,90Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 679 B

View File

@@ -1,14 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-h</title>
<circle cx="104" cy="152" r="56"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<circle cx="104" cy="360" r="56"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M157,175,146,190,183,205s3.46-6.42,7-10Z"
style="fill:none;stroke:#000;stroke-linecap:square;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M154.17,334.43,460,162c-2.5-6.7-28-12-64-4-29.12,6.47-121.16,29.05-159.16,56.05C205.85,236.06,227,272,192,298c-25.61,19-44.43,22.82-44.43,22.82Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M344.47,278.24,295,306.67c14.23,6.74,65.54,33.27,117,36.33,14.92.89,30,.39,39-6Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<circle cx="256" cy="240" r="32" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<path d="M416,221.25V416a48,48,0,0,1-48,48H144a48,48,0,0,1-48-48V96a48,48,0,0,1,48-48h98.75a32,32,0,0,1,22.62,9.37L406.63,198.63A32,32,0,0,1,416,221.25Z"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<path d="M256,56V176a32,32,0,0,0,32,32H408"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 518 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-k</title>
<path d="M416,221.25V416a48,48,0,0,1-48,48H144a48,48,0,0,1-48-48V96a48,48,0,0,1,48-48h98.75a32,32,0,0,1,22.62,9.37L406.63,198.63A32,32,0,0,1,416,221.25Z"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<path d="M256,56V176a32,32,0,0,0,32,32H408"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="176" y1="288" x2="336" y2="288"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="176" y1="368" x2="336" y2="368"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 816 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<path d="M336,264.13V436c0,24.3-19.05,44-42.95,44H107C83.05,480,64,460.3,64,436V172a44.26,44.26,0,0,1,44-44h94.12a24.55,24.55,0,0,1,17.49,7.36l109.15,111A25.4,25.4,0,0,1,336,264.13Z"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<path d="M200,128V236a28.34,28.34,0,0,0,28,28H336"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M176,128V76a44.26,44.26,0,0,1,44-44h94a24.83,24.83,0,0,1,17.61,7.36l109.15,111A25.09,25.09,0,0,1,448,168V340c0,24.3-19.05,44-42.95,44H344"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<path d="M312,32V140a28.34,28.34,0,0,0,28,28H448"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 945 B

View File

@@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-f</title>
<path d="M336,176h40a40,40,0,0,1,40,40V424a40,40,0,0,1-40,40H136a40,40,0,0,1-40-40V216a40,40,0,0,1,40-40h40"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<polyline points="176 272 256 352 336 272"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="256" y1="48" x2="256" y2="336"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 645 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-j</title>
<rect x="128" y="128" width="336" height="336" rx="57" ry="57"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<path d="M383.5,128l.5-24a56.16,56.16,0,0,0-56-56H112a64.19,64.19,0,0,0-64,64V328a56.16,56.16,0,0,0,56,56h24"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="296" y1="216" x2="296" y2="376"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="376" y1="296" x2="216" y2="296"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 791 B

View File

@@ -1,8 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-f</title>
<circle cx="256" cy="256" r="26"/>
<circle cx="346" cy="256" r="26"/>
<circle cx="166" cy="256" r="26"/>
<path d="M448,256c0-106-86-192-192-192S64,150,64,256s86,192,192,192S448,362,448,256Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 415 B

View File

@@ -1,8 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-f</title>
<circle cx="256" cy="256" r="26"/>
<circle cx="256" cy="346" r="26"/>
<circle cx="256" cy="166" r="26"/>
<path d="M448,256c0-106-86-192-192-192S64,150,64,256s86,192,192,192S448,362,448,256Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 415 B

View File

@@ -1,8 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-m</title>
<path d="M456.64,162.86,349.12,55.36c-13.15-13.14-28.68-7.17-41.82,6l-11.95,12c-26.13,26.13-27.62,58.38-29.42,83.31-.89,12.24-9.78,27.55-18.51,36.28L58.58,381.67C42.23,398,45.89,421.09,62.31,437.51l12.17,12.17c16.36,16.35,39.43,20.16,55.86,3.74l188.83-188.8c8.74-8.74,24-17.55,36.29-18.52,24.87-1.86,58.62-4.85,83.26-29.49l11.94-11.94C463.81,191.53,469.78,176,456.64,162.86Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
<circle cx="224.68" cy="287.28" r="20"/>
<line x1="289" y1="81" x2="431" y2="223"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 780 B

View File

@@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-n</title>
<line x1="176" y1="48" x2="336" y2="48"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<line x1="118" y1="304" x2="394" y2="304"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M208,48v93.48a64.09,64.09,0,0,1-9.88,34.18L73.21,373.49C48.4,412.78,76.63,464,123.08,464H388.92c46.45,0,74.68-51.22,49.87-90.51L313.87,175.66A64.09,64.09,0,0,1,304,141.48V48"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 711 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-n</title>
<path d="M408,96H252.11a23.89,23.89,0,0,1-13.31-4L211,73.41A55.77,55.77,0,0,0,179.89,64H104a56.06,56.06,0,0,0-56,56v24H464C464,113.12,438.88,96,408,96Z"/>
<path d="M423.75,448H88.25a56,56,0,0,1-55.93-55.15L16.18,228.11l0-.28A48,48,0,0,1,64,176h384.1a48,48,0,0,1,47.8,51.83l0,.28L479.68,392.85A56,56,0,0,1,423.75,448ZM479.9,226.55h0Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 471 B

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-n</title>
<path d="M440,432H72a40,40,0,0,1-40-40V120A40,40,0,0,1,72,80h75.89a40,40,0,0,1,22.19,6.72l27.84,18.56A40,40,0,0,0,220.11,112H440a40,40,0,0,1,40,40V392A40,40,0,0,1,440,432Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="32" y1="192" x2="480" y2="192"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 555 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-n</title>
<path d="M35.4,87.12,204.05,283.56A16.07,16.07,0,0,1,208,294V413.32a7.93,7.93,0,0,0,5.39,7.59l80.15,26.67A7.94,7.94,0,0,0,304,440V294A16.07,16.07,0,0,1,308,283.56L476.6,87.12A14,14,0,0,0,466,64H46.05A14,14,0,0,0,35.4,87.12Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 459 B

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-i</title>
<path d="M277.42,247a24.68,24.68,0,0,0-4.08-5.47L255,223.44a21.63,21.63,0,0,0-6.56-4.57,20.93,20.93,0,0,0-23.28,4.27c-6.36,6.26-18,17.68-39,38.43C146,301.3,71.43,367.89,37.71,396.29a16,16,0,0,0-1.09,23.54l39,39.43a16.13,16.13,0,0,0,23.67-.89c29.24-34.37,96.3-109,136-148.23,20.39-20.06,31.82-31.58,38.29-37.94A21.76,21.76,0,0,0,277.42,247Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M478.43,201l-34.31-34a5.44,5.44,0,0,0-4-1.59,5.59,5.59,0,0,0-4,1.59h0a11.41,11.41,0,0,1-9.55,3.27c-4.48-.49-9.25-1.88-12.33-4.86-7-6.86,1.09-20.36-5.07-29a242.88,242.88,0,0,0-23.08-26.72c-7.06-7-34.81-33.47-81.55-52.53a123.79,123.79,0,0,0-47-9.24c-26.35,0-46.61,11.76-54,18.51-5.88,5.32-12,13.77-12,13.77A91.29,91.29,0,0,1,202.35,77a79.53,79.53,0,0,1,23.28-1.49C241.19,76.8,259.94,84.1,270,92c16.21,13,23.18,30.39,24.27,52.83.8,16.69-15.23,37.76-30.44,54.94a7.85,7.85,0,0,0,.4,10.83l21.24,21.23a8,8,0,0,0,11.14.1c13.93-13.51,31.09-28.47,40.82-34.46s17.58-7.68,21.35-8.09A35.71,35.71,0,0,1,380.08,194a13.65,13.65,0,0,1,3.08,2.38c6.46,6.56,6.07,17.28-.5,23.74l-2,1.89a5.5,5.5,0,0,0,0,7.84l34.31,34a5.5,5.5,0,0,0,4,1.58,5.65,5.65,0,0,0,4-1.58L478.43,209A5.82,5.82,0,0,0,478.43,201Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-i</title>
<path d="M256,32C132.29,32,32,132.29,32,256S132.29,480,256,480,480,379.71,480,256,379.71,32,256,32ZM192,256a64,64,0,1,1,64,64A64,64,0,0,1,192,256Zm237.24-62.29L342.91,199a104.86,104.86,0,0,0-29.86-29.86l5.24-86.33a185,185,0,0,1,111,111ZM125.89,125.89a183.44,183.44,0,0,1,67.82-43.13L199,169.09A104.86,104.86,0,0,0,169.09,199l-86.33-5.24A183.44,183.44,0,0,1,125.89,125.89ZM82.76,318.29l86.33-5.24A104.86,104.86,0,0,0,199,342.91l-5.24,86.33A185,185,0,0,1,82.76,318.29Zm303.35,67.82a183.44,183.44,0,0,1-67.82,43.13l-5.24-86.33a104.86,104.86,0,0,0,29.86-29.86l86.33,5.24A183.44,183.44,0,0,1,386.11,386.11Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 736 B

View File

@@ -1,8 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<path d="M256,80A176,176,0,1,0,432,256,176,176,0,0,0,256,80Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M200,202.29s.84-17.5,19.57-32.57C230.68,160.77,244,158.18,256,158c10.93-.14,20.69,1.67,26.53,4.45,10,4.76,29.47,16.38,29.47,41.09,0,26-17,37.81-36.37,50.8S251,281.43,251,296"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:28px"/>
<circle cx="250" cy="348" r="20"/>
</svg>

Before

Width:  |  Height:  |  Size: 603 B

View File

@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<path d="M160,164s1.44-33,33.54-59.46C212.6,88.83,235.49,84.28,256,84c18.73-.23,35.47,2.94,45.48,7.82C318.59,100.2,352,120.6,352,164c0,45.67-29.18,66.37-62.35,89.18S248,298.36,248,324"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:40px"/>
<circle cx="248" cy="399.99" r="32"/>
</svg>

Before

Width:  |  Height:  |  Size: 460 B

View File

@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-i</title>
<path d="M145.61,464H366.39c19.8,0,35.55-16.29,33.42-35.06C386.06,308,304,310,304,256s83.11-51,95.8-172.94c2-18.78-13.61-35.06-33.41-35.06H145.61c-19.8,0-35.37,16.28-33.41,35.06C124.89,205,208,201,208,256s-82.06,52-95.8,172.94C110.06,447.71,125.81,464,145.61,464Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M343.3,432H169.13c-15.6,0-20-18-9.06-29.16C186.55,376,240,356.78,240,326V224c0-19.85-38-35-61.51-67.2-3.88-5.31-3.49-12.8,6.37-12.8H327.59c8.41,0,10.23,7.43,6.4,12.75C310.82,189,272,204.05,272,224V326c0,30.53,55.71,47,80.4,76.87C362.35,414.91,358.87,432,343.3,432Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 780 B

View File

@@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-a</title>
<path d="M434.8,137.65,285.44,69.55c-16.19-7.4-42.69-7.4-58.88,0L77.3,137.65c-17.6,8-17.6,21.09,0,29.09l148,67.5c16.89,7.7,44.69,7.7,61.58,0l148-67.5C452.4,158.74,452.4,145.64,434.8,137.65Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M160,308.52,77.3,345.63c-17.6,8-17.6,21.1,0,29.1l148,67.5c16.89,7.69,44.69,7.69,61.58,0l148-67.5c17.6-8,17.6-21.1,0-29.1l-79.94-38.47"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M160,204.48,77.2,241.64c-17.6,8-17.6,21.1,0,29.1l148,67.49c16.89,7.7,44.69,7.7,61.58,0l148-67.49c17.7-8,17.7-21.1.1-29.1L352,204.48"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 925 B

View File

@@ -1,15 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-l</title>
<rect x="32" y="96" width="64" height="368" rx="16" ry="16"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<line x1="112" y1="224" x2="240" y2="224"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="112" y1="400" x2="240" y2="400"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<rect x="112" y="160" width="128" height="304" rx="16" ry="16"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<rect x="256" y="48" width="96" height="416" rx="16" ry="16"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<path d="M422.46,96.11l-40.4,4.25c-11.12,1.17-19.18,11.57-17.93,23.1l34.92,321.59c1.26,11.53,11.37,20,22.49,18.84l40.4-4.25c11.12-1.17,19.18-11.57,17.93-23.1L445,115C443.69,103.42,433.58,94.94,422.46,96.11Z"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,21 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-i</title>
<line x1="368" y1="128" x2="448" y2="128"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="64" y1="128" x2="304" y2="128"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="368" y1="384" x2="448" y2="384"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="64" y1="384" x2="304" y2="384"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="208" y1="256" x2="448" y2="256"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="64" y1="256" x2="144" y2="256"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<circle cx="336" cy="128" r="32"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<circle cx="176" cy="256" r="32"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<circle cx="336" cy="384" r="32"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-k</title>
<polygon points="364.13 125.25 87 403 64 448 108.99 425 386.75 147.87 364.13 125.25"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M420.69,68.69,398.07,91.31l22.62,22.63,22.62-22.63a16,16,0,0,0,0-22.62h0A16,16,0,0,0,420.69,68.69Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 538 B

View File

@@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-b</title>
<path d="M288,193s12.18-6-32-6a80,80,0,1,0,80,80"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:28px"/>
<polyline points="256 149 296 189 256 229"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:28px"/>
<path d="M256,64C150,64,64,150,64,256s86,192,192,192,192-86,192-192S362,64,256,64Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 606 B

View File

@@ -1,8 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-b</title>
<path d="M448,256c0-106-86-192-192-192S64,150,64,256s86,192,192,192S448,362,448,256Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M341.54,197.85l-11.37-13.23a103.37,103.37,0,1,0,22.71,105.84"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M367.32,162a8.44,8.44,0,0,0-6,2.54l-59.54,59.54a8.61,8.61,0,0,0,6.09,14.71h59.54a8.62,8.62,0,0,0,8.62-8.62V170.61a8.61,8.61,0,0,0-8.68-8.63Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 632 B

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<path d="M448,256c0-106-86-192-192-192S64,150,64,256s86,192,192,192S448,362,448,256Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
<line x1="336" y1="256" x2="176" y2="256"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 447 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-p</title>
<path d="M380.93,57.37A32,32,0,0,0,358.3,48H94.22A46.21,46.21,0,0,0,48,94.22V417.78A46.21,46.21,0,0,0,94.22,464H417.78A46.36,46.36,0,0,0,464,417.78V153.7a32,32,0,0,0-9.37-22.63ZM256,416a64,64,0,1,1,64-64A63.92,63.92,0,0,1,256,416Zm48-224H112a16,16,0,0,1-16-16V112a16,16,0,0,1,16-16H304a16,16,0,0,1,16,16v64A16,16,0,0,1,304,192Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 563 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-k</title>
<path d="M336,448h56a56,56,0,0,0,56-56V336"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M448,176V120a56,56,0,0,0-56-56H336"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M176,448H120a56,56,0,0,1-56-56V336"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M64,176V120a56,56,0,0,1,56-56h56"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 732 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-f</title>
<path d="M256,64C150.13,64,64,150.13,64,256s86.13,192,192,192,192-86.13,192-192S361.87,64,256,64Zm91.31,283.31a16,16,0,0,1-22.62,0l-42.84-42.83a88.08,88.08,0,1,1,22.63-22.63l42.83,42.84A16,16,0,0,1,347.31,347.31Z"/>
<circle cx="232" cy="232" r="56"/>
</svg>

Before

Width:  |  Height:  |  Size: 386 B

View File

@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-f</title>
<path d="M221.09,64A157.09,157.09,0,1,0,378.18,221.09,157.1,157.1,0,0,0,221.09,64Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
<line x1="338.29" y1="338.29" x2="448" y2="448"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 450 B

View File

@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-f</title>
<path d="M464,428,339.92,303.9a160.48,160.48,0,0,0,30.72-94.58C370.64,120.37,298.27,48,209.32,48S48,120.37,48,209.32s72.37,161.32,161.32,161.32a160.48,160.48,0,0,0,94.58-30.72L428,464ZM209.32,319.69A110.38,110.38,0,1,1,319.69,209.32,110.5,110.5,0,0,1,209.32,319.69Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 400 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-l</title>
<ellipse cx="256" cy="128" rx="192" ry="80"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M448,214c0,44.18-86,80-192,80S64,258.18,64,214"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M448,300c0,44.18-86,80-192,80S64,344.18,64,300"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M64,127.24V384.76C64,428.52,150,464,256,464s192-35.48,192-79.24V127.24"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 793 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-q</title>
<path d="M262.29,192.31a64,64,0,1,0,57.4,57.4A64.13,64.13,0,0,0,262.29,192.31ZM416.39,256a154.34,154.34,0,0,1-1.53,20.79l45.21,35.46A10.81,10.81,0,0,1,462.52,326l-42.77,74a10.81,10.81,0,0,1-13.14,4.59l-44.9-18.08a16.11,16.11,0,0,0-15.17,1.75A164.48,164.48,0,0,1,325,400.8a15.94,15.94,0,0,0-8.82,12.14l-6.73,47.89A11.08,11.08,0,0,1,298.77,470H213.23a11.11,11.11,0,0,1-10.69-8.87l-6.72-47.82a16.07,16.07,0,0,0-9-12.22,155.3,155.3,0,0,1-21.46-12.57,16,16,0,0,0-15.11-1.71l-44.89,18.07a10.81,10.81,0,0,1-13.14-4.58l-42.77-74a10.8,10.8,0,0,1,2.45-13.75l38.21-30a16.05,16.05,0,0,0,6-14.08c-.36-4.17-.58-8.33-.58-12.5s.21-8.27.58-12.35a16,16,0,0,0-6.07-13.94l-38.19-30A10.81,10.81,0,0,1,49.48,186l42.77-74a10.81,10.81,0,0,1,13.14-4.59l44.9,18.08a16.11,16.11,0,0,0,15.17-1.75A164.48,164.48,0,0,1,187,111.2a15.94,15.94,0,0,0,8.82-12.14l6.73-47.89A11.08,11.08,0,0,1,213.23,42h85.54a11.11,11.11,0,0,1,10.69,8.87l6.72,47.82a16.07,16.07,0,0,0,9,12.22,155.3,155.3,0,0,1,21.46,12.57,16,16,0,0,0,15.11,1.71l44.89-18.07a10.81,10.81,0,0,1,13.14,4.58l42.77,74a10.8,10.8,0,0,1-2.45,13.75l-38.21,30a16.05,16.05,0,0,0-6.05,14.08C416.17,247.67,416.39,251.83,416.39,256Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-f</title>
<path d="M336,192h40a40,40,0,0,1,40,40V424a40,40,0,0,1-40,40H136a40,40,0,0,1-40-40V232a40,40,0,0,1,40-40h40"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<polyline points="336 128 256 48 176 128"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="256" y1="321" x2="256" y2="48"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 644 B

View File

@@ -1,16 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-q</title>
<path d="M326.1,231.9l-47.5,75.5a31,31,0,0,1-7,7,30.11,30.11,0,0,1-35-49l75.5-47.5a10.23,10.23,0,0,1,11.7,0A10.06,10.06,0,0,1,326.1,231.9Z"/>
<path d="M256,64C132.3,64,32,164.2,32,287.9A223.18,223.18,0,0,0,88.3,436.4c1.1,1.2,2.1,2.4,3.2,3.5a25.19,25.19,0,0,0,37.1-.1,173.13,173.13,0,0,1,254.8,0,25.19,25.19,0,0,0,37.1.1l3.2-3.5A223.18,223.18,0,0,0,480,287.9C480,164.2,379.7,64,256,64Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="256" y1="128" x2="256" y2="160"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<line x1="416" y1="288" x2="384" y2="288"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<line x1="128" y1="288" x2="96" y2="288"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<line x1="165.49" y1="197.49" x2="142.86" y2="174.86"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<line x1="346.51" y1="197.49" x2="369.14" y2="174.86"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-q</title>
<path d="M416,448H96a32.09,32.09,0,0,1-32-32V96A32.09,32.09,0,0,1,96,64H416a32.09,32.09,0,0,1,32,32V416A32.09,32.09,0,0,1,416,448Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 366 B

View File

@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<path d="M480,208H308L256,48,204,208H32l140,96L118,464,256,364,394,464,340,304Z"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
<polygon points="256 48 256 364 118 464 172 304 32 208 204 208 256 48"/>
</svg>

Before

Width:  |  Height:  |  Size: 371 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<path d="M480,208H308L256,48,204,208H32l140,96L118,464,256,364,394,464,340,304Z"
style="fill:none;stroke:#000;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 294 B

View File

@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<path d="M394,480a16,16,0,0,1-9.39-3L256,383.76,127.39,477a16,16,0,0,1-24.55-18.08L153,310.35,23,221.2A16,16,0,0,1,32,192H192.38l48.4-148.95a16,16,0,0,1,30.44,0l48.4,149H480a16,16,0,0,1,9.05,29.2L359,310.35l50.13,148.53A16,16,0,0,1,394,480Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 375 B

View File

@@ -1,12 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-g</title>
<line x1="256" y1="232" x2="256" y2="152"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="256" y1="88" x2="256" y2="72"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px"/>
<line x1="132" y1="132" x2="120" y2="120"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px"/>
<circle cx="256" cy="272" r="32" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M256,96A176,176,0,1,0,432,272,176,176,0,0,0,256,96Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 827 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-g</title>
<circle cx="256" cy="272" r="16"/>
<path d="M280,81.5V72a24,24,0,0,0-48,0v9.5a191,191,0,0,0-84.43,32.13L137,103A24,24,0,0,0,103,137l8.6,8.6A191.17,191.17,0,0,0,64,272c0,105.87,86.13,192,192,192s192-86.13,192-192C448,174.26,374.58,93.34,280,81.5ZM256,320a48,48,0,0,1-16-93.25V152a16,16,0,0,1,32,0v74.75A48,48,0,0,1,256,320Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 461 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-b</title>
<path d="M448,256c0-106-86-192-192-192S64,150,64,256s86,192,192,192S448,362,448,256Z"
style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M351.82,271.87v-16A96.15,96.15,0,0,0,184.09,192m-24.2,48.17v16A96.22,96.22,0,0,0,327.81,320"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<polyline points="135.87 256 159.46 232.4 184.13 256"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<polyline points="376.13 256 352.54 279.6 327.87 256"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 837 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-l</title>
<polyline points="32 415.5 152 95.5 272 415.5"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="230" y1="303.5" x2="74" y2="303.5"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M326,239.5c12.19-28.69,41-48,74-48h0c46,0,80,32,80,80v144"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<path d="M320,358.5c0,36,26.86,58,60,58,54,0,100-27,100-106v-15c-20,0-58,1-92,5C355.23,304.36,320,319.5,320,358.5Z"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 835 B

View File

@@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-k</title>
<path d="M432,144,403.33,419.74A32,32,0,0,1,371.55,448H140.46a32,32,0,0,1-31.78-28.26L80,144"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<rect x="32" y="64" width="448" height="80" rx="16" ry="16"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="312" y1="240" x2="200" y2="352"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="312" y1="352" x2="200" y2="240"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 793 B

View File

@@ -1,15 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<title>ionicons-v5-e</title>
<path d="M112,112l20,320c.95,18.49,14.4,32,32,32H348c17.67,0,30.87-13.51,32-32l20-320"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="80" y1="112" x2="432" y2="112"
style="stroke:#000;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"/>
<path d="M192,112V72h0a23.93,23.93,0,0,1,24-24h80a23.93,23.93,0,0,1,24,24h0v40"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="256" y1="176" x2="256" y2="400"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="184" y1="176" x2="192" y2="400"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
<line x1="328" y1="176" x2="320" y2="400"
style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

BIN
icons/krowlog.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

29
icons/krowlog.svg Normal file
View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="64" height="64" viewBox="0 0 128 128" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="bg1" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#9f8700"/>
<stop offset="100%" style="stop-color:#ffdb00"/>
</linearGradient>
<linearGradient id="fg1" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#8caec7"/>
<stop offset="100%" style="stop-color:#6289a3"/>
</linearGradient>
</defs>
<rect x="8" y="8" width="112" height="112" style="fill:url(#fg1)" rx="10"/>
<path style="fill:black"
d="M76,113
L15,113
L15,70
C15,70 25,55 45,36
C53,29 60,26 78,32
C85,34 90,32 90,32
C95,30 108,35 110,40
L110,40
C83,48 80,60 76,71
C74,80 76,113 76,113
z"/>
<rect x="8" y="8" width="112" height="112"
style="fill:none; stroke:url(#bg1); stroke-width:14" rx="10"/>
<circle cx="63" cy="43" r="4.5" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 984 B

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<circle cx="153" cy="339" r="140" style="fill:#ff1111;stroke:none;"/>
<circle cx="359" cy="339" r="140" style="fill:#11ff11;stroke:none;"/>
<circle cx="256" cy="153" r="140" style="fill:#1111ff;stroke:none;"/>
</svg>

After

Width:  |  Height:  |  Size: 317 B

View File

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<path style="fill: #b3e0fe; stroke: black; stroke-linejoin:round;"
d="M7.5,14.5
L1.5,7.5
L5.5,7.5
L5.5,0.5
L9.5,0.5
L9.5,7.5
L13.5,7.5
L7.5,14.5
z
"/>
<line x1="0.5" y1="15.5" x2="15.5" y2="15.5" style="stroke:black;"/>
</svg>

After

Width:  |  Height:  |  Size: 367 B

View File

@@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<rect x="1.5" y="1.5" width="8" height="11"
style="fill:#ccc; stroke: black; stroke-linejoin:round;"/>
<rect x="5.5" y="4.5" width="8" height="11"
style="fill:#eee; stroke: black; stroke-linejoin:round;"/>
<line x1="7.5" y1="6.5" x2="11.5" y2="6.5" style="stroke: black; stroke-linecap:round; "/>
<line x1="7.5" y1="8.5" x2="9.5" y2="8.5" style="stroke: black; stroke-linecap:round;"/>
<line x1="7.5" y1="10.5" x2="10.5" y2="10.5" style="stroke: black; stroke-linecap:round;"/>
<line x1="7.5" y1="12.5" x2="9.5" y2="12.5" style="stroke: black; stroke-linecap:round;"/>
</svg>

After

Width:  |  Height:  |  Size: 709 B

17
icons/myicons/folder.svg Normal file
View File

@@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 64 64">
<path d="
M5,50
L5,10
C5,5 10,5 10,5
L20,5
C23,5 25,9 25,9
C25,9,28,15 30,15
L55,15
C60,15 60.5,20 60,20
L60,50
C60,55 55,55 55,55
L10,55
C10,55 5,55 5,50"
style="fill:#ddd;stroke:black; stroke-width:4;"
transform="translate(0.5,0.5)"/>
</svg>

After

Width:  |  Height:  |  Size: 366 B

10
icons/myicons/go-down.svg Normal file
View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<path style="stroke-width: 3; stroke:#cc673c;fill:none;stroke-linecap:round;stroke-linejoin:round;"
d="M2,6 L8,11 L14,6"
transform="translate(0.5,0.5)"
/>
<path style="stroke-width: 1; stroke:#e8ac7d;fill:none;stroke-linecap:round;stroke-linejoin:round;"
d="M2,6 L8,11 L14,6"
transform="translate(0.5,0.5)"
/>
</svg>

After

Width:  |  Height:  |  Size: 459 B

10
icons/myicons/go-up.svg Normal file
View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<path style="stroke-width: 3; stroke:#cc673c;fill:none;stroke-linecap:round;stroke-linejoin:round;"
d="M2,10 L8,5 L14,10"
transform="translate(0.5,0.5)"
/>
<path style="stroke-width: 1; stroke:#e8ac7d;fill:none;stroke-linecap:round;stroke-linejoin:round;"
d="M2,10 L8,5 L14,10"
transform="translate(0.5,0.5)"
/>
</svg>

After

Width:  |  Height:  |  Size: 461 B

View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<circle cx="256" cy="256" r="250" style="fill:green;stroke:none;"/>
<line x1="120" y1="256" x2="392" y2="256"
style="fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-width:40px"/>
<line x1="256" y1="120" x2="256" y2="392"
style="fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-width:40px"/>
</svg>

After

Width:  |  Height:  |  Size: 465 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<circle cx="256" cy="256" r="250" style="fill:#bc1938;stroke:none;"/>
<line x1="120" y1="256" x2="392" y2="256"
style="fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-width:40px"/>
</svg>

After

Width:  |  Height:  |  Size: 319 B

9
icons/myicons/notes.svg Normal file
View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<g transform="translate(0.5,0.5)">
<rect x="2" y="0" width="11" height="15"
style="fill:#eee; stroke: black; stroke-linejoin:round;"/>
<circle cx="12" cy="12" r="3.5" style="fill: green;"/>
<line x1="10" y1="12" x2="14" y2="12" style="stroke: white; stroke-linecap:round;"/>
<line x1="12" y1="10" x2="12" y2="14" style="stroke: white; stroke-linecap:round;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 512 B

View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<path style="fill: #dddddd; stroke: black; stroke-linejoin:round;"
d="M8,13
L1,3
L15,3
z
"/>
<line x1="0.5" y1="13.5" x2="15.5" y2="13.5" style="stroke:black;"/>
</svg>

After

Width:  |  Height:  |  Size: 287 B

View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<path style="fill: #dddddd; stroke: black; stroke-linejoin:round;"
d="M8,3
L1,13
L15,13
z
"/>
<line x1="0.5" y1="2.5" x2="15.5" y2="2.5" style="stroke:black;"/>
</svg>

After

Width:  |  Height:  |  Size: 286 B

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<rect x="1.5" y="1.5" width="13" height="13" rx="2"
style="fill:none;stroke-width:1;stroke:black;"/>
<path style="stroke-width: 2; stroke:black;fill:none;stroke-linecap:round;stroke-linejoin:round;"
d="M4,8 L6,10 L11,5"
transform="translate(0.5,0.5)"
/>
</svg>

After

Width:  |  Height:  |  Size: 389 B

4
icons/myicons/rect.svg Normal file
View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<rect x="1.5" y="1.5" width="13" height="13" rx="2"
style="fill:none;stroke-width:1;stroke:black;"/>
</svg>

After

Width:  |  Height:  |  Size: 208 B

4
icons/myicons/search.svg Normal file
View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<circle cx="6.5" cy="6.5" r="5" style="fill:none;stroke:black;"/>
<line x1="10.3" y1="10.3" x2="14" y2="14" style="stroke:black;stroke-linecap:round;"/>
</svg>

After

Width:  |  Height:  |  Size: 254 B

View File

@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<line x1="0" y1="0.5" x2="16" y2="0.5" style="stroke:black; stroke-dasharray:2.29;"/>
<line x1="0" y1="15.5" x2="16" y2="15.5" style="stroke:black; stroke-dasharray:2.29;"/>
<line x1="0.5" y1="0" x2="0.5" y2="16" style="stroke:black; stroke-dasharray:2.29;"/>
<line x1="15.5" y1="0" x2="15.5" y2="15.5" style="stroke:black; stroke-dasharray:2.29;"/>
<rect x="2.5" y="2.5" width="11" height="4.5" style="fill:#6060ff;"/>
<rect x="2.5" y="8.5" width="5" height="4.5" style="fill:#6060ff;"/>
<rect x="8.5" y="8.5" width="5" height="4.5" style="fill:#6060ff;"/>
</svg>

After

Width:  |  Height:  |  Size: 675 B

View File

@@ -0,0 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 64 64">
<path d="
M5,50
L5,10
C5,5 10,5 10,5
L20,5
C22,5 25,7 25,7
C25,7, 28,10 30,10
L55,10
C60,10 60,15 60,15
L60,50
C60,55 55,55 55,55
L10,55
C10,55 5,55 5,50"
style="fill:#ddd;stroke:black; stroke-width:4;"/>
<rect x="20" y="20" width="30" height="39" rx="3"
style="fill:#eee; stroke: black; stroke-width:4; stroke-linejoin:round;"/>
<line x1="25" y1="30" x2="40" y2="30" style="stroke: black; stroke-width:4; stroke-linecap:round;"/>
<line x1="25" y1="37" x2="35" y2="37" style="stroke: black; stroke-width:4; stroke-linecap:round;"/>
<line x1="25" y1="44" x2="40" y2="44" style="stroke: black; stroke-width:4; stroke-linecap:round;"/>
</svg>

After

Width:  |  Height:  |  Size: 780 B

9
icons/myicons/star.svg Normal file
View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<path style="stroke:black;fill:black;stroke-linejoin:round;"
d="M8,1
L10,6 L15,6
L11,9 L13,14
L8,11
L3,14 L5,9
L1,6 L6,6Z"/>
</svg>

After

Width:  |  Height:  |  Size: 261 B

View File

@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 16 16">
<g transform="translate(0,0)">
<circle cx="8" cy="9" r="5" style="fill:none;stroke:black;"/>
<line x1="8" y1="3.5" x2="8" y2="1" style="fill:none;stroke:black;stroke-linecap:round;"/>
<line x1="7" y1="1" x2="9" y2="1" style="fill:none;stroke:black;stroke-linecap:round;"/>
<line x1="12" y1="3" x2="11.1" y2="4.4" style="fill:none;stroke:black;stroke-linecap:round;"/>
<line x1="11.5" y1="2.2" x2="13" y2="3.2" style="fill:none;stroke:black;stroke-linecap:round;"/>
<line x1="3.75" y1="3" x2="4.9" y2="4.5" style="fill:none;stroke:black;stroke-linecap:round;"/>
<line x1="2.8" y1="3.2" x2="4" y2="2.2" style="fill:none;stroke:black;stroke-linecap:round;"/>
<line x1="8" y1="7.5" x2="8" y2="5.5" style="fill:none;stroke:black;stroke-linecap:round;"/>
<circle cx="8" cy="9" r="1" style="fill:none;stroke:black;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 995 B

19
instructions.md Normal file
View File

@@ -0,0 +1,19 @@
# Instructions
## Build Standalone Bundle
You can create a bundle that includes everything, including Python, for easy distribution.
Just run `make_installer.py` with the following command. The distribution can be found in `dist/krowlog` You will have
to run this on all target platforms.
```
venv311/bin/python make_installer.py
```
## Update Python
1. install the latest python version. We need the dev version, because PyInstaller requires it.
`sudo apt install python-3.11-dev python-3.11-venv`
2. create new virtual environment with `python3.11 -m venv /path/to/venv`
3. select the venv in PyCharm

View File

@@ -1 +1 @@
start /min venv310\Scripts\python.exe main.py start /min venv311\Scripts\python.exe main.py

View File

@@ -1,16 +1,17 @@
import argparse
import logging import logging
import signal import signal
from PySide6 import QtCore from PySide6 import QtCore
from PySide6.QtWidgets import QApplication from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QTimer from PySide6.QtCore import QTimer
from PySide6.QtGui import QIcon
import sys import sys
import constants import constants
from src import install
from src.pluginregistry import PluginRegistry from src.pluginregistry import PluginRegistry
import gettext import gettext
from src.ui.icon import Icon
__version__ = '0.2.1'
gettext.install('krowlog', 'locale') gettext.install('krowlog', 'locale')
@@ -18,6 +19,11 @@ logging.basicConfig(level=logging.INFO)
log = logging.getLogger("main") log = logging.getLogger("main")
def register_signal_handler():
signal.signal(signal.SIGINT, stop_signal)
signal.signal(signal.SIGTERM, stop_signal)
def stop_signal(signum, _stackframe): def stop_signal(signum, _stackframe):
""" Handle terminate signal """ """ Handle terminate signal """
try: try:
@@ -29,17 +35,7 @@ def stop_signal(signum, _stackframe):
sys.exit(0) sys.exit(0)
if __name__ == "__main__": def apply_time_workaround():
app = QApplication(sys.argv)
app.setWindowIcon(QIcon(constants.krow_icon)) # works only for Linux
# make icon appear in Windows
# see https://stackoverflow.com/questions/1551605/how-to-set-applications-taskbar-icon-in-windows-7/1552105#1552105
if sys.platform == 'win32' or sys.platform == 'cygwin':
myappid = 'krowlog' # arbitrary string
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
# workaround to make signals work in QT apps. # workaround to make signals work in QT apps.
# They do not work out of the box, because the main thread # They do not work out of the box, because the main thread
# is running in C++ code once app.exec() is executed # is running in C++ code once app.exec() is executed
@@ -49,7 +45,8 @@ if __name__ == "__main__":
timer.timeout.connect(lambda: None) timer.timeout.connect(lambda: None)
timer.start(100) timer.start(100)
# init plugins
def init_plugins():
PluginRegistry.load_plugin("KrowLogPlugin") PluginRegistry.load_plugin("KrowLogPlugin")
PluginRegistry.load_plugin("OpenFilePlugin") PluginRegistry.load_plugin("OpenFilePlugin")
PluginRegistry.load_plugin("LogFilePlugin") PluginRegistry.load_plugin("LogFilePlugin")
@@ -57,12 +54,39 @@ if __name__ == "__main__":
PluginRegistry.load_plugin("TimeDiffPlugin") PluginRegistry.load_plugin("TimeDiffPlugin")
PluginRegistry.load_plugin("FilesBrowserPlugin") PluginRegistry.load_plugin("FilesBrowserPlugin")
class CmdArgs:
def __init__(self, files: [str]):
self.files = files
def __str__(self):
return f"files={self.files}"
def parse_command_line_parameters() -> CmdArgs:
parser = argparse.ArgumentParser()
parser.add_argument('files', metavar='F', type=str, nargs='*', help='file(s) to open')
namespace = parser.parse_args()
return CmdArgs(files=namespace.files)
if __name__ == "__main__":
cmd_args = parse_command_line_parameters()
app = QApplication(sys.argv)
app.setWindowIcon(Icon(constants.krow_icon)) # works only for Linux (but only X11, not Wayland)
# install stuff, e.g. a desktop file, set icon on Windows
install.install()
apply_time_workaround()
init_plugins()
window = PluginRegistry.execute_single("create_main_window") window = PluginRegistry.execute_single("create_main_window")
window.show() window.show()
PluginRegistry.execute("after_start") PluginRegistry.execute("after_start", cmd_args.files)
signal.signal(signal.SIGINT, stop_signal) register_signal_handler()
signal.signal(signal.SIGTERM, stop_signal)
app.exec() app.exec()

View File

@@ -5,8 +5,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: RavenLog\n" "Project-Id-Version: RavenLog\n"
"POT-Creation-Date: 2022-08-23 20:08+0200\n" "POT-Creation-Date: 2024-03-24 12:00+0100\n"
"PO-Revision-Date: 2022-08-23 20:09+0200\n" "PO-Revision-Date: 2024-03-24 12:02+0100\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: de\n" "Language: de\n"
@@ -17,92 +17,92 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 3.0.1\n" "X-Generator: Poedit 3.0.1\n"
#: src/mainwindow.py:34 src/plugins/krowlog/aboutdialog.py:24 #: src/mainwindow.py:32 src/plugins/krowlog/aboutdialog.py:30
#: src/plugins/krowlogplugin.py:85 #: src/plugins/krowlogplugin.py:85
msgid "KrowLog" msgid "KrowLog"
msgstr "KrowLog" msgstr "KrowLog"
#: src/mainwindow.py:42 src/plugins/openfileplugin.py:30 #: src/mainwindow.py:40 src/plugins/openfileplugin.py:31
msgid "Open &Recent" msgid "Open &Recent"
msgstr "Zu&letzt geöffnete Dateien" msgstr "Zu&letzt geöffnete Dateien"
#: src/mainwindow.py:64 #: src/mainwindow.py:58
msgid "&File" msgid "&File"
msgstr "&Datei" msgstr "&Datei"
#: src/mainwindow.py:65 #: src/mainwindow.py:59
msgid "&Settings" msgid "&Settings"
msgstr "&Einstellungen" msgstr "&Einstellungen"
#: src/mainwindow.py:66 #: src/mainwindow.py:60
msgid "&Window" msgid "&Window"
msgstr "&Fenster" msgstr "&Fenster"
#: src/mainwindow.py:67 #: src/mainwindow.py:61
msgid "&Help" msgid "&Help"
msgstr "&Hilfe" msgstr "&Hilfe"
#: src/mainwindow.py:99 src/ui/bigtext/bigtext.py:188 #: src/mainwindow.py:93
msgid "&Highlighter"
msgstr "&Hervorhebungen"
#: src/mainwindow.py:106
msgid "Highlight &Searches" msgid "Highlight &Searches"
msgstr "&Suchtreffer Hervorheben" msgstr "&Suchtreffer Hervorheben"
#: src/mainwindow.py:114 #: src/mainwindow.py:101
msgid "Open Tab on Save As File" msgid "Open Tab on Save As File"
msgstr "Öffne neues Tab wenn Selektion als neue Datei gespeichert wird" msgstr "Öffne neues Tab wenn Selektion als neue Datei gespeichert wird"
#: src/plugins/filesbrowserplugin.py:35 #: src/plugins/filesbrowser/filesbrowserwidget.py:37
msgid "&Files Browser"
msgstr "&Dateibrowser"
#: src/plugins/filesbrowserplugin.py:41
msgid "Files Browser"
msgstr "Dateibrowser"
#: src/plugins/findInFiles/filesbrowserwidget.py:37
msgid "Focus on current file" msgid "Focus on current file"
msgstr "Auf aktuelle Datei fokussieren" msgstr "Auf aktuelle Datei fokussieren"
#: src/plugins/findInFiles/filesbrowserwidget.py:40 #: src/plugins/filesbrowser/filesbrowserwidget.py:40
msgid "Folder:" msgid "Folder:"
msgstr "Ordner:" msgstr "Ordner:"
#: src/plugins/findInFiles/filesbrowserwidget.py:45 #: src/plugins/filesbrowser/filesbrowserwidget.py:45
msgid "Filter:" msgid "Filter:"
msgstr "Filter:" msgstr "Filter:"
#: src/plugins/findInFiles/filesbrowserwidget.py:73 #: src/plugins/filesbrowser/filesbrowserwidget.py:75
msgid "Open Directory" msgid "Open Directory"
msgstr "Ordner öffnen" msgstr "Ordner öffnen"
#: src/plugins/krowlog/aboutdialog.py:19 #: src/plugins/filesbrowserplugin.py:30
msgid "&Files Browser"
msgstr "&Dateibrowser"
#: src/plugins/filesbrowserplugin.py:36
msgid "Files Browser"
msgstr "Dateibrowser"
#: src/plugins/krowlog/aboutdialog.py:23
msgid "About KrowLog" msgid "About KrowLog"
msgstr "Über KrowLog" msgstr "Über KrowLog"
#: src/plugins/krowlog/aboutdialog.py:29 #: src/plugins/krowlog/aboutdialog.py:35
msgid "Version: {0}" msgid "Version: {0}"
msgstr "Version: {0}" msgstr "Version: {0}"
#: src/plugins/krowlog/aboutdialog.py:44 #: src/plugins/krowlog/aboutdialog.py:50
msgid "About" msgid "About"
msgstr "Über KrowLog" msgstr "Über KrowLog"
#: src/plugins/krowlog/aboutdialog.py:45 #: src/plugins/krowlog/aboutdialog.py:51
msgid "Libraries"
msgstr "Bibliotheken"
#: src/plugins/krowlog/aboutdialog.py:52
msgid "License" msgid "License"
msgstr "Lizenz" msgstr "Lizenz"
#: src/plugins/krowlog/aboutdialog.py:58 #: src/plugins/krowlog/aboutdialog.py:65
msgid "Log file viewer" msgid "KrowLog is a viewer for log files of arbitrary size."
msgstr "Betrachter für Logdateien" msgstr "KrowLog ist ein Betrachter für Logdateien beliebiger Größe."
#: src/plugins/krowlog/aboutdialog.py:59 #: src/plugins/krowlog/aboutdialog.py:66
msgid "(c) 2022 Andreas Huber" msgid "(c) 2022-2024 Andreas Huber"
msgstr "(c) 2022 Andreas Huber" msgstr "(c) 2022-2024 Andreas Huber"
#: src/plugins/krowlog/aboutdialog.py:60 #: src/plugins/krowlog/aboutdialog.py:67
msgid "License: LGPL v3" msgid "License: LGPL v3"
msgstr "Lizenz: LGPL v3" msgstr "Lizenz: LGPL v3"
@@ -146,27 +146,39 @@ msgstr "&Über KrowLog"
msgid "E&xit" msgid "E&xit"
msgstr "&Beenden" msgstr "&Beenden"
#: src/plugins/logfile/filterwidget.py:137 #: src/plugins/logfile/filterwidget.py:181
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: src/plugins/logfile/filterwidget.py:143 #: src/plugins/logfile/filterwidget.py:187
msgid "save query" msgid "save query"
msgstr "suche speichern" msgstr "suche speichern"
#: src/plugins/logfile/filterwidget.py:148 #: src/plugins/logfile/filterwidget.py:192
msgid "ignore case" msgid "ignore case"
msgstr "Groß-/Kleinschreibung ignorieren" msgstr "Groß-/Kleinschreibung ignorieren"
#: src/plugins/logfile/filterwidget.py:152 #: src/plugins/logfile/filterwidget.py:196
msgid "regex" msgid "regex"
msgstr "RegExp" msgstr "RegExp"
#: src/plugins/logfileplugin.py:26 #: src/plugins/logfile/filterwidget.py:206
msgid "only matches"
msgstr "nur Treffer"
#: src/plugins/logfile/filterwidget.py:298
msgid "({hits} lines)"
msgstr "({hits} Zeilen)"
#: src/plugins/logfileplugin.py:35 src/ui/bigtext/bigtext.py:258
msgid "&Highlighter"
msgstr "&Hervorhebungen"
#: src/plugins/logfileplugin.py:43
msgid "File not found" msgid "File not found"
msgstr "Datei nicht gefunden" msgstr "Datei nicht gefunden"
#: src/plugins/logfileplugin.py:27 #: src/plugins/logfileplugin.py:44
msgid "'{0}' is not a file or cannot be opened" msgid "'{0}' is not a file or cannot be opened"
msgstr "'{0}' ist keine Datei oder kann nicht geöffnet werden" msgstr "'{0}' ist keine Datei oder kann nicht geöffnet werden"
@@ -182,161 +194,209 @@ msgstr "Notizen {0}"
msgid "&Open..." msgid "&Open..."
msgstr "&Öffnen..." msgstr "&Öffnen..."
#: src/plugins/openfileplugin.py:46 #: src/plugins/openfileplugin.py:47
msgid "Open File" msgid "Open File"
msgstr "Öffne Datei" msgstr "Öffne Datei"
#: src/ui/bigtext/bigtext.py:171 #: src/plugins/timediff/time_diff_menu_widget.py:32
msgid "ms"
msgstr ""
#: src/plugins/timediff/time_diff_menu_widget.py:33
msgid "s"
msgstr ""
#: src/plugins/timediff/time_diff_menu_widget.py:34
msgid "m"
msgstr ""
#: src/plugins/timediff/time_diff_menu_widget.py:35
msgid "h"
msgstr ""
#: src/ui/bigtext/bigtext.py:238
msgid "&Copy to Clipboard" msgid "&Copy to Clipboard"
msgstr "In Zwischenablage &Kopieren" msgstr "In Zwischenablage &Kopieren"
#: src/ui/bigtext/bigtext.py:177 #: src/ui/bigtext/bigtext.py:246
msgid "Copy to &File" msgid "Copy to &File"
msgstr "In &Datei Kopieren" msgstr "In &Datei Kopieren"
#: src/ui/bigtext/bigtext.py:182 #: src/ui/bigtext/bigtext.py:252
msgid "Select &All" msgid "Select &All"
msgstr "&Alles Selektieren" msgstr "&Alles Selektieren"
#: src/ui/bigtext/bigtext.py:332 #: src/ui/bigtext/bigtext.py:268
msgid "data selection" msgid "Set Range Start"
msgstr "selektion" msgstr "Setze Start des Anzeigebereichs"
#: src/ui/bigtext/bigtext.py:333 #: src/ui/bigtext/bigtext.py:276
msgid "Set Range End"
msgstr "Setze Ende des Anzeigebereichs"
#: src/ui/bigtext/bigtext.py:283
msgid "Reset Range"
msgstr "Anzeigebereich Zurücksetzen"
#: src/ui/bigtext/bigtext.py:458
msgid "warning"
msgstr "Achtung"
#: src/ui/bigtext/bigtext.py:459
msgid "You have selected <b>{0}</b> of data." msgid "You have selected <b>{0}</b> of data."
msgstr "Du hast <b>{0}</b> selektiert." msgstr "Du hast <b>{0}</b> selektiert."
#: src/ui/bigtext/bigtext.py:336 #: src/ui/bigtext/bigtext.py:464
msgid "Copy {0} to Clipboard" msgid "Copy {0} to Clipboard"
msgstr "Kopiere {0} in die Zwischenablage" msgstr "Kopiere {0} in die Zwischenablage"
#: src/ui/bigtext/bigtext.py:338 #: src/ui/bigtext/bigtext.py:468
msgid "Write to File" msgid "Write to File"
msgstr "Schreibe in Datei" msgstr "Schreibe in Datei"
#: src/ui/bigtext/bigtext.py:360 #: src/ui/bigtext/bigtext.py:492
msgid "Save File" msgid "Save File"
msgstr "Speichere Datei" msgstr "Speichere Datei"
#: src/ui/bigtext/highlightingdialog.py:23 #: src/ui/bigtext/bigtext.py:529
msgid "selected {0} - {1:,.0f}:{2:,.0f}"
msgstr "selektiert {0} - {1:,.0f}:{2:,.0f}"
#: src/ui/bigtext/newhighlightingdialog.py:20
msgid "Manage Highlighting" msgid "Manage Highlighting"
msgstr "Hervorhebungen Verwalten" msgstr "Hervorhebungen Verwalten"
#: src/ui/bigtext/highlightingdialog.py:35 #: src/ui/bigtext/newhighlightingdialog.py:29
msgid "Add" msgid "New"
msgstr "Hinzufügen" msgstr "Neu"
#: src/ui/bigtext/highlightingdialog.py:39 #: src/ui/bigtext/newhighlightingdialog.py:33
msgid "Update"
msgstr "Aktualisieren"
#: src/ui/bigtext/highlightingdialog.py:43
msgid "Remove" msgid "Remove"
msgstr "Entfernen" msgstr "Entfernen"
#: src/ui/bigtext/highlightingdialog.py:47 #: src/ui/bigtext/newhighlightingdialog.py:37
msgid "Up" msgid "Up"
msgstr "Hoch" msgstr "Hoch"
#: src/ui/bigtext/highlightingdialog.py:51 #: src/ui/bigtext/newhighlightingdialog.py:41
msgid "Down" msgid "Down"
msgstr "Runter" msgstr "Runter"
#: src/ui/bigtext/highlightingdialog.py:59 #: src/ui/bigtext/newhighlightingdialog.py:151
msgid "Query:"
msgstr "Suche:"
#: src/ui/bigtext/highlightingdialog.py:63
msgid "Ignore Case"
msgstr "Groß-/Kleinschreibung ignorieren"
#: src/ui/bigtext/highlightingdialog.py:68
msgid "Regular Expression"
msgstr "Regulärer Ausdruck"
#: src/ui/bigtext/highlightingdialog.py:73
msgid "Hit Background:" msgid "Hit Background:"
msgstr "Trefferhintergrund:" msgstr "Trefferhintergrund:"
#: src/ui/bigtext/highlightingdialog.py:78 #: src/ui/bigtext/newhighlightingdialog.py:155
msgid "Hit Background"
msgstr "Trefferhintergrund"
#: src/ui/bigtext/newhighlightingdialog.py:161
msgid "Ignore Case"
msgstr "Groß-/Kleinschreibung ignorieren"
#: src/ui/bigtext/newhighlightingdialog.py:168
msgid "Line Background:" msgid "Line Background:"
msgstr "Zeilenhintergrund:" msgstr "Zeilenhintergrund:"
#: src/ui/bigtext/highlightingdialog.py:142 #: src/ui/bigtext/newhighlightingdialog.py:172
msgid "unsaved changes" msgid "Line Background"
msgstr "Nicht Gespeicherte Änderungen" msgstr "Zeilenhintergrund"
#: src/ui/bigtext/highlightingdialog.py:143 #: src/ui/bigtext/newhighlightingdialog.py:178
msgid "You have unsaved changes." msgid "Regular Expression"
msgstr "Du hast nicht gespeicherte Änderungen." msgstr "Regulärer Ausdruck"
#: src/ui/colorbutton.py:18 #: src/ui/colorbutton.py:20
msgid "Strawberry Cream" msgid "Strawberry Cream"
msgstr "Strawberry Cream" msgstr "Strawberry Cream"
#: src/ui/colorbutton.py:19 #: src/ui/colorbutton.py:21
msgid "Pale Crimson" msgid "Pale Crimson"
msgstr "Pale Crimson" msgstr "Pale Crimson"
#: src/ui/colorbutton.py:21 #: src/ui/colorbutton.py:23
msgid "Broken Buttercup" msgid "Broken Buttercup"
msgstr "Pale Crimson" msgstr "Kaputtes Butterfass"
#: src/ui/colorbutton.py:22 #: src/ui/colorbutton.py:24
msgid "Passion Fruit Sugar" msgid "Passion Fruit Sugar"
msgstr "Passion Fruit Sugar" msgstr "Passion Fruit Sugar"
#: src/ui/colorbutton.py:24 #: src/ui/colorbutton.py:26
msgid "Sunrise Yellow" msgid "Sunrise Yellow"
msgstr "Sonnenaufganggelb" msgstr "Sonnenaufganggelb"
#: src/ui/colorbutton.py:25 #: src/ui/colorbutton.py:27
msgid "Magical Mustard" msgid "Magical Mustard"
msgstr "Magischer Senf" msgstr "Magischer Senf"
#: src/ui/colorbutton.py:27 #: src/ui/colorbutton.py:29
msgid "Trendy Green" msgid "Trendy Green"
msgstr "Trendiges Grün" msgstr "Trendiges Grün"
#: src/ui/colorbutton.py:28 #: src/ui/colorbutton.py:30
msgid "Garden Of Sweden" msgid "Garden Of Sweden"
msgstr "Garten von Schweden" msgstr "Garten von Schweden"
#: src/ui/colorbutton.py:30 #: src/ui/colorbutton.py:32
msgid "Light Sky Blue" msgid "Light Sky Blue"
msgstr "Helles Himmelsblau" msgstr "Helles Himmelsblau"
#: src/ui/colorbutton.py:31 #: src/ui/colorbutton.py:33
msgid "True Blue" msgid "True Blue"
msgstr "Echtes Blau" msgstr "Echtes Blau"
#: src/ui/colorbutton.py:33 #: src/ui/colorbutton.py:35
msgid "Fairy Topia" msgid "Fairy Topia"
msgstr "" msgstr "Fairy Topia"
#: src/ui/colorbutton.py:34
msgid "Magenta Bachiego"
msgstr ""
#: src/ui/colorbutton.py:36 #: src/ui/colorbutton.py:36
msgid "Magenta Bachiego"
msgstr "Magenta Bachiego"
#: src/ui/colorbutton.py:38
msgid "Breeze of Mist" msgid "Breeze of Mist"
msgstr "Nebelbriese" msgstr "Nebelbriese"
#: src/ui/colorbutton.py:37 #: src/ui/colorbutton.py:39
msgid "Light Grey" msgid "Light Grey"
msgstr "Helles Grau" msgstr "Helles Grau"
#: src/ui/colorbutton.py:38 #: src/ui/colorbutton.py:40
msgid "Grey" msgid "Grey"
msgstr "Grau" msgstr "Grau"
#: src/ui/colorbutton.py:44 #: src/ui/colorbutton.py:46
msgid "transparent" msgid "transparent"
msgstr "Transparent" msgstr "Transparent"
#: src/ui/colorbutton.py:51 #: src/ui/rangeslider.py:180
msgid "custom" msgid "showing bytes {0} to {1} ({2})"
msgstr "individuell" msgstr "Anzeigebereich: Bytes {0} bis {1} ({2})"
#~ msgid "data selection"
#~ msgstr "selektion"
#~ msgid "Log file viewer"
#~ msgstr "Betrachter für Logdateien"
#~ msgid "Add"
#~ msgstr "Hinzufügen"
#~ msgid "Update"
#~ msgstr "Aktualisieren"
#~ msgid "Query:"
#~ msgstr "Suche:"
#~ msgid "unsaved changes"
#~ msgstr "Nicht Gespeicherte Änderungen"
#~ msgid "You have unsaved changes."
#~ msgstr "Du hast nicht gespeicherte Änderungen."
#~ msgid "custom"
#~ msgstr "individuell"
#~ msgid "&Find In Files" #~ msgid "&Find In Files"
#~ msgstr "In &Dateien Suchen" #~ msgstr "In &Dateien Suchen"

View File

@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2022-08-23 20:08+0200\n" "POT-Creation-Date: 2024-03-24 12:00+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -15,92 +15,92 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
#: src/mainwindow.py:34 src/plugins/krowlog/aboutdialog.py:24 #: src/mainwindow.py:32 src/plugins/krowlog/aboutdialog.py:30
#: src/plugins/krowlogplugin.py:85 #: src/plugins/krowlogplugin.py:85
msgid "KrowLog" msgid "KrowLog"
msgstr "" msgstr ""
#: src/mainwindow.py:42 src/plugins/openfileplugin.py:30 #: src/mainwindow.py:40 src/plugins/openfileplugin.py:31
msgid "Open &Recent" msgid "Open &Recent"
msgstr "" msgstr ""
#: src/mainwindow.py:64 #: src/mainwindow.py:58
msgid "&File" msgid "&File"
msgstr "" msgstr ""
#: src/mainwindow.py:65 #: src/mainwindow.py:59
msgid "&Settings" msgid "&Settings"
msgstr "" msgstr ""
#: src/mainwindow.py:66 #: src/mainwindow.py:60
msgid "&Window" msgid "&Window"
msgstr "" msgstr ""
#: src/mainwindow.py:67 #: src/mainwindow.py:61
msgid "&Help" msgid "&Help"
msgstr "" msgstr ""
#: src/mainwindow.py:99 src/ui/bigtext/bigtext.py:188 #: src/mainwindow.py:93
msgid "&Highlighter"
msgstr ""
#: src/mainwindow.py:106
msgid "Highlight &Searches" msgid "Highlight &Searches"
msgstr "" msgstr ""
#: src/mainwindow.py:114 #: src/mainwindow.py:101
msgid "Open Tab on Save As File" msgid "Open Tab on Save As File"
msgstr "" msgstr ""
#: src/plugins/filesbrowserplugin.py:35 #: src/plugins/filesbrowser/filesbrowserwidget.py:37
msgid "&Files Browser"
msgstr ""
#: src/plugins/filesbrowserplugin.py:41
msgid "Files Browser"
msgstr ""
#: src/plugins/findInFiles/filesbrowserwidget.py:37
msgid "Focus on current file" msgid "Focus on current file"
msgstr "" msgstr ""
#: src/plugins/findInFiles/filesbrowserwidget.py:40 #: src/plugins/filesbrowser/filesbrowserwidget.py:40
msgid "Folder:" msgid "Folder:"
msgstr "" msgstr ""
#: src/plugins/findInFiles/filesbrowserwidget.py:45 #: src/plugins/filesbrowser/filesbrowserwidget.py:45
msgid "Filter:" msgid "Filter:"
msgstr "" msgstr ""
#: src/plugins/findInFiles/filesbrowserwidget.py:73 #: src/plugins/filesbrowser/filesbrowserwidget.py:75
msgid "Open Directory" msgid "Open Directory"
msgstr "" msgstr ""
#: src/plugins/krowlog/aboutdialog.py:19 #: src/plugins/filesbrowserplugin.py:30
msgid "&Files Browser"
msgstr ""
#: src/plugins/filesbrowserplugin.py:36
msgid "Files Browser"
msgstr ""
#: src/plugins/krowlog/aboutdialog.py:23
msgid "About KrowLog" msgid "About KrowLog"
msgstr "" msgstr ""
#: src/plugins/krowlog/aboutdialog.py:29 #: src/plugins/krowlog/aboutdialog.py:35
msgid "Version: {0}" msgid "Version: {0}"
msgstr "" msgstr ""
#: src/plugins/krowlog/aboutdialog.py:44 #: src/plugins/krowlog/aboutdialog.py:50
msgid "About" msgid "About"
msgstr "" msgstr ""
#: src/plugins/krowlog/aboutdialog.py:45 #: src/plugins/krowlog/aboutdialog.py:51
msgid "Libraries"
msgstr ""
#: src/plugins/krowlog/aboutdialog.py:52
msgid "License" msgid "License"
msgstr "" msgstr ""
#: src/plugins/krowlog/aboutdialog.py:58 #: src/plugins/krowlog/aboutdialog.py:65
msgid "Log file viewer" msgid "KrowLog is a viewer for log files of arbitrary size."
msgstr "" msgstr ""
#: src/plugins/krowlog/aboutdialog.py:59 #: src/plugins/krowlog/aboutdialog.py:66
msgid "(c) 2022 Andreas Huber" msgid "(c) 2022-2024 Andreas Huber"
msgstr "" msgstr ""
#: src/plugins/krowlog/aboutdialog.py:60 #: src/plugins/krowlog/aboutdialog.py:67
msgid "License: LGPL v3" msgid "License: LGPL v3"
msgstr "" msgstr ""
@@ -140,27 +140,39 @@ msgstr ""
msgid "E&xit" msgid "E&xit"
msgstr "" msgstr ""
#: src/plugins/logfile/filterwidget.py:137 #: src/plugins/logfile/filterwidget.py:181
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: src/plugins/logfile/filterwidget.py:143 #: src/plugins/logfile/filterwidget.py:187
msgid "save query" msgid "save query"
msgstr "" msgstr ""
#: src/plugins/logfile/filterwidget.py:148 #: src/plugins/logfile/filterwidget.py:192
msgid "ignore case" msgid "ignore case"
msgstr "" msgstr ""
#: src/plugins/logfile/filterwidget.py:152 #: src/plugins/logfile/filterwidget.py:196
msgid "regex" msgid "regex"
msgstr "" msgstr ""
#: src/plugins/logfileplugin.py:26 #: src/plugins/logfile/filterwidget.py:206
msgid "only matches"
msgstr ""
#: src/plugins/logfile/filterwidget.py:298
msgid "({hits} lines)"
msgstr ""
#: src/plugins/logfileplugin.py:35 src/ui/bigtext/bigtext.py:258
msgid "&Highlighter"
msgstr ""
#: src/plugins/logfileplugin.py:43
msgid "File not found" msgid "File not found"
msgstr "" msgstr ""
#: src/plugins/logfileplugin.py:27 #: src/plugins/logfileplugin.py:44
msgid "'{0}' is not a file or cannot be opened" msgid "'{0}' is not a file or cannot be opened"
msgstr "" msgstr ""
@@ -176,159 +188,183 @@ msgstr ""
msgid "&Open..." msgid "&Open..."
msgstr "" msgstr ""
#: src/plugins/openfileplugin.py:46 #: src/plugins/openfileplugin.py:47
msgid "Open File" msgid "Open File"
msgstr "" msgstr ""
#: src/ui/bigtext/bigtext.py:171 #: src/plugins/timediff/time_diff_menu_widget.py:32
msgid "ms"
msgstr ""
#: src/plugins/timediff/time_diff_menu_widget.py:33
msgid "s"
msgstr ""
#: src/plugins/timediff/time_diff_menu_widget.py:34
msgid "m"
msgstr ""
#: src/plugins/timediff/time_diff_menu_widget.py:35
msgid "h"
msgstr ""
#: src/ui/bigtext/bigtext.py:238
msgid "&Copy to Clipboard" msgid "&Copy to Clipboard"
msgstr "" msgstr ""
#: src/ui/bigtext/bigtext.py:177 #: src/ui/bigtext/bigtext.py:246
msgid "Copy to &File" msgid "Copy to &File"
msgstr "" msgstr ""
#: src/ui/bigtext/bigtext.py:182 #: src/ui/bigtext/bigtext.py:252
msgid "Select &All" msgid "Select &All"
msgstr "" msgstr ""
#: src/ui/bigtext/bigtext.py:332 #: src/ui/bigtext/bigtext.py:268
msgid "data selection" msgid "Set Range Start"
msgstr "" msgstr ""
#: src/ui/bigtext/bigtext.py:333 #: src/ui/bigtext/bigtext.py:276
msgid "Set Range End"
msgstr ""
#: src/ui/bigtext/bigtext.py:283
msgid "Reset Range"
msgstr ""
#: src/ui/bigtext/bigtext.py:458
msgid "warning"
msgstr ""
#: src/ui/bigtext/bigtext.py:459
msgid "You have selected <b>{0}</b> of data." msgid "You have selected <b>{0}</b> of data."
msgstr "" msgstr ""
#: src/ui/bigtext/bigtext.py:336 #: src/ui/bigtext/bigtext.py:464
msgid "Copy {0} to Clipboard" msgid "Copy {0} to Clipboard"
msgstr "" msgstr ""
#: src/ui/bigtext/bigtext.py:338 #: src/ui/bigtext/bigtext.py:468
msgid "Write to File" msgid "Write to File"
msgstr "" msgstr ""
#: src/ui/bigtext/bigtext.py:360 #: src/ui/bigtext/bigtext.py:492
msgid "Save File" msgid "Save File"
msgstr "" msgstr ""
#: src/ui/bigtext/highlightingdialog.py:23 #: src/ui/bigtext/bigtext.py:529
msgid "selected {0} - {1:,.0f}:{2:,.0f}"
msgstr ""
#: src/ui/bigtext/newhighlightingdialog.py:20
msgid "Manage Highlighting" msgid "Manage Highlighting"
msgstr "" msgstr ""
#: src/ui/bigtext/highlightingdialog.py:35 #: src/ui/bigtext/newhighlightingdialog.py:29
msgid "Add" msgid "New"
msgstr "" msgstr ""
#: src/ui/bigtext/highlightingdialog.py:39 #: src/ui/bigtext/newhighlightingdialog.py:33
msgid "Update"
msgstr ""
#: src/ui/bigtext/highlightingdialog.py:43
msgid "Remove" msgid "Remove"
msgstr "" msgstr ""
#: src/ui/bigtext/highlightingdialog.py:47 #: src/ui/bigtext/newhighlightingdialog.py:37
msgid "Up" msgid "Up"
msgstr "" msgstr ""
#: src/ui/bigtext/highlightingdialog.py:51 #: src/ui/bigtext/newhighlightingdialog.py:41
msgid "Down" msgid "Down"
msgstr "" msgstr ""
#: src/ui/bigtext/highlightingdialog.py:59 #: src/ui/bigtext/newhighlightingdialog.py:151
msgid "Query:"
msgstr ""
#: src/ui/bigtext/highlightingdialog.py:63
msgid "Ignore Case"
msgstr ""
#: src/ui/bigtext/highlightingdialog.py:68
msgid "Regular Expression"
msgstr ""
#: src/ui/bigtext/highlightingdialog.py:73
msgid "Hit Background:" msgid "Hit Background:"
msgstr "" msgstr ""
#: src/ui/bigtext/highlightingdialog.py:78 #: src/ui/bigtext/newhighlightingdialog.py:155
msgid "Hit Background"
msgstr ""
#: src/ui/bigtext/newhighlightingdialog.py:161
msgid "Ignore Case"
msgstr ""
#: src/ui/bigtext/newhighlightingdialog.py:168
msgid "Line Background:" msgid "Line Background:"
msgstr "" msgstr ""
#: src/ui/bigtext/highlightingdialog.py:142 #: src/ui/bigtext/newhighlightingdialog.py:172
msgid "unsaved changes" msgid "Line Background"
msgstr "" msgstr ""
#: src/ui/bigtext/highlightingdialog.py:143 #: src/ui/bigtext/newhighlightingdialog.py:178
msgid "You have unsaved changes." msgid "Regular Expression"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:18 #: src/ui/colorbutton.py:20
msgid "Strawberry Cream" msgid "Strawberry Cream"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:19 #: src/ui/colorbutton.py:21
msgid "Pale Crimson" msgid "Pale Crimson"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:21 #: src/ui/colorbutton.py:23
msgid "Broken Buttercup" msgid "Broken Buttercup"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:22 #: src/ui/colorbutton.py:24
msgid "Passion Fruit Sugar" msgid "Passion Fruit Sugar"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:24 #: src/ui/colorbutton.py:26
msgid "Sunrise Yellow" msgid "Sunrise Yellow"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:25 #: src/ui/colorbutton.py:27
msgid "Magical Mustard" msgid "Magical Mustard"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:27 #: src/ui/colorbutton.py:29
msgid "Trendy Green" msgid "Trendy Green"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:28 #: src/ui/colorbutton.py:30
msgid "Garden Of Sweden" msgid "Garden Of Sweden"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:30 #: src/ui/colorbutton.py:32
msgid "Light Sky Blue" msgid "Light Sky Blue"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:31 #: src/ui/colorbutton.py:33
msgid "True Blue" msgid "True Blue"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:33 #: src/ui/colorbutton.py:35
msgid "Fairy Topia" msgid "Fairy Topia"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:34 #: src/ui/colorbutton.py:36
msgid "Magenta Bachiego" msgid "Magenta Bachiego"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:36 #: src/ui/colorbutton.py:38
msgid "Breeze of Mist" msgid "Breeze of Mist"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:37 #: src/ui/colorbutton.py:39
msgid "Light Grey" msgid "Light Grey"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:38 #: src/ui/colorbutton.py:40
msgid "Grey" msgid "Grey"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:44 #: src/ui/colorbutton.py:46
msgid "transparent" msgid "transparent"
msgstr "" msgstr ""
#: src/ui/colorbutton.py:51 #: src/ui/rangeslider.py:180
msgid "custom" msgid "showing bytes {0} to {1} ({2})"
msgstr "" msgstr ""

20
make_installer.py Normal file
View File

@@ -0,0 +1,20 @@
import PyInstaller.__main__
import os
PyInstaller.__main__.run([
'krowlog.py',
# '--onefile',
'--noconfirm',
'--name=krowlog',
'--windowed',
'--icon=icons' + os.sep + 'krowlog.ico', # doesn't work on Linux (needs .desktop file), windows needs ico
'--add-data', 'src' + os.pathsep + 'src',
'--add-binary', 'icons' + os.pathsep + 'icons',
'--add-binary', 'locales' + os.pathsep + 'locales',
'--add-binary', 'LICENSE' + os.pathsep + '.',
'--hidden-import=krowlog',
'--hidden-import=watchdog',
'--hidden-import=watchdog.observers',
'--hidden-import=watchdog.version',
'--hidden-import=configparser'
])

View File

@@ -1,5 +1,5 @@
pip==22.2.2 pip==24.0
PySide6==6.3.1 PySide6_Essentials==6.6.2
setuptools==62.1.0 setuptools==69.2.0
urllib3==1.26.11 watchdog==4.0.0
watchdog==2.1.9 pyinstaller==6.5.0

107
src/install.py Normal file
View File

@@ -0,0 +1,107 @@
import logging
import os
import sys
import textwrap
from pathlib import Path
log = logging.getLogger("install")
def install():
try:
if sys.platform == 'win32' or sys.platform == 'cygwin':
_windows_set_icon()
else:
if _is_executable():
_linux_install_desktop_file()
_linux_install_icon()
except:
log.exception("failed to install system stuff")
def _is_executable() -> bool:
"""
Checks if we run from an executable (as opposed to from source by calling 'python krowlog.py')
:return: True if this process is run from a distribution binary
"""
return Path(sys.executable).name == 'krowlog'
def _linux_install_desktop_file():
apps_dir = Path.home() / ".local" / "share" / "applications"
if apps_dir.exists() and apps_dir.is_dir():
krowlog_desktop_file = apps_dir / "krowlog.desktop"
if not krowlog_desktop_file.exists():
desktop_file_data = textwrap.dedent("""\
[Desktop Entry]
Type=Application
Version=1.5
Terminal=false
Name=KrowLog
GenericName=Log Viewer
Comment=A viewer for text files of arbitrary size.
Comment[de]=Betrachter für Textdateien beliebiger Größe.
Categories=Qt;Development;Utility;TextTools;IDE;Viewer;
Keywords=Text;Viewer;
MimeType=text/plain;text/x-log;
Icon=krowlog
Exec={binary} %F
""".format(binary=Path(sys.executable).resolve()))
krowlog_desktop_file.write_text(desktop_file_data, "utf8")
def _linux_install_icon():
local_share = Path.home().joinpath(".local").joinpath("share")
if local_share.is_dir():
icon_dir = local_share / "icons" / "hicolor" / "scalable" / "apps"
_linux_install_icon_to_path(icon_dir / "krowlog.svg")
def _linux_install_icon_to_path(path: Path):
if path.exists():
return
if not path.parent.exists():
path.parent.mkdir(parents=True, exist_ok=True)
svg = textwrap.dedent("""\
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="64" height="64" viewBox="0 0 128 128" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="bg1" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#9f8700"/>
<stop offset="100%" style="stop-color:#ffdb00"/>
</linearGradient>
<linearGradient id="fg1" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#8caec7"/>
<stop offset="100%" style="stop-color:#6289a3"/>
</linearGradient>
</defs>
<rect x="8" y="8" width="112" height="112" style="fill:url(#fg1)" rx="10"/>
<path style="fill:black"
d="M76,113
L15,113
L15,70
C15,70 25,55 45,36
C53,29 60,26 78,32
C85,34 90,32 90,32
C95,30 108,35 110,40
L110,40
C83,48 80,60 76,71
C74,80 76,113 76,113
z"/>
<rect x="8" y="8" width="112" height="112"
style="fill:none; stroke:url(#bg1); stroke-width:14" rx="10"/>
<circle cx="63" cy="43" r="4.5" fill="white"/>
</svg>""")
path.write_text(svg, "utf8")
pass
def _windows_set_icon():
# make icon appear in Windows
# see https://stackoverflow.com/questions/1551605/how-to-set-applications-taskbar-icon-in-windows-7/1552105#1552105
if sys.platform == 'win32' or sys.platform == 'cygwin':
myappid = 'krowlog' # arbitrary string
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)

View File

@@ -1,10 +1,10 @@
import logging import logging
from typing import List
from PySide6.QtWidgets import * from PySide6.QtWidgets import *
from PySide6.QtGui import * from PySide6.QtGui import *
from PySide6.QtCore import Qt from PySide6.QtCore import Qt
from src.ui.icon import Icon
from src.util import urlutils from src.util import urlutils
from src.settings.cutesettings import CuteSettings from src.settings.cutesettings import CuteSettings
from src.pluginregistry import PluginRegistry from src.pluginregistry import PluginRegistry
@@ -12,10 +12,8 @@ from src.plugins.domain.menucontribution import MenuContribution, sort_menu_cont
from src.plugins.domain.raction import RAction from src.plugins.domain.raction import RAction
from src.plugins.domain.rmenu import RMenu from src.plugins.domain.rmenu import RMenu
from src.settings.settingsstore import SettingsStore from src.settings.settingsstore import SettingsStore
from src.ui.bigtext.highlightingdialog import HighlightingDialog
from src.ui.tabs import Tabs from src.ui.tabs import Tabs
from src.util.urlutils import url_is_file from src.util.urlutils import url_is_file
from functools import reduce
from src.i18n import _ from src.i18n import _
@@ -42,9 +40,6 @@ class MainWindow(QMainWindow):
self._menu_recent_files = QMenu(_("Open &Recent"), self) self._menu_recent_files = QMenu(_("Open &Recent"), self)
self.setCentralWidget(self.tabs) self.setCentralWidget(self.tabs)
self.status_bar = QStatusBar(self) self.status_bar = QStatusBar(self)
self.status_bar_text = QLabel("");
self.status_bar_text.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse)
self.status_bar.addWidget(self.status_bar_text)
self.setStatusBar(self.status_bar) self.setStatusBar(self.status_bar)
self.setMenuBar(self.create_dynamic_menu_bar()) self.setMenuBar(self.create_dynamic_menu_bar())
@@ -54,7 +49,6 @@ class MainWindow(QMainWindow):
menu_bar = QMenuBar() menu_bar = QMenuBar()
menu_contributions: [MenuContribution] = PluginRegistry.execute_flat_map("get_menu_contributions") menu_contributions: [MenuContribution] = PluginRegistry.execute_flat_map("get_menu_contributions")
menu_contributions.append(MenuContribution("settings", action=self._action_highlighter()))
menu_contributions.append(MenuContribution("settings", action=self._action_highlight_search_terms())) menu_contributions.append(MenuContribution("settings", action=self._action_highlight_search_terms()))
menu_contributions.append(MenuContribution("settings", action=self._action_new_tab())) menu_contributions.append(MenuContribution("settings", action=self._action_new_tab()))
@@ -68,7 +62,8 @@ class MainWindow(QMainWindow):
] ]
for (menu_id, menu_label) in known_menus: for (menu_id, menu_label) in known_menus:
menu = QMenu(menu_label, self) menu = QMenu(self)
menu.setTitle(menu_label)
mcs: [MenuContribution] = [mc for mc in menu_contributions if mc.menu_id == menu_id] mcs: [MenuContribution] = [mc for mc in menu_contributions if mc.menu_id == menu_id]
if len(mcs) == 0: if len(mcs) == 0:
continue continue
@@ -78,7 +73,7 @@ class MainWindow(QMainWindow):
menu.addAction(action) menu.addAction(action)
if menu_contribution.menu: if menu_contribution.menu:
submenu = QMenu(menu_contribution.menu.label, menu_bar) submenu = QMenu(menu_contribution.menu.label, menu_bar)
submenu.setIcon(QIcon.fromTheme(menu_contribution.menu.icon_from_theme)) submenu.setIcon(Icon.fromTheme(menu_contribution.menu.icon_from_theme))
menu_contribution.menu.add_change_listener( menu_contribution.menu.add_change_listener(
lambda qmenu=submenu, rmenu=menu_contribution.menu: self._rmenu_update(qmenu, rmenu)) lambda qmenu=submenu, rmenu=menu_contribution.menu: self._rmenu_update(qmenu, rmenu))
self._rmenu_update(submenu, menu_contribution.menu) self._rmenu_update(submenu, menu_contribution.menu)
@@ -94,14 +89,6 @@ class MainWindow(QMainWindow):
action = raction.to_qaction(qmenu) action = raction.to_qaction(qmenu)
qmenu.addAction(action) qmenu.addAction(action)
def _action_highlighter(self):
manage = RAction(
_("&Highlighter"),
action=lambda: HighlightingDialog(self.settings).exec(),
shortcut='Ctrl+H'
)
return manage
def _action_highlight_search_terms(self): def _action_highlight_search_terms(self):
highlight_search_terms = RAction(_("Highlight &Searches")) highlight_search_terms = RAction(_("Highlight &Searches"))
highlight_search_terms.set_checkable(True) highlight_search_terms.set_checkable(True)

View File

@@ -1,11 +1,7 @@
from abc import abstractmethod
class PluginBase(): class PluginBase():
def __init__(self): def __init__(self):
pass pass
@abstractmethod
def copy(self): def copy(self):
""" """
Subclasses that use state must implement this method and return a new instance of themselves. Subclasses that use state must implement this method and return a new instance of themselves.

Some files were not shown because too many files have changed in this diff Show More