1
0
Fork 0

Adding upstream version 1.4.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
Daniel Baumann 2025-06-22 23:40:13 +02:00
parent fc174fe3e6
commit 02d935e272
Signed by: daniel.baumann
GPG key ID: BCC918A2ABD66424
9917 changed files with 7658792 additions and 0 deletions

10
.clang-tidy Normal file
View file

@ -0,0 +1,10 @@
# SPDX-License-Identifier: GPL-2.0-or-later
Checks: '-*, modernize-deprecated-headers, modernize-loop-convert, modernize-use-override, modernize-redundant-void-arg, modernize-use-emplace, modernize-use-noexcept, modernize-use-bool-literals, modernize-pass-by-value, modernize-use-equals-delete'
#, modernize-use-equals-default (gave false results)
#, readability-*, bugprone-*'
WarningsAsErrors: ''
HeaderFilterRegex: '.*/src/[^3].*'
FormatStyle: 'file'
CheckOptions:
- key: modernize-loop-convert.UseCxx20ReverseRanges
value: false

13
.gitmessage Normal file
View file

@ -0,0 +1,13 @@
Put your meaningful title here, 50 characters max
Your meaningful description follows after a blank line.
Please follow the "seven rules of a great Git commit message":
https://chris.beams.io/posts/git-commit/
Activate this git commit message template like this:
git config commit.template .gitmessage
If you fix a bug with this commit, then mention it with the full URL and a
GitLab recognized keyword, if applicable. Like this:
Fixes https://gitlab.com/inkscape/inkscape/-/issues/1234

12
.gitmodules vendored Normal file
View file

@ -0,0 +1,12 @@
[submodule "share/extensions"]
path = share/extensions
url = https://gitlab.com/inkscape/extensions.git
[submodule "src/3rdparty/2geom"]
path = src/3rdparty/2geom
url = https://gitlab.com/inkscape/lib2geom.git
[submodule "share/themes"]
path = share/themes
url = https://gitlab.com/inkscape/themes.git
[submodule "src/3rdparty/libcroco"]
path = src/3rdparty/libcroco
url = https://gitlab.com/inkscape/libcroco.git

191
AUTHORS Normal file
View file

@ -0,0 +1,191 @@
Maximilian Albert
Joshua A. Andler
Tavmjong Bah
Pierre Barbry-Blot
Jean-François Barraud
Campbell Barton
Bill Baxter
John Beard
John Bintz
Arpad Biro
Nicholas Bishop
Joshua L. Blocher
Hanno Böck
Tomasz Boczkowski
Adrian Boguszewski
Henrik Bohre
Boldewyn
Daniel Boles
Daniel Borgmann
Bastien Bouclet
Hans Breuer
Gustav Broberg
Christopher Brown
Marcus Brubaker
Luca Bruno
Brynn
Nicu Buculei
Bulia Byak
Pierre Caclin
Ian Caldwell
Gail Carmichael
Ed Catmur
Chema Celorio
Jabiertxo Arraiza Cenoz
Johan Ceuppens
Zbigniew Chyla
Alexander Clausen
John Cliff
Kees Cook
Ben Cromwell
Jon Cruz
Aurélie De-Cooman
Kris De Gussem
Milosz Derezynski
Daniel Díaz
Bruno Dilly
Larry Doolittle
Nicolas Dufour
Tim Dwyer
Maxim V. Dziumanenko
Moritz Eberl
Johan Engelen
Miklos Erdelyi
Ulf Erikson
Noé Falzon
Sebastian Faubel
Frank Felfe
Andrew Fitzsimon
Edward Flick
Marcin Floryan
Fred
Ben Fowler
Cedric Gemy
Steren Giannini
Olivier Gondouin
Ted Gould
Toine de Greef
Michael Grosberg
Bryce Harrington
Dale Harvey
Aurélio Adnauer Heckert
René de Hesselle
Carl Hetherington
Jos Hirth
Hannes Hochreiner
Thomas Holder
Joel Holdsworth
Christoffer Holmstedt
Alan Horkan
Karl Ove Hufthammer
Richard Hughes
Nathan Hurst
inductiveload
Thomas Ingham
Jean-Olivier Irisson
Bob Jamison
Ted Janeczko
Marc Jeanmougin
jEsuSdA
Lauris Kaplinski
Lynn Kerby
Niko Kiirala
James Kilfiger
Nikita Kitaev
Jason Kivlighn
Adrian Knoth
Krzysztof Kosiński
Petr Kovar
Michael Kowalski
Benoît Lavorata
Alex Leone
Julien Leray
Raph Levien
Diederik van Lierop
Nicklas Lindgren
Vitaly Lipatov
Ivan Louette
Fernando Lucchesi Bastos Jurema
Pierre-Antoine Marc
Aurel-Aimé Marmion
Colin Marquardt
Craig Marshall
Ivan Masár
Dmitry G. Mastrukov
David Mathog
Matiphas
Patrick McDermott
Michael Meeks
Federico Mena
MenTaLguY
Aubanel Monnier
Vincent Montagne
Tim Mooney
Derek P. Moore
Chris Morgan
Peter Moulder
Jörg Müller
Yukihiro Nakai
Victor Navez
Jonathan Neuhauser
Christian Neumair
Nick
Andreas Nilsson
Mitsuru Oka
Vinícius dos Santos Oliveira
Martin Owens
PBS
Alvin Penner
Matthew Petroff
Jon Phillips
Zdenko Podobny
Alexandre Prokoudine
Jean-René Reinhard
Alexey Remizov
Frederic Rodrigo
Hugo Rodrigues
Jean Franco Amoni Rodríguez
Juarez Rudsatz
Xavier Conde Rueda
Felipe Corrêa da Silva Sanches
Christian Schaller
Marco Scholten
Tom von Schwerdtner
Markus Schwienbacher
Danilo Šegan
Abhishek Sharma
Tim Sheridan
Shivaken
Rafał Siejakowski
Michael Sloan
John Smith
Sandra Snan
Boštjan Špetič
Aaron Spike
Kaushik Sridharan
Ralf Stephan
Dariusz Stojek
Patrick Storz
Martin Sucha
Sushant A.A.
~suv
Pat Suwalski
Adib Taraben
Parcly Taxel
Hugh Tebby
Jonas Termeau
David Turner
Andre Twupack
Aleksandar Urošević
Alex Valavanis
Joakim Verona
Lucas Vieites
Daniel Wagenaar
Liam P. White
Sebastian Wüst
Michael Wybrow
Gellule Xg
Daniel Yacob
Masatake Yamato
David Yip
Wen-Wei Kao

305
CMakeLists.txt Normal file
View file

@ -0,0 +1,305 @@
# SPDX-License-Identifier: GPL-2.0-or-later
cmake_minimum_required(VERSION 3.1.0)
cmake_policy(SET CMP0003 NEW) # don't be prolific with library paths
cmake_policy(SET CMP0005 NEW) # proper define quoting
cmake_policy(SET CMP0009 NEW) # don't follow symbolic links when using GLOB
if(POLICY CMP0075)
cmake_policy(SET CMP0075 NEW) # link check-executable to CMAKE_REQUIRED_LIBRARIES (CMake 3.12.1)
endif(POLICY CMP0075)
message("------------------------------")
message("Building Makefile for Inkscape")
message("------------------------------")
message("Source Dir: ${CMAKE_CURRENT_SOURCE_DIR}")
message("Binary Dir: ${CMAKE_CURRENT_BINARY_DIR}")
# -----------------------------------------------------------------------------
# CMake Configuration
# -----------------------------------------------------------------------------
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# set(CMAKE_CXX_EXTENSIONS OFF) # enforces -std=c++20 instead of -std=gnu++20
# TODO: build currently fails with it as we actually depend on GNU compiler extensions...
# mostly use of the non-Standard M_PI et al. TODO: C++20: Use the <numbers> header.
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeScripts/Modules")
# avoid having empty buildtype
set(CMAKE_BUILD_TYPE_INIT "Release")
include(CMakeScripts/HelperFunctions.cmake)
include(CMakeScripts/ConfigEnv.cmake)
project(inkscape)
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME inkscape) # needs to be before any install() commands
include(GNUInstallDirs) # for the CMAKE_INSTALL_LIBDIR variable
include(CMakeScripts/ConfigPaths.cmake)
include(CMakeDependentOption)
set(PROJECT_NAME inkscape)
# see https://gitlab.com/inkscape/inkscape/-/issues/551 for versioning suffixes
set(INKSCAPE_VERSION_MAJOR 1)
set(INKSCAPE_VERSION_MINOR 4)
set(INKSCAPE_VERSION_PATCH 0)
set(INKSCAPE_VERSION_SUFFIX "")
set(INKSCAPE_VERSION ${INKSCAPE_VERSION_MAJOR}.${INKSCAPE_VERSION_MINOR})
if(INKSCAPE_VERSION_PATCH)
set(INKSCAPE_VERSION ${INKSCAPE_VERSION}.${INKSCAPE_VERSION_PATCH})
endif()
if(INKSCAPE_VERSION_SUFFIX)
set(INKSCAPE_VERSION ${INKSCAPE_VERSION}${INKSCAPE_VERSION_SUFFIX})
endif()
set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
file(RELATIVE_PATH
INKSCAPE_INSTALL_LIBDIR_RELATIVE_TO_BINDIR
"${CMAKE_INSTALL_FULL_BINDIR}"
"${CMAKE_INSTALL_FULL_LIBDIR}/inkscape")
if(APPLE)
SET(CMAKE_MACOSX_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "@loader_path/${INKSCAPE_INSTALL_LIBDIR_RELATIVE_TO_BINDIR}")
else()
SET(CMAKE_INSTALL_RPATH "$ORIGIN/${INKSCAPE_INSTALL_LIBDIR_RELATIVE_TO_BINDIR}")
endif()
# this can be removed if/when cmake 3.1 is made the minimum required version
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
# console output is slow as hell on Windows and as a result status messages of the "install" target slow down
# the whole build process considerably (especially since we also copy a lot of files from the devlibs)
# TODO: Is this worth to be configurable / also applicable to other platforms?
if(WIN32 AND NOT CMAKE_INSTALL_MESSAGE)
set(CMAKE_INSTALL_MESSAGE "LAZY")
endif()
# Define a very strict set of build flags that will prevent any use of deprecated symbols.
# This will almost certainly cause compilation failure and is intended only for developer use.
set(CMAKE_CXX_FLAGS_STRICT "${CMAKE_CXX_FLAGS_DEBUG} -Werror=deprecated-declarations -DGTK_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTKMM_DISABLE_DEPRECATED -DGDKMM_DISABLE_DEPRECATED -DGLIBMM_DISABLE_DEPRECATED"
CACHE STRING
"Flags used by C++ compiler during Strict builds"
FORCE)
set(CMAKE_C_FLAGS_STRICT "${CMAKE_C_FLAGS_DEBUG} -Werror=deprecated-declarations -DGTK_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTKMM_DISABLE_DEPRECATED -DGDKMM_DISABLE_DEPRECATED"
CACHE STRING
"Flags used by C compiler during Strict builds"
FORCE)
mark_as_advanced(
CMAKE_CXX_FLAGS_STRICT
CMAKE_C_FLAGS_STRICT)
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING
"Choose the type of build, options are: None(CMAKE_CXXFLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel Strict."
FORCE)
# -----------------------------------------------------------------------------
# Redirect output files
# -----------------------------------------------------------------------------
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR} CACHE PATH "Output directory for runtime binaries")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} CACHE PATH "Output directory for shared libraries")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} CACHE PATH "Output directory for static libraries")
# -----------------------------------------------------------------------------
# Options
# -----------------------------------------------------------------------------
option(WITH_GNU_READLINE "Compile with GNU Readline support (shell mode)" ON)
option(ENABLE_LCMS "Compile with LCMS support" ON)
option(WITH_SVG2 "Compile with support for new SVG2 features" ON)
option(WITH_LPETOOL "Compile with LPE Tool" OFF)
option(LPE_ENABLE_TEST_EFFECTS "Compile with test experimental LPEs enabled" OFF)
option(WITH_OPENMP "Compile with OpenMP support" ON)
option(WITH_PROFILING "Turn on profiling" OFF) # Set to true if compiler/linker should enable profiling
option(BUILD_SHARED_LIBS "Compile libraries as shared and not static" ON)
option(ENABLE_POPPLER "Compile with support of libpoppler" ON)
option(ENABLE_POPPLER_CAIRO "Compile with support of libpoppler-cairo for rendering PDF preview (depends on ENABLE_POPPLER)" ON)
option(WITH_IMAGE_MAGICK "Compile with support of ImageMagick for raster extensions and image import resolution (requires ImageMagick 6; set to OFF if you prefer GraphicsMagick)" ON)
option(WITH_GRAPHICS_MAGICK "Compile with support of GraphicsMagick for raster extensions and image import resolution" ON)
option(WITH_LIBCDR "Compile with support of libcdr for CorelDRAW Diagrams" ON)
option(WITH_LIBVISIO "Compile with support of libvisio for Microsoft Visio Diagrams" ON)
option(WITH_LIBWPG "Compile with support of libwpg for WordPerfect Graphics" ON)
option(WITH_GSPELL "Compile with support of gspell" ON)
option(WITH_GSOURCEVIEW "Compile with support of gsourceview (text syntax coloring)" ON)
option(WITH_NLS "Compile with Native Language Support (using gettext)" ON)
option(WITH_JEMALLOC "Compile with JEMALLOC support" OFF)
option(WITH_ASAN "Compile with Clang's AddressSanitizer (for debugging purposes)" OFF)
option(WITH_INTERNAL_2GEOM "Prefer internal copy of lib2geom" OFF)
cmake_dependent_option(WITH_X11 "Compile with X11 support" ON "UNIX; NOT APPLE" OFF)
option(WITH_FUZZ "Compile for fuzzing purpose (use 'make fuzz' only)" OFF)
mark_as_advanced(WITH_FUZZ)
option(WITH_MANPAGE_COMPRESSION "gzips manpages if gzip is available" ON)
mark_as_advanced(WITH_MANPAGE_COMPRESSION)
option(ENABLE_BINRELOC "Enable relocatable binaries" OFF)
include(CMakeScripts/DefineDependsandFlags.cmake) # Includes, Compiler Flags, and Link Libraries
include(CMakeScripts/HelperMacros.cmake) # Misc Utility Macros
# -----------------------------------------------------------------------------
# BAD HACKS, NEED TO INVESTIGATE MAKING THESE LESS BAD
if(BUILD_SHARED_LIBS AND NOT WIN32)
add_definitions(-fPIC)
endif()
#
# end badness
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Subdirectories
# -----------------------------------------------------------------------------
add_subdirectory(src)
if(ENABLE_NLS)
add_subdirectory(po)
endif(ENABLE_NLS)
if(NOT WIN32)
include(CMakeScripts/Pod2man.cmake)
add_subdirectory(man)
endif()
# -----------------------------------------------------------------------------
# Check License Headers
# -----------------------------------------------------------------------------
add_custom_target(check-license-headers WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND ./buildtools/check_license_headers.py)
# -----------------------------------------------------------------------------
# Test Harness
# -----------------------------------------------------------------------------
if(BUILD_TESTING OR NOT DEFINED BUILD_TESTING)
find_package(GTest)
if(GTEST_FOUND)
set(DART_TESTING_TIMEOUT 180 CACHE STRING "Test timeout") # if running for > 180 s something must be wrong)
include(CTest)
add_subdirectory(testfiles EXCLUDE_FROM_ALL)
else()
set(BUILD_TESTING OFF)
message(WARNING "No gtest found! Disabling testing...\n"
"Consider installing it via package manager (install 'libgtest-dev' or equivalent).")
endif()
endif()
# -----------------------------------------------------------------------------
# Clean Targets
# -----------------------------------------------------------------------------
add_custom_target(clean-cmake-files
COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_SOURCE_DIR}/CMakeScripts/CleanAll.cmake"
)
add_custom_target(clean-all
COMMAND ${CMAKE_BUILD_TOOL} clean
COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_SOURCE_DIR}/CMakeScripts/CleanAll.cmake"
)
# -----------------------------------------------------------------------------
# Install Target
# -----------------------------------------------------------------------------
add_subdirectory(share)
if(WIN32)
include(CMakeScripts/InstallMSYS2.cmake)
endif()
# -----------------------------------------------------------------------------
# Uninstall Target
# -----------------------------------------------------------------------------
if(WIN32)
add_custom_target(uninstall
"${CMAKE_COMMAND}" -E remove_directory "${CMAKE_INSTALL_PREFIX}")
else()
configure_file(
"${CMAKE_SOURCE_DIR}/CMakeScripts/cmake_uninstall.cmake.in"
"${CMAKE_BINARY_DIR}/cmake_uninstall.cmake"
@ONLY)
add_custom_target(uninstall
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
endif()
# -----------------------------------------------------------------------------
# Dist Targets
# -----------------------------------------------------------------------------
include(CMakeScripts/Dist.cmake)
# -----------------------------------------------------------------------------
# Packaging (CPack)
# -----------------------------------------------------------------------------
include(CMakeScripts/ConfigCPack.cmake)
# ----------------------------------------------------------------------
# Information Summary
# ----------------------------------------------------------------------
message("------------------------------------------------------------------------")
message("Configuration Summary")
message("------------------------------------------------------------------------")
# project info
message("PROJECT_NAME: ${PROJECT_NAME}")
message("INKSCAPE_VERSION: ${INKSCAPE_VERSION}")
message("INKSCAPE_DIST_PREFIX: ${INKSCAPE_DIST_PREFIX}")
message("")
# cmake info
message("CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}")
message("CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}")
message("PACKAGE_LOCALE_DIR ${PACKAGE_LOCALE_DIR}")
message("CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
message("CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}")
message("CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
message("CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
message("CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
message("CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
message("")
if(WIN32)
message("CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
message("CMAKE_FIND_LIBRARY_PREFIXES: ${CMAKE_FIND_LIBRARY_PREFIXES}")
message("CMAKE_FIND_LIBRARY_SUFFIXES: ${CMAKE_FIND_LIBRARY_SUFFIXES}")
message("")
endif()
# dependency info
message("ENABLE_LCMS: ${ENABLE_LCMS}")
message("ENABLE_POPPLER: ${ENABLE_POPPLER}")
message("ENABLE_POPPLER_CAIRO: ${ENABLE_POPPLER_CAIRO}")
message("WITH_GNU_READLINE: ${WITH_GNU_READLINE}")
message("WITH_GSPELL: ${WITH_GSPELL}")
message("WITH_GSOURCEVIEW: ${WITH_GSOURCEVIEW}")
message("WITH_IMAGE_MAGICK: ${WITH_IMAGE_MAGICK}")
message("WITH_GRAPHICS_MAGICK: ${WITH_GRAPHICS_MAGICK}")
message("WITH_LIBCDR: ${WITH_LIBCDR}")
message("WITH_LIBVISIO: ${WITH_LIBVISIO}")
message("WITH_LIBWPG: ${WITH_LIBWPG}")
message("WITH_NLS: ${WITH_NLS}")
message("WITH_OPENMP: ${WITH_OPENMP}")
message("WITH_JEMALLOC: ${WITH_JEMALLOC}")
message("WITH_ASAN: ${WITH_ASAN}")
message("WITH_INTERNAL_2GEOM: ${WITH_INTERNAL_2GEOM}")
message("WITH_X11: ${WITH_X11}")
message("WITH_PROFILING: ${WITH_PROFILING}")
message("BUILD_TESTING: ${BUILD_TESTING}")
if(WIN32)
message("")
message("HAVE_MINGW64: ${HAVE_MINGW64}")
message("MINGW_PATH: ${MINGW_PATH}")
message("MINGW_ARCH: ${MINGW_ARCH}")
endif()
message("------------------------------------------------------------------------")

View file

@ -0,0 +1,22 @@
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

21
CMakeScripts/CPack.cmake Normal file
View file

@ -0,0 +1,21 @@
# This file reconfigures variables at CPack time.
#
# It is called by
# https://cmake.org/cmake/help/latest/module/CPack.html#variable:CPACK_PROJECT_CONFIG_FILE
#
#used to get cmake-time variables at cpack-time
set(INKSCAPE_VERSION_SUFFIX @INKSCAPE_VERSION_SUFFIX@)
set(CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@)
if(CPACK_GENERATOR STREQUAL "NSIS")
# NSIS doesn't always like forward slashes
file(TO_NATIVE_PATH "${CPACK_NSIS_MUI_HEADERIMAGE}" CPACK_NSIS_MUI_HEADERIMAGE_NATIVE)
set(CPACK_NSIS_MUI_HEADERIMAGE "${CPACK_NSIS_MUI_HEADERIMAGE_NATIVE}")
file(TO_NATIVE_PATH "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}" CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP_NATIVE)
set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP_NATIVE}")
elseif(CPACK_GENERATOR STREQUAL "WIX")
# for wix version values need to look like 'x.x.x.x' where x is an integer from 0 to 65534.
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
endif()

View file

@ -0,0 +1,17 @@
set(_generated
${CMAKE_CURRENT_BINARY_DIR}/CMakeCache.txt
${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
${CMAKE_CURRENT_BINARY_DIR}/cmake_install.cmake
${CMAKE_CURRENT_BINARY_DIR}/po/cmake_install.cmake
${CMAKE_CURRENT_BINARY_DIR}/Makefile
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles
)
message("${_generated}")
foreach(file ${_generated})
if(EXISTS ${file})
message("Removing ${file}")
file(REMOVE_RECURSE ${file})
endif()
endforeach(file)

View file

@ -0,0 +1,231 @@
############################
# CPack configuration file #
############################
## General ##
set(CPACK_PACKAGE_NAME "Inkscape")
set(CPACK_PACKAGE_VENDOR "Inkscape")
set(CPACK_PACKAGE_VERSION_MAJOR ${INKSCAPE_VERSION_MAJOR}) # TODO: Can be set via project(), see CMAKE_PROJECT_VERSION_PATCH
set(CPACK_PACKAGE_VERSION_MINOR ${INKSCAPE_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${INKSCAPE_VERSION_PATCH})
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}${INKSCAPE_VERSION_SUFFIX}")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md") # TODO: Where is this used? Do we need a better source?
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Open-source vector graphics editor")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://inkscape.org")
set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/branding/inkscape.svg") # TODO: Can any generator make use of this?
set(CPACK_PACKAGE_CONTACT "Inkscape developers <inkscape-devel@lists.inkscape.org>")
set(CPACK_PACKAGE_FILE_NAME ${INKSCAPE_DIST_PREFIX})
set(CPACK_PACKAGE_CHECKSUM "SHA256")
set(CPACK_PACKAGE_EXECUTABLES "inkscape;Inkscape;inkview;Inkview")
set(CPACK_CREATE_DESKTOP_LINKS "inkscape")
if(WIN32)
set(CPACK_PACKAGE_INSTALL_DIRECTORY "Inkscape")
set(CPACK_STRIP_FILES FALSE)
else()
set(CPACK_PACKAGE_INSTALL_DIRECTORY "inkscape")
set(CPACK_STRIP_FILES TRUE)
endif()
# This creates a screen in the windows installers asking users to "Agree" to the GPL which is incorrect.
# set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSES/GPL-3.0.txt")
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")
# set( CPACK_RESOURCE_FILE_WELCOME "${CMAKE_SOURCE_DIR}/README.md") # TODO: can we use this?
set(CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION TRUE)
# specific config for source packaging (note this is used by the 'dist' target)
set(CPACK_SOURCE_GENERATOR "TXZ")
set(CPACK_SOURCE_PACKAGE_FILE_NAME ${INKSCAPE_DIST_PREFIX})
set(CPACK_SOURCE_IGNORE_FILES "~$;[.]swp$;/[.]svn/;/[.]git/;.gitignore;/build/;/obj*/;cscope.*;.gitlab*;.coveragerc;*.md;")
# this allows to override above configuration per cpack generator at CPack-time
set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CMakeScripts/CPack.cmake")
configure_file("${CMAKE_SOURCE_DIR}/CMakeScripts/CPack.cmake" "${CMAKE_BINARY_DIR}/CMakeScripts/CPack.cmake" @ONLY)
## Generator-specific configuration ##
# NSIS (Windows .exe installer)
set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/branding/inkscape.ico")
set(CPACK_NSIS_MUI_HEADERIMAGE "${CMAKE_SOURCE_DIR}/packaging/nsis/header.bmp")
set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/packaging/nsis/welcomefinish.bmp")
set(CPACK_NSIS_IGNORE_LICENSE_PAGE 1)
set(CPACK_NSIS_INSTALLED_ICON_NAME "bin/inkscape.exe")
set(CPACK_NSIS_HELP_LINK "${CPACK_PACKAGE_HOMEPAGE_URL}")
set(CPACK_NSIS_URL_INFO_ABOUT "${CPACK_PACKAGE_HOMEPAGE_URL}")
set(CPACK_NSIS_MENU_LINKS "${CPACK_PACKAGE_HOMEPAGE_URL}" "Inkscape Homepage")
set(CPACK_NSIS_COMPRESSOR "/SOLID lzma") # zlib|bzip2|lzma
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL "ON")
set(CPACK_NSIS_MODIFY_PATH "ON") # while the name does not suggest it, this also provides the possibility to add desktop icons
set(CPACK_NSIS_MUI_FINISHPAGE_RUN "inkscape") # TODO: this results in instance with administrative privileges!
set(CPACK_NSIS_MANIFEST_DPI_AWARE ON) # Make the text not blurry in installer
set(CPACK_NSIS_COMPRESSOR "${CPACK_NSIS_COMPRESSOR}\n SetCompressorDictSize 64") # hack (improve compression)
set(CPACK_NSIS_COMPRESSOR "${CPACK_NSIS_COMPRESSOR}\n BrandingText '${CPACK_PACKAGE_DESCRIPTION_SUMMARY}'") # hack (overwrite BrandingText)
set(CPACK_NSIS_COMPRESSOR "${CPACK_NSIS_COMPRESSOR}\n !define MUI_COMPONENTSPAGE_SMALLDESC") # hack (better components page layout)
file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}/packaging/nsis/fileassoc.nsh" native_path)
string(REPLACE "\\" "\\\\" native_path "${native_path}")
set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS "!include '${native_path}'")
set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "\
WriteRegStr SHCTX 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\App Paths\\\\inkscape.exe' '' '$INSTDIR\\\\bin\\\\inkscape.exe'\n\
WriteRegStr SHCTX 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\App Paths\\\\inkscape.exe' 'Path' '$INSTDIR\\\\bin'\n\
!insertmacro APP_ASSOCIATE 'svg' 'Inkscape.SVG' 'Scalable Vector Graphics' '$INSTDIR\\\\bin\\\\inkscape.exe,0' 'Open with Inkscape' '$INSTDIR\\\\bin\\\\inkscape.exe \\\"%1\\\"'\n\
!insertmacro APP_ASSOCIATE 'svgz' 'Inkscape.SVGZ' 'Compressed Scalable Vector Graphics' '$INSTDIR\\\\bin\\\\inkscape.exe,0' 'Open with Inkscape' '$INSTDIR\\\\bin\\\\inkscape.exe \\\"%1\\\"'\n\
!insertmacro UPDATEFILEASSOC")
set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "\
DeleteRegKey SHCTX 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\App Paths\\\\inkscape.exe'\n\
!insertmacro APP_UNASSOCIATE 'svg' 'Inkscape.SVG'\n\
!insertmacro APP_UNASSOCIATE 'svgz' 'Inkscape.SVGZ'\n\
!insertmacro UPDATEFILEASSOC")
# WIX (Windows .msi installer)
set(CPACK_WIX_UPGRADE_GUID "4d5fedaa-84a0-48be-bd2a-08246398361a")
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/share/branding/inkscape.ico")
set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/packaging/wix/Bitmaps/banner.bmp")
set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/packaging/wix/Bitmaps/dialog.bmp")
set(CPACK_WIX_UI_REF "WixUI_FeatureTree_NoLicense")
# install scope should ideally be 'perMachine', but can't be due to https://gitlab.kitware.com/cmake/cmake/-/issues/26029 :-(
# This blocks fixing https://gitlab.com/inkscape/inkscape/-/issues/1617 and https://gitlab.com/inkscape/inkscape/-/issues/1618 .
set(CPACK_WIX_INSTALL_SCOPE NONE)
set(CPACK_WIX_PROPERTY_ARPHELPLINK "${CPACK_PACKAGE_HOMEPAGE_URL}")
set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "${CPACK_PACKAGE_HOMEPAGE_URL}")
set(CPACK_WIX_PROPERTY_ARPURLUPDATEINFO "${CPACK_PACKAGE_HOMEPAGE_URL}/release")
set(CPACK_WIX_ROOT_FEATURE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
set(CPACK_WIX_LIGHT_EXTRA_FLAGS "-dcl:high") # set high compression
set(CPACK_WIX_PATCH_FILE "${CMAKE_SOURCE_DIR}/packaging/wix/app_registration.xml"
"${CMAKE_SOURCE_DIR}/packaging/wix/feature_attributes.xml")
set(CPACK_WIX_EXTRA_SOURCES "${CMAKE_SOURCE_DIR}/packaging/wix/featuretree_nolicense.wxs")
# DEB (Linux .deb bundle)
set(CPACK_DEBIAN_PACKAGE_SECTION "graphics")
set(CPACK_DEBIAN_INKSCAPE_PACKAGE_SUGGESTS "dia, pstoedit, scribus")
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "inkscape") # all package depend on inkscape
set(CPACK_DEBIAN_INKSCAPE_PACKAGE_DEPENDS "lib2geom${2GEOM_VERSION}")
set(CPACK_DEBIAN_INKSCAPE_PACKAGE_RECOMMENDS "aspell, imagemagick, libwmf-bin, inkscape-extensions, inkscape-translations, inkscape-themes")
set(CPACK_DEB_COMPONENT_INSTALL ON)
set(CPACK_COMPONENTS_GROUPING IGNORE)
set(CPACK_DEBIAN_INKSCAPE-EXTENSIONS_PACKAGE_DEPENDS "python3-numpy, python3-lxml, python3-scour, python3-packaging, python3-cssselect, python3-webencodings, python3-tinycss2, python3-bs4, python3-requests")
set(CPACK_DEBIAN_INKSCAPE-EXTENSIONS_PACKAGE_RECOMMENDS "inkscape-extension-manager")
set(CPACK_DEBIAN_INKSCAPE-EXTENSION-MANAGER_PACKAGE_DEPENDS "inkscape-extensions, python3-filecache")
set(CPACK_DEBIAN_LIB2GEOM-DEV_PACKAGE_RECOMMENDS "lib2geom${2GEOM_VERSION}")
set(CPACK_DEBIAN_LIB2GEOM1.3.0_PACKAGE_NAME "lib2geom${2GEOM_VERSION}")
set(CPACK_DEBIAN_LIB2GEOM-DEV_PACKAGE_NAME "lib2geom-dev")
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_ADD_LDCONFIG_CALL ON)
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS_PRIVATE_DIRS ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
## load cpack module (do this *after* all the CPACK_* variables have been set)
include(CPack)
## Component definition
# - variable names are UPPER CASE, even if component names are lower case
# - components/groups are ordered alphabetically by component/group name; groups always come first
# - empty (e.g. OS-specific) components are discarded automatically
cpack_add_install_type(full DISPLAY_NAME Full)
cpack_add_install_type(compact DISPLAY_NAME Compact) # no translations, dictionaries, examples, etc.
cpack_add_install_type(minimal DISPLAY_NAME Minimal) # minimal "working" set-up, excluding everything non-essential
cpack_add_component_group(
group_1_program_files
DISPLAY_NAME "Program Files"
EXPANDED)
cpack_add_component(inkscape
DISPLAY_NAME "Inkscape SVG Editor"
DESCRIPTION "Inkscape core files and dependencies"
GROUP "group_1_program_files"
REQUIRED)
cpack_add_component(python
DISPLAY_NAME "Python"
DESCRIPTION "Python interpreter (required to run Inkscape extensions)"
GROUP "group_1_program_files"
INSTALL_TYPES full compact)
cpack_add_component_group(
group_2_inkscape_data
DISPLAY_NAME "Inkscape Data"
EXPANDED)
cpack_add_component(extensions
DISPLAY_NAME "Extensions"
DESCRIPTION "Inkscape extensions (including many import and export plugins)"
GROUP "group_2_inkscape_data"
INSTALL_TYPES full compact)
cpack_add_component(extension_manager
DISPLAY_NAME "Extension Manager"
DESCRIPTION "Extension manager allows user to install extensions from the inkscape website"
DEPENDS "extensions"
GROUP "group_2_inkscape_data"
INSTALL_TYPES full compact)
cpack_add_component(themes
DISPLAY_NAME "Themes"
DESCRIPTION "Inkscape themes (look and feel including icons)"
GROUP "group_2_inkscape_data"
INSTALL_TYPES full compact)
cpack_add_component(examples
DISPLAY_NAME "Examples"
DESCRIPTION "Example files created in Inkscape"
GROUP "group_2_inkscape_data"
INSTALL_TYPES full)
cpack_add_component(tutorials
DISPLAY_NAME "Tutorials"
DESCRIPTION "Tutorials teaching Inkscape usage"
GROUP "group_2_inkscape_data"
INSTALL_TYPES full)
cpack_add_component(dictionaries
DISPLAY_NAME "Dictionaries"
DESCRIPTION "Dictionaries for some common languages for spell checking in Inkscape"
INSTALL_TYPES full)
cpack_add_component_group(
group_3_translations
DISPLAY_NAME "Translations"
DESCRIPTION "Translations and localized content for Inkscape")
get_inkscape_languages()
list(LENGTH INKSCAPE_LANGUAGE_CODES length)
math(EXPR length "${length} - 1")
if(WIN32)
foreach(index RANGE ${length})
list(GET INKSCAPE_LANGUAGE_CODES ${index} language_code)
list(GET INKSCAPE_LANGUAGE_NAMES ${index} language_name)
string(MAKE_C_IDENTIFIER "${language_code}" language_code_escaped)
cpack_add_component(translations.${language_code_escaped}
DISPLAY_NAME "${language_name}"
GROUP "group_3_translations"
INSTALL_TYPES full)
endforeach()
else()
cpack_add_component(translations
DISPLAY_NAME "Translations"
GROUP "group_3_translations"
INSTALL_TYPES full)
endif()
if(WITH_INTERNAL_2GEOM)
cpack_add_component(lib2geom_dev
DISPLAY_NAME "lib2geom-dev"
DESCRIPTION "Geometry library - dev files")
cpack_add_component(lib2geom${2GEOM_VERSION}
DISPLAY_NAME "lib2geom"
DESCRIPTION "Geometry library"
HIDDEN REQUIRED)
endif()

View file

@ -0,0 +1,26 @@
include(${CMAKE_CURRENT_LIST_DIR}/ConfigPaths.cmake)
# Set all HAVE_XXX variables, to correctly set all defines in config.h
include(CheckIncludeFiles)
include(CheckIncludeFileCXX)
include(CheckFunctionExists)
include(CheckStructHasMember)
include(CheckCXXSymbolExists)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${INKSCAPE_LIBS})
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${INKSCAPE_INCS_SYS})
CHECK_INCLUDE_FILES(ieeefp.h HAVE_IEEEFP_H)
CHECK_FUNCTION_EXISTS(mallinfo HAVE_MALLINFO)
CHECK_FUNCTION_EXISTS(mallinfo2 HAVE_MALLINFO2)
CHECK_INCLUDE_FILES(malloc.h HAVE_MALLOC_H)
CHECK_STRUCT_HAS_MEMBER("struct mallinfo" fordblks malloc.h HAVE_STRUCT_MALLINFO_FORDBLKS )
CHECK_STRUCT_HAS_MEMBER("struct mallinfo" fsmblks malloc.h HAVE_STRUCT_MALLINFO_FSMBLKS )
CHECK_STRUCT_HAS_MEMBER("struct mallinfo" hblkhd malloc.h HAVE_STRUCT_MALLINFO_HBLKHD )
CHECK_STRUCT_HAS_MEMBER("struct mallinfo" uordblks malloc.h HAVE_STRUCT_MALLINFO_UORDBLKS )
CHECK_STRUCT_HAS_MEMBER("struct mallinfo" usmblks malloc.h HAVE_STRUCT_MALLINFO_USMBLKS )
CHECK_CXX_SYMBOL_EXISTS(sincos math.h HAVE_SINCOS) # 2geom define
# Create the configuration files config.h in the binary root dir
configure_file(${CMAKE_SOURCE_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/include/config.h)
add_definitions(-DHAVE_CONFIG_H)

View file

@ -0,0 +1,38 @@
# -----------------------------------------------------------------------------
# Set platform defaults (originally copied from darktable)
# -----------------------------------------------------------------------------
if(WIN32)
message("-- Windows build detected, setting default features")
include(CMakeScripts/ConfigEnvMinGW.cmake)
# Setup Windows resource files compiler.
set(CMAKE_RC_COMPILER "${MINGW_BIN}/windres.exe")
set(CMAKE_RC_COMPILER_INIT windres)
enable_language(RC)
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -O coff -i <SOURCE> -o <OBJECT>")
# These options are required for having i18n support on Windows.
option(ENABLE_NLS "Compile with Native Language Support (using gettext)" ON)
# Does not compile on Windows with these options.
option(ENABLE_BINRELOC "Compile with binary relocation support" OFF)
option(WITH_JEMALLOC "Compile with JEMALLOC support" OFF)
endif()
if(APPLE)
message("-- Mac OS X build detected, setting default features")
# prefer macports and/or user-installed libraries over system ones
#LIST(APPEND CMAKE_PREFIX_PATH /opt/local /usr/local)
set(CMAKE_FIND_FRAMEWORK "LAST")
# test and display relevant env variables
if(DEFINED ENV{CMAKE_PREFIX_PATH})
message("CMAKE_PREFIX_PATH: $ENV{CMAKE_PREFIX_PATH}")
endif()
if(DEFINED ENV{GTKMM_BASEPATH})
message("GTKMM_BASEPATH: $ENV{GTKMM_BASEPATH}")
endif()
endif()

View file

@ -0,0 +1,98 @@
# -----------------------------------------------------------------------------
# Set the paths in this file if you want to build Inkscape from a shell other than the
# Windows built-in command line (i.e. MSYS) or IDEs such as CodeLite. These variables
# will be used as default if no environment variables are set.
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# MinGW Configuration
# -----------------------------------------------------------------------------
message(STATUS "Configuring MinGW environment:")
if("$ENV{MINGW_CHOST}" STREQUAL "")
message(WARNING " Could not detect MinGW build environment. We recommend building with MSYS2. Proceed at your own risk!")
else()
message(STATUS " Detected MinGW environment provided by MSYS2")
set(MINGW_PATH $ENV{MINGW_PREFIX})
endif()
# -----------------------------------------------------------------------------
# MINGW CHECKS
# -----------------------------------------------------------------------------
# Try to determine the MinGW processor architecture.
if("$ENV{MINGW_CHOST}" STREQUAL "i686-w64-mingw32")
set(HAVE_MINGW64 OFF)
set(MINGW_ARCH i686-w64-mingw32)
elseif("$ENV{MINGW_CHOST}" STREQUAL "x86_64-w64-mingw32")
set(HAVE_MINGW64 ON)
set(MINGW_ARCH x86_64-w64-mingw32)
elseif("$ENV{MINGW_CHOST}" STREQUAL "aarch64-w64-mingw32")
set(HAVE_MINGW64 ON)
set(MINGW_ARCH aarch64-w64-mingw32)
else()
message(FATAL_ERROR "Unable to determine MinGW processor architecture. Are you using an unsupported MinGW version?")
endif()
set(MINGW_BIN "${MINGW_PATH}/bin")
if(NOT EXISTS ${MINGW_BIN})
message(FATAL_ERROR "MinGW binary directory does not exist: ${MINGW_BIN}")
endif()
# Eliminate error messages when not having mingw in the environment path variable.
list(APPEND CMAKE_PROGRAM_PATH ${MINGW_BIN})
set(MINGW_LIB "${MINGW_PATH}/lib")
if(NOT EXISTS ${MINGW_LIB})
message(FATAL_ERROR "MinGW library directory does not exist: ${MINGW_LIB}")
endif()
# Add MinGW libraries to linker path.
link_directories(${MINGW_LIB})
set(MINGW_INCLUDE "${MINGW_PATH}/include")
if(NOT EXISTS ${MINGW_INCLUDE})
message(FATAL_ERROR "MinGW include directory does not exist: ${MINGW_INCLUDE}")
endif()
# Add MinGW headers to compiler include path.
include_directories(SYSTEM ${MINGW_INCLUDE})
# -----------------------------------------------------------------------------
# MSYS CHECKS
# -----------------------------------------------------------------------------
# Somehow the MSYS variable does not work as documented..
if("${CMAKE_GENERATOR}" STREQUAL "MSYS Makefiles")
set(HAVE_MSYS ON)
else()
set(HAVE_MSYS OFF)
endif()
# Set the path to the 'ar' utility for the MSYS shell as it fails to detect it properly.
if(HAVE_MSYS)
message(STATUS "Configuring MSYS environment:")
if(NOT EXISTS ${CMAKE_AR})
set(MINGW_AR ${MINGW_BIN}/ar.exe)
if(EXISTS ${MINGW_AR})
set(CMAKE_AR ${MINGW_AR} CACHE FILEPATH "Archive Utility")
else()
message(FATAL_ERROR "ar.exe not found.")
endif()
message(STATUS " Setting path to ar.exe: ${CMAKE_AR}")
endif()
endif()
# -----------------------------------------------------------------------------
# LIBRARY AND LINKER SETTINGS
# -----------------------------------------------------------------------------
# Tweak CMake into using Unix-style library names.
set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".dll")

View file

@ -0,0 +1,23 @@
message(STATUS "Creating build files in: ${CMAKE_CURRENT_BINARY_DIR}")
if(WIN32)
if(${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT})
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/inkscape"
CACHE PATH "Install path prefix, prepended onto install directories." FORCE)
endif()
set(INKSCAPE_DATADIR "") # can be set via the environment variable INKSCAPE_DATADIR at runtime
else()
if(NOT INKSCAPE_DATADIR)
set(INKSCAPE_DATADIR "${CMAKE_INSTALL_PREFIX}/share")
endif(NOT INKSCAPE_DATADIR)
endif()
if(NOT PACKAGE_LOCALE_DIR)
set(PACKAGE_LOCALE_DIR "share/locale") # packagers might overwrite this
endif(NOT PACKAGE_LOCALE_DIR)
if(NOT SHARE_INSTALL)
set(SHARE_INSTALL "share" CACHE STRING "Data file install path. Must be a relative path (from CMAKE_INSTALL_PREFIX), with no trailing slash.")
endif(NOT SHARE_INSTALL)
set(INKSCAPE_SHARE_INSTALL "${SHARE_INSTALL}/inkscape")

View file

@ -0,0 +1,474 @@
set(INKSCAPE_LIBS "")
set(INKSCAPE_INCS "")
set(INKSCAPE_INCS_SYS "")
set(INKSCAPE_CXX_FLAGS "")
set(INKSCAPE_CXX_FLAGS_DEBUG "")
list(APPEND INKSCAPE_INCS ${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/src
# generated includes
${CMAKE_BINARY_DIR}/include
)
# NDEBUG implies G_DISABLE_ASSERT
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPER)
if(CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPER} MATCHES "-DNDEBUG")
list(APPEND INKSCAPE_CXX_FLAGS "-DG_DISABLE_ASSERT")
endif()
# AddressSanitizer
# Clang's AddressSanitizer can detect more memory errors and is more powerful
# than compiling with _FORTIFY_SOURCE but has a performance impact (approx. 2x
# slower), so it's not suitable for release builds.
if(WITH_ASAN)
list(APPEND INKSCAPE_CXX_FLAGS "-fsanitize=address -fno-omit-frame-pointer")
list(APPEND INKSCAPE_LIBS "-fsanitize=address")
else()
# Undefine first, to suppress 'warning: "_FORTIFY_SOURCE" redefined'
list(APPEND INKSCAPE_CXX_FLAGS "-U_FORTIFY_SOURCE")
list(APPEND INKSCAPE_CXX_FLAGS "-D_FORTIFY_SOURCE=2")
endif()
# Disable deprecated Gtk and friends
list(APPEND INKSCAPE_CXX_FLAGS "-DGLIBMM_DISABLE_DEPRECATED")
list(APPEND INKSCAPE_CXX_FLAGS "-DGTKMM_DISABLE_DEPRECATED")
list(APPEND INKSCAPE_CXX_FLAGS "-DGDKMM_DISABLE_DEPRECATED")
list(APPEND INKSCAPE_CXX_FLAGS "-DGTK_DISABLE_DEPRECATED")
list(APPEND INKSCAPE_CXX_FLAGS "-DGDK_DISABLE_DEPRECATED")
# Errors for common mistakes
list(APPEND INKSCAPE_CXX_FLAGS "-fstack-protector-strong")
list(APPEND INKSCAPE_CXX_FLAGS "-Werror=format") # e.g.: printf("%s", std::string("foo"))
list(APPEND INKSCAPE_CXX_FLAGS "-Werror=format-security") # e.g.: printf(variable);
list(APPEND INKSCAPE_CXX_FLAGS "-Werror=ignored-qualifiers") # e.g.: const int foo();
list(APPEND INKSCAPE_CXX_FLAGS "-Werror=return-type") # non-void functions that don't return a value
list(APPEND INKSCAPE_CXX_FLAGS "-Wno-switch") # See !849 for discussion
list(APPEND INKSCAPE_CXX_FLAGS "-Wmisleading-indentation")
list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-Og") # -Og for _FORTIFY_SOURCE. One could add -Weffc++ here to see approx. 6000 warnings
list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-Wcomment")
list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-Wunused-function")
list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-Wunused-variable")
list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-D_GLIBCXX_ASSERTIONS")
if (CMAKE_COMPILER_IS_GNUCC)
list(APPEND INKSCAPE_CXX_FLAGS "-Wstrict-null-sentinel") # For NULL instead of nullptr
list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-fexceptions -grecord-gcc-switches -fasynchronous-unwind-tables")
if(CXX_COMPILER_VERSION VERSION_GREATER 8.0)
list(APPEND INKSCAPE_CXX_FLAGS_DEBUG "-fstack-clash-protection -fcf-protection")
endif()
endif()
# Define the flags for profiling if desired:
if(WITH_PROFILING)
set(BUILD_SHARED_LIBS off)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg")
endif()
include(CheckCXXSourceCompiles)
CHECK_CXX_SOURCE_COMPILES("
#include <atomic>
#include <cstdint>
std::atomic<uint64_t> x (0);
int main() {
uint64_t i = x.load(std::memory_order_relaxed);
return 0;
}
"
LIBATOMIC_NOT_NEEDED)
IF (NOT LIBATOMIC_NOT_NEEDED)
message(STATUS " Adding -latomic to the libs.")
list(APPEND INKSCAPE_LIBS "-latomic")
ENDIF()
# ----------------------------------------------------------------------------
# Helper macros
# ----------------------------------------------------------------------------
# Turns linker arguments like "-framework Foo" into "-Wl,-framework,Foo" to
# make them safe for appending to INKSCAPE_LIBS
macro(sanitize_ldflags_for_libs ldflags_var)
# matches dash-argument followed by non-dash-argument
string(REGEX REPLACE "(^|;)(-[^;]*);([^-])" "\\1-Wl,\\2,\\3" ${ldflags_var} "${${ldflags_var}}")
endmacro()
# ----------------------------------------------------------------------------
# Files we include
# ----------------------------------------------------------------------------
if(WIN32)
# Set the link and include directories
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
list(APPEND INKSCAPE_LIBS "-lmscms")
list(APPEND INKSCAPE_CXX_FLAGS "-mms-bitfields")
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
list(APPEND INKSCAPE_CXX_FLAGS "-mwindows")
list(APPEND INKSCAPE_CXX_FLAGS "-mthreads")
endif()
list(APPEND INKSCAPE_LIBS "-lwinpthread")
if(HAVE_MINGW64)
list(APPEND INKSCAPE_CXX_FLAGS "-m64")
else()
list(APPEND INKSCAPE_CXX_FLAGS "-m32")
endif()
endif()
find_package(PkgConfig REQUIRED)
pkg_check_modules(INKSCAPE_DEP REQUIRED
harfbuzz
pangocairo>=1.44
pangoft2
fontconfig
gsl
gmodule-2.0
#double-conversion
bdw-gc #boehm-demers-weiser gc
lcms2)
# remove this line and uncomment the doiuble-conversion above when double-conversion.pc file gets shipped on all platforms we support
find_package(DoubleConversion REQUIRED) # lib2geom dependency
sanitize_ldflags_for_libs(INKSCAPE_DEP_LDFLAGS)
list(APPEND INKSCAPE_LIBS ${INKSCAPE_DEP_LDFLAGS})
list(APPEND INKSCAPE_INCS_SYS ${INKSCAPE_DEP_INCLUDE_DIRS})
add_definitions(${INKSCAPE_DEP_CFLAGS_OTHER})
if(WITH_JEMALLOC)
find_package(JeMalloc)
if (JEMALLOC_FOUND)
list(APPEND INKSCAPE_LIBS ${JEMALLOC_LIBRARIES})
else()
set(WITH_JEMALLOC OFF)
endif()
endif()
find_package(Iconv REQUIRED)
list(APPEND INKSCAPE_INCS_SYS ${Iconv_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${Iconv_LIBRARIES})
find_package(Intl REQUIRED)
list(APPEND INKSCAPE_INCS_SYS ${Intl_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${Intl_LIBRARIES})
add_definitions(${Intl_DEFINITIONS})
# Check for system-wide version of 2geom and fallback to internal copy if not found
if(NOT WITH_INTERNAL_2GEOM)
pkg_check_modules(2Geom QUIET IMPORTED_TARGET GLOBAL 2geom>=1.4.0)
if(2Geom_FOUND)
add_library(2Geom::2geom ALIAS PkgConfig::2Geom)
else()
set(WITH_INTERNAL_2GEOM ON CACHE BOOL "Prefer internal copy of lib2geom" FORCE)
message(STATUS "lib2geom not found, using internal copy in src/3rdparty/2geom")
endif()
endif()
if(WITH_INTERNAL_2GEOM)
set(2Geom_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/src/3rdparty/2geom/include)
endif()
if(ENABLE_POPPLER)
find_package(PopplerCairo)
if(POPPLER_FOUND)
set(HAVE_POPPLER ON)
if(ENABLE_POPPLER_CAIRO)
if(POPPLER_CAIRO_FOUND AND POPPLER_GLIB_FOUND)
set(HAVE_POPPLER_CAIRO ON)
endif()
endif()
else()
set(ENABLE_POPPLER_CAIRO OFF)
endif()
else()
set(HAVE_POPPLER OFF)
set(ENABLE_POPPLER_CAIRO OFF)
endif()
list(APPEND INKSCAPE_INCS_SYS ${POPPLER_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${POPPLER_LIBRARIES})
add_definitions(${POPPLER_DEFINITIONS})
if(WITH_LIBWPG)
pkg_check_modules(LIBWPG libwpg-0.3 librevenge-0.0 librevenge-stream-0.0)
if(LIBWPG_FOUND)
sanitize_ldflags_for_libs(LIBWPG_LDFLAGS)
list(APPEND INKSCAPE_INCS_SYS ${LIBWPG_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${LIBWPG_LDFLAGS})
add_definitions(${LIBWPG_DEFINITIONS})
else()
set(WITH_LIBWPG OFF)
endif()
endif()
if(WITH_LIBVISIO)
pkg_check_modules(LIBVISIO libvisio-0.1 librevenge-0.0 librevenge-stream-0.0)
if(LIBVISIO_FOUND)
sanitize_ldflags_for_libs(LIBVISIO_LDFLAGS)
list(APPEND INKSCAPE_INCS_SYS ${LIBVISIO_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${LIBVISIO_LDFLAGS})
add_definitions(${LIBVISIO_DEFINITIONS})
else()
set(WITH_LIBVISIO OFF)
endif()
endif()
if(WITH_LIBCDR)
pkg_check_modules(LIBCDR libcdr-0.1 librevenge-0.0 librevenge-stream-0.0)
if(LIBCDR_FOUND)
sanitize_ldflags_for_libs(LIBCDR_LDFLAGS)
list(APPEND INKSCAPE_INCS_SYS ${LIBCDR_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${LIBCDR_LDFLAGS})
add_definitions(${LIBCDR_DEFINITIONS})
else()
set(WITH_LIBCDR OFF)
endif()
endif()
FIND_PACKAGE(JPEG)
IF(JPEG_FOUND)
list(APPEND INKSCAPE_INCS_SYS ${JPEG_INCLUDE_DIR})
list(APPEND INKSCAPE_LIBS ${JPEG_LIBRARIES})
set(HAVE_JPEG ON)
ENDIF()
find_package(PNG REQUIRED)
list(APPEND INKSCAPE_INCS_SYS ${PNG_PNG_INCLUDE_DIR})
list(APPEND INKSCAPE_LIBS ${PNG_LIBRARY})
find_package(Potrace REQUIRED)
list(APPEND INKSCAPE_INCS_SYS ${POTRACE_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${POTRACE_LIBRARIES})
if(WITH_SVG2)
add_definitions(-DWITH_MESH -DWITH_CSSBLEND -DWITH_SVG2)
else()
add_definitions(-UWITH_MESH -UWITH_CSSBLEND -UWITH_SVG2)
endif()
# ----------------------------------------------------------------------------
# CMake's builtin
# ----------------------------------------------------------------------------
# Include dependencies:
pkg_check_modules(
GTK3
REQUIRED
glibmm-2.4>=2.58
gtkmm-3.0>=3.24
gdkmm-3.0>=3.24
gtk+-3.0>=3.24
gdk-3.0>=3.24
)
list(APPEND INKSCAPE_CXX_FLAGS ${GTK3_CFLAGS_OTHER})
list(APPEND INKSCAPE_INCS_SYS ${GTK3_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${GTK3_LIBRARIES})
link_directories(${GTK3_LIBRARY_DIRS})
if(WITH_GSPELL)
pkg_check_modules(GSPELL gspell-1)
if("${GSPELL_FOUND}")
message(STATUS "Using gspell")
list(APPEND INKSCAPE_INCS_SYS ${GSPELL_INCLUDE_DIRS})
sanitize_ldflags_for_libs(GSPELL_LDFLAGS)
list(APPEND INKSCAPE_LIBS ${GSPELL_LDFLAGS})
else()
set(WITH_GSPELL OFF)
endif()
endif()
if(WITH_GSOURCEVIEW)
pkg_check_modules(GSOURCEVIEW gtksourceview-4)
if("${GSOURCEVIEW_FOUND}")
message(STATUS "Using gtksourceview-4")
list(APPEND INKSCAPE_INCS_SYS ${GSOURCEVIEW_INCLUDE_DIRS})
sanitize_ldflags_for_libs(GSOURCEVIEW_LDFLAGS)
list(APPEND INKSCAPE_LIBS ${GSOURCEVIEW_LDFLAGS})
else()
set(WITH_GSOURCEVIEW OFF)
endif()
endif()
# stacktrace print on crash
if(WIN32)
find_package(Boost 1.19.0 REQUIRED COMPONENTS filesystem stacktrace_windbg)
list(APPEND INKSCAPE_LIBS "-lole32")
list(APPEND INKSCAPE_LIBS "-ldbgeng")
add_definitions("-DBOOST_STACKTRACE_USE_WINDBG")
elseif(APPLE)
find_package(Boost 1.19.0 REQUIRED COMPONENTS filesystem stacktrace_basic)
list(APPEND INKSCAPE_CXX_FLAGS "-D_GNU_SOURCE")
else()
find_package(Boost 1.19.0 REQUIRED COMPONENTS filesystem)
# The package stacktrace_backtrace may not be available on all distros.
find_package(Boost 1.19.0 COMPONENTS stacktrace_backtrace)
if (BOOST_FOUND)
list(APPEND INKSCAPE_LIBS "-lbacktrace")
add_definitions("-DBOOST_STACKTRACE_USE_BACKTRACE")
else() # fall back to stacktrace_basic
find_package(Boost 1.19.0 REQUIRED COMPONENTS stacktrace_basic)
list(APPEND INKSCAPE_CXX_FLAGS "-D_GNU_SOURCE")
endif()
endif()
# enable explicit debug symbols
set(CMAKE_ENABLE_EXPORTS ON)
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
list(APPEND INKSCAPE_LIBS "-lstdc++fs")
endif()
list(APPEND INKSCAPE_INCS_SYS ${Boost_INCLUDE_DIRS})
# list(APPEND INKSCAPE_LIBS ${Boost_LIBRARIES})
#find_package(OpenSSL)
#list(APPEND INKSCAPE_INCS_SYS ${OPENSSL_INCLUDE_DIR})
#list(APPEND INKSCAPE_LIBS ${OPENSSL_LIBRARIES})
find_package(LibXslt REQUIRED)
list(APPEND INKSCAPE_INCS_SYS ${LIBXSLT_INCLUDE_DIR})
list(APPEND INKSCAPE_LIBS ${LIBXSLT_LIBRARIES})
add_definitions(${LIBXSLT_DEFINITIONS})
find_package(LibXml2 REQUIRED)
list(APPEND INKSCAPE_INCS_SYS ${LIBXML2_INCLUDE_DIR})
list(APPEND INKSCAPE_LIBS ${LIBXML2_LIBRARIES})
add_definitions(${LIBXML2_DEFINITIONS})
if(WITH_OPENMP)
find_package(OpenMP)
if(OPENMP_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
list(APPEND INKSCAPE_CXX_FLAGS ${OpenMP_CXX_FLAGS})
if(APPLE OR (MINGW AND ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))
list(APPEND INKSCAPE_LIBS "-lomp")
endif()
mark_as_advanced(OpenMP_C_FLAGS)
mark_as_advanced(OpenMP_CXX_FLAGS)
# '-fopenmp' is in OpenMP_C_FLAGS, OpenMP_CXX_FLAGS and implies '-lgomp'
# uncomment explicit linking below if still needed:
set(HAVE_OPENMP ON)
#list(APPEND INKSCAPE_LIBS "-lgomp") # FIXME
else()
set(HAVE_OPENMP OFF)
set(WITH_OPENMP OFF)
endif()
endif()
find_package(ZLIB REQUIRED)
list(APPEND INKSCAPE_INCS_SYS ${ZLIB_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${ZLIB_LIBRARIES})
if(WITH_GNU_READLINE)
pkg_check_modules(Readline readline)
if(Readline_FOUND)
message(STATUS "Found GNU Readline: ${Readline_LIBRARY}")
list(APPEND INKSCAPE_INCS_SYS ${Readline_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${Readline_LDFLAGS})
else()
message(STATUS "Did not find GNU Readline")
set(WITH_GNU_READLINE OFF)
endif()
endif()
if(WITH_IMAGE_MAGICK)
# we want "<" but pkg_check_modules only offers "<=" for some reason; let's hope nobody actually has 7.0.0
pkg_check_modules(MAGICK ImageMagick++<=7)
if(MAGICK_FOUND)
set(WITH_GRAPHICS_MAGICK OFF) # prefer ImageMagick for now and disable GraphicsMagick if found
else()
set(WITH_IMAGE_MAGICK OFF)
endif()
endif()
if(WITH_GRAPHICS_MAGICK)
pkg_check_modules(MAGICK GraphicsMagick++)
if(NOT MAGICK_FOUND)
set(WITH_GRAPHICS_MAGICK OFF)
endif()
endif()
if(MAGICK_FOUND)
sanitize_ldflags_for_libs(MAGICK_LDFLAGS)
list(APPEND INKSCAPE_LIBS ${MAGICK_LDFLAGS})
add_definitions(${MAGICK_CFLAGS_OTHER})
list(APPEND INKSCAPE_INCS_SYS ${MAGICK_INCLUDE_DIRS})
set(WITH_MAGICK ON) # enable 'Extensions > Raster'
endif()
set(ENABLE_NLS OFF)
if(WITH_NLS)
find_package(Gettext)
if(GETTEXT_FOUND)
message(STATUS "Found gettext + msgfmt to convert language files. Translation enabled")
set(ENABLE_NLS ON)
else(GETTEXT_FOUND)
message(STATUS "Cannot find gettext + msgfmt to convert language file. Translation won't be enabled")
set(WITH_NLS OFF)
endif(GETTEXT_FOUND)
find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext)
if(GETTEXT_XGETTEXT_EXECUTABLE)
message(STATUS "Found xgettext. inkscape.pot will be re-created if missing.")
else()
message(STATUS "Did not find xgettext. inkscape.pot can't be re-created.")
endif()
endif(WITH_NLS)
pkg_check_modules(SIGC++ REQUIRED sigc++-2.0 )
sanitize_ldflags_for_libs(SIGC++_LDFLAGS)
list(APPEND INKSCAPE_LIBS ${SIGC++_LDFLAGS})
list(APPEND INKSCAPE_CXX_FLAGS ${SIGC++_CFLAGS_OTHER} "-DSIGCXX_DISABLE_DEPRECATED")
pkg_check_modules(EPOXY REQUIRED epoxy )
sanitize_ldflags_for_libs(EPOXY_LDFLAGS)
list(APPEND INKSCAPE_LIBS ${EPOXY_LDFLAGS})
list(APPEND INKSCAPE_CXX_FLAGS ${EPOXY_CFLAGS_OTHER})
if(WITH_X11)
find_package(X11 REQUIRED)
list(APPEND INKSCAPE_INCS_SYS ${X11_INCLUDE_DIRS})
list(APPEND INKSCAPE_LIBS ${X11_LIBRARIES})
add_definitions(-DHAVE_X11)
pkg_get_variable(GTK3_TARGETS gtk+-3.0 targets)
if(NOT("${GTK3_TARGETS}" MATCHES "x11"))
message(FATAL_ERROR "GTK+3 doesn't targets X11, this is required for WITH_X11")
endif()
endif(WITH_X11)
# end Dependencies
# Set include directories and CXX flags
# (INKSCAPE_LIBS are set as target_link_libraries for inkscape_base in src/CMakeLists.txt)
foreach(flag ${INKSCAPE_CXX_FLAGS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
endforeach()
foreach(flag ${INKSCAPE_CXX_FLAGS_DEBUG})
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${flag}")
endforeach()
# Add color output to ninja
if ("${CMAKE_GENERATOR}" MATCHES "Ninja")
add_compile_options (-fdiagnostics-color)
endif ()
list(REMOVE_DUPLICATES INKSCAPE_LIBS)
list(REMOVE_DUPLICATES INKSCAPE_INCS_SYS)
include_directories(${INKSCAPE_INCS})
include_directories(SYSTEM ${INKSCAPE_INCS_SYS})
include(${CMAKE_CURRENT_LIST_DIR}/ConfigChecks.cmake) # TODO: Check if this needs to be "hidden" here
unset(INKSCAPE_INCS)
unset(INKSCAPE_INCS_SYS)
unset(INKSCAPE_CXX_FLAGS)
unset(INKSCAPE_CXX_FLAGS_DEBUG)

82
CMakeScripts/Dist.cmake Normal file
View file

@ -0,0 +1,82 @@
# dist targets for various platforms
# get INKSCAPE_REVISION of the source
set(INKSCAPE_SOURCE_DIR ${CMAKE_SOURCE_DIR})
include(CMakeScripts/inkscape-version.cmake)
# set distribution prefix (used as filename for distributable packages)
set(INKSCAPE_DIST_PREFIX "${PROJECT_NAME}-${INKSCAPE_VERSION}")
if(INKSCAPE_REVISION_DATE AND INKSCAPE_REVISION_HASH)
set(INKSCAPE_DIST_PREFIX ${INKSCAPE_DIST_PREFIX}_${INKSCAPE_REVISION_DATE}_${INKSCAPE_REVISION_HASH})
endif()
# -----------------------------------------------------------------------------
# 'dist' - generate source release tarball
# -----------------------------------------------------------------------------
message("INKSCAPE_DIST_PREFIX: ${INKSCAPE_DIST_PREFIX}")
add_custom_target(dist
COMMAND sed -i "s/unknown/${INKSCAPE_REVISION}/" ${CMAKE_SOURCE_DIR}/CMakeScripts/inkscape-version.cmake
COMMAND cmake --build ${CMAKE_BINARY_DIR} --target package_source
COMMAND git checkout ${CMAKE_SOURCE_DIR}/CMakeScripts/inkscape-version.cmake
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
VERBATIM)
# -----------------------------------------------------------------------------
# 'dist-win' - Windows Targets
# -----------------------------------------------------------------------------
if(WIN32)
if(HAVE_MINGW64)
set(bitness "x64")
else()
set(bitness "x86")
endif()
set(INKSCAPE_DIST_PREFIX ${INKSCAPE_DIST_PREFIX}-${bitness})
# -----------------------------------------------------------------------------
# 'dist-win-7z' - generate binary 7z archive for Windows
# -----------------------------------------------------------------------------
find_program(7z 7z PATHS "C:/Program Files/7-Zip"
"C:/Program Files (x86)/7-Zip")
if(NOT 7z)
set(7z echo "Could not find '7z'. Please add it to your search path." && exit 1 &&)
endif()
# default target with very good but slow compression (needs approx. 10 GB RAM)
add_custom_target(dist-win-7z
COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.7z"
COMMAND ${7z} a -mx9 -md512m -mfb256
"${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.7z"
"${CMAKE_INSTALL_PREFIX}")
# fast target with moderate compression
add_custom_target(dist-win-7z-fast
COMMAND ${CMAKE_COMMAND} -E remove "${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.7z"
COMMAND ${7z} a
"${CMAKE_BINARY_DIR}/${INKSCAPE_DIST_PREFIX}.7z"
"${CMAKE_INSTALL_PREFIX}")
add_dependencies(dist-win-7z install/strip)
add_dependencies(dist-win-7z-fast install/strip)
# -----------------------------------------------------------------------------
# 'dist-win-exe' - generate .exe installer (NSIS) for Windows
# -----------------------------------------------------------------------------
add_custom_target(dist-win-exe COMMAND ${CMAKE_CPACK_COMMAND} -G NSIS)
add_dependencies(dist-win-exe install/strip) # TODO: we'd only need to depend on the "all" target
# -----------------------------------------------------------------------------
# 'dist-win-msi' - generate .exe installer (NSIS) for Windows
# -----------------------------------------------------------------------------
add_custom_target(dist-win-msi COMMAND ${CMAKE_CPACK_COMMAND} -G WIX)
add_dependencies(dist-win-msi install/strip) # TODO: we'd only need to depend on the "all" target
# -----------------------------------------------------------------------------
# 'dist-win-all' - generate all 'dist' targets for Windows
# -----------------------------------------------------------------------------
add_custom_target(dist-win-all DEPENDS dist-win-7z dist-win-exe dist-win-msi)
endif()

View file

@ -0,0 +1,244 @@
# pkg_check_variable() - a function to retrieve pkg-config variables in CMake
#
# source: http://bloerg.net/2015/03/06/pkg-config-variables-in-cmake.html
function(pkg_check_variable _pkg _name)
find_package(PkgConfig REQUIRED)
string(TOUPPER ${_pkg} _pkg_upper)
string(TOUPPER ${_name} _name_upper)
string(REPLACE "-" "_" _pkg_upper ${_pkg_upper})
string(REPLACE "-" "_" _name_upper ${_name_upper})
set(_output_name "${_pkg_upper}_${_name_upper}")
execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=${_name} ${_pkg}
OUTPUT_VARIABLE _pkg_result
OUTPUT_STRIP_TRAILING_WHITESPACE)
set("${_output_name}" "${_pkg_result}" CACHE STRING "pkg-config variable ${_name} of ${_pkg}")
endfunction()
# Join a cmake list of strings with a given glue character/string
# E.g. join(MY_RESULT, ",", "1; 2; 3;") returns "1, 2, 3"
function(join OUTPUT GLUE)
set(_TMP_RESULT "")
set(_GLUE "") # effective glue is empty at the beginning
foreach(arg ${ARGN})
# Skip empty lines
if(NOT arg STREQUAL "\n")
set(_TMP_RESULT "${_TMP_RESULT}${_GLUE}${arg}")
set(_GLUE "${GLUE}")
endif()
endforeach()
set(${OUTPUT} "${_TMP_RESULT}" PARENT_SCOPE)
endfunction()
# Checks if the last call to execute_process() was successful and throws an error otherwise.
# ${result} and ${stderr} should hold the value of RESULT_VARIABLE and ERROR_VARIABLE respectively
# ${command} can be empty or the command that was executed during the last call of execute_process()
function(check_error result stderr command)
string(STRIP "${result}" result)
string(STRIP "${stderr}" stderr)
string(STRIP "${command}" command)
if ("${command}" STREQUAL "")
set(command "Process")
else()
set(command "'${command}'")
endif()
if("${result}" STREQUAL 0)
if(NOT "${stderr}" STREQUAL "")
MESSAGE(WARNING "${command} returned successfully but the following was output to stderr: ${stderr}")
endif()
else()
if("${stderr}" STREQUAL "")
MESSAGE(FATAL_ERROR "${command} failed with error code: ${result}")
else()
MESSAGE(FATAL_ERROR "${command} failed with error code: ${result} (stderr: ${stderr})")
endif()
endif()
endfunction(check_error)
# Get the list of files installed by pacman for package ${package_name} and return it as ${file_list}.
# Paths are relative to the root directory of the MinGW installations (the directory returned by function "get_mingw_root()")
function(list_files_pacman package_name file_list)
set(MINGW_PACKAGE_PREFIX $ENV{MINGW_PACKAGE_PREFIX}) # e.g. "mingw-w64-x86_64"
get_filename_component(MINGW_PREFIX $ENV{MINGW_PREFIX} NAME) # e.g. "mingw64"
# use pacman to list all files/folders installed by the package
execute_process(
COMMAND pacman -Ql ${MINGW_PACKAGE_PREFIX}-${package_name}
OUTPUT_FILE list_files_pacman_temp.txt
RESULT_VARIABLE res
ERROR_VARIABLE err
)
check_error("${res}" "${err}" "pacman -Ql ${MINGW_PACKAGE_PREFIX}-${package_name}")
# clean up output
execute_process(
COMMAND grep -v '/$' # get rid of folders
COMMAND sed -e 's/^${MINGW_PACKAGE_PREFIX}-${package_name} //' # remove package name
COMMAND sed -e 's/^\\/${MINGW_PREFIX}\\///' # remove root path
COMMAND tr '\n' '\;' # finally replace newlines with semicolon
INPUT_FILE list_files_pacman_temp.txt
OUTPUT_VARIABLE out
RESULT_VARIABLE res
ERROR_VARIABLE err
)
check_error("${res}" "${err}" "Parsing result of 'pacman -Ql ${MINGW_PACKAGE_PREFIX}-${package_name}'")
SET(${file_list} ${out} PARENT_SCOPE)
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/list_files_pacman_temp.txt)
endfunction(list_files_pacman)
# Get the list of files installed by pip for package ${package_name} and return it as ${file_list}.
# Paths are relative to the python distributions "site-packages" folder, i.e. "${root}/lib/python2.7/site-packages"
function(list_files_pip package_name file_list)
# use pip to show package information including full list of files installed by the package
execute_process(
COMMAND pip3 show -f ${package_name}
OUTPUT_FILE list_files_pip_temp.txt
RESULT_VARIABLE res
ERROR_VARIABLE err
)
check_error("${res}" "${err}" "pip3 show -f ${package_name}")
# clean up output
execute_process(
COMMAND sed -e '1,/Files:/d' # strip everything but the files list
COMMAND tr -d ' ' # strip spaces
COMMAND tr '\n' '\;' # finally replace newlines with semicolon
INPUT_FILE list_files_pip_temp.txt
OUTPUT_VARIABLE out
RESULT_VARIABLE res
ERROR_VARIABLE err
)
check_error("${res}" "${err}" "Parsing result of 'pip3 show -f ${package_name}'")
SET(${file_list} ${out} PARENT_SCOPE)
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/list_files_pip_temp.txt)
endfunction(list_files_pip)
# Install a list of files maintaining directory structure
#
# Options:
# FILES - the list of files (absolute or relative paths)
# ROOT - the root to search the files in (if file paths are relative)
# DESTINATION - the destination where to install files to
# COMPONENT - cpack component
# INCLUDE - a (list of) regular expression(s) specifying which files to include
# (omit or leave empty to include all files)
# EXCLUDE - a (list of) regular expression(s) specifying which files to exclude
# (takes precedence over include rules)
function(install_list)
# parse arguments
set(oneValueArgs ROOT DESTINATION COMPONENT)
set(multiValueArgs FILES INCLUDE EXCLUDE)
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
#MESSAGE("ARG_FILES: ${ARG_FILES}" )
#MESSAGE("ARG_ROOT: ${ARG_ROOT}" )
#MESSAGE("ARG_DESTINATION: ${ARG_DESTINATION}" )
#MESSAGE("ARG_INCLUDE: ${ARG_INCLUDE}" )
#MESSAGE("ARG_EXCLUDE: ${ARG_EXCLUDE}" )
#MESSAGE("ARG_UNPARSED_ARGUMENTS: ${ARG_UNPARSED_ARGUMENTS}" )
# install the files
foreach(file ${ARG_FILES})
#MESSAGE("file: " ${file})
# check includes and excludes (excludes take precedence)
set(include_file 0)
if("${ARG_INCLUDE}" STREQUAL "") # start with the assumption to include all files by default
set(include_file 1)
endif()
foreach(include ${ARG_INCLUDE})
if("${file}" MATCHES "${include}")
set(include_file 1)
endif()
endforeach()
foreach(exclude ${ARG_EXCLUDE})
if("${file}" MATCHES "${exclude}")
set(include_file 0)
endif()
endforeach()
# install if file should be included
if(${include_file})
get_filename_component(directory ${file} DIRECTORY)
install(
FILES "${ARG_ROOT}/${file}"
DESTINATION "${ARG_DESTINATION}${directory}"
COMPONENT "${ARG_COMPONENT}"
)
endif()
endforeach()
endfunction(install_list)
# Parses "inkscape-preferences.cpp" to get the current list of interface translations
#
# Results are cached in the variables
# - INKSCAPE_LANGUAGE_CODES
# - INKSCAPE_LANGUAGE_NAMES
function(get_inkscape_languages)
if(NOT DEFINED INKSCAPE_LANGUAGE_CODES)
file(READ "${CMAKE_SOURCE_DIR}/src/ui/dialog/inkscape-preferences.cpp" file_content)
string(REGEX MATCH "Glib::ustring languages\\[\\] = \\{([^\\}]+)\\};" languages "${file_content}")
string(REGEX REPLACE "Glib::ustring languages\\[\\] = \\{([^\\}]+)\\};" "\\1" languages "${languages}")
string(REGEX MATCHALL [[_\(\"([^\\"]+)\"\)]] languages "${languages}")
string(REGEX REPLACE [[_\(\"([^\\"]+)\"\)]] "\\1" languages "${languages}")
string(REGEX MATCH "Glib::ustring langValues\\[\\] = \\{([^\\}]+)\\};" langValues "${file_content}")
string(REGEX REPLACE "Glib::ustring langValues\\[\\] = \\{([^\\}]+)\\};" "\\1" langValues "${langValues}")
string(REGEX MATCHALL [[\"([^\\"]*)\"]] langValues "${langValues}")
string(REGEX REPLACE [[\"([^\\"]*)\"]] "\\1" langValues "${langValues}")
list(REMOVE_AT languages 0)
list(REMOVE_AT langValues 0)
set(INKSCAPE_LANGUAGE_CODES "${langValues}" CACHE INTERNAL "")
set(INKSCAPE_LANGUAGE_NAMES "${languages}" CACHE INTERNAL "")
endif()
endfunction(get_inkscape_languages)
# Filters out translated content from the list of files, then makes sure it is
# installed as part of the matching cpack translations component
#
# Filter is based on filename.${language_code}.ext naming scheme
function(filter_and_install_translated_content file_list destination)
set(remaining_files ${${file_list}})
get_inkscape_languages()
foreach(language_code ${INKSCAPE_LANGUAGE_CODES})
set(translated_files ${remaining_files})
set(regex "\\.${language_code}\\.[a-z]+$")
list(FILTER translated_files INCLUDE REGEX "${regex}")
list(FILTER remaining_files EXCLUDE REGEX "${regex}")
string(MAKE_C_IDENTIFIER "${language_code}" language_code_escaped)
if(translated_files)
if(WIN32)
set(COMP translations.${language_code_escaped})
else()
set(COMP translations)
endif()
install(FILES ${translated_files}
DESTINATION ${destination}
COMPONENT ${COMP})
endif()
endforeach()
set(${file_list} ${remaining_files} PARENT_SCOPE)
endfunction(filter_and_install_translated_content)

View file

@ -0,0 +1,130 @@
# A macro to replace slashes and spaces in a string with underscores
macro(SANITIZE_PATH _string_var)
string(REGEX REPLACE "[\\/ ]+" "_" ${_string_var} ${${_string_var}})
endmacro()
macro(inkscape_source_group
sources)
# Group by location on disk
source_group("Source Files" FILES CMakeLists.txt)
foreach(_SRC ${sources})
get_filename_component(_SRC_EXT ${_SRC} EXT)
if((${_SRC_EXT} MATCHES ".h") OR (${_SRC_EXT} MATCHES ".hpp"))
source_group("Header Files" FILES ${_SRC})
else()
source_group("Source Files" FILES ${_SRC})
endif()
endforeach()
unset(_SRC)
unset(_SRC_EXT)
endmacro()
# only MSVC uses SOURCE_GROUP
macro(add_inkscape_lib
name
sources)
add_library(${name} STATIC ${sources})
# works fine without having the includes
# listed is helpful for IDE's (QtCreator/MSVC)
inkscape_source_group("${sources}")
endmacro()
# A macro to append to the global source property
set_property(GLOBAL PROPERTY inkscape_global_SRC "")
macro (add_inkscape_source
sources)
foreach(_SRC ${ARGV})
get_filename_component(_ABS_SRC ${_SRC} ABSOLUTE)
set_property(GLOBAL APPEND PROPERTY inkscape_global_SRC ${_ABS_SRC})
endforeach()
unset(_SRC)
unset(_ABS_SRC)
endmacro()
# A macro to append to the global source property
macro (add_inkscape_library
sources)
foreach(_SRC ${ARGV})
get_filename_component(_ABS_SRC ${_SRC} ABSOLUTE)
set_property(GLOBAL APPEND PROPERTY inkscape_global_SRC ${_ABS_SRC})
endforeach()
unset(_SRC)
unset(_ABS_SRC)
endmacro()
macro(INKSCAPE_PKG_CONFIG_FIND PREFIX MODNAME VERSION PATH_NAME PATH_SUFFIXE LIB_NAME)
if(VERSION)
pkg_check_modules(_${PREFIX} ${MODNAME}${VERSION})
else(VERSION)
pkg_check_modules(_${PREFIX} ${MODNAME})
endif(VERSION)
find_path(${PREFIX}_INCLUDE_DIR
NAMES
${PATH_NAME}
PATHS
${_${PREFIX}_INCLUDEDIR}
/usr/include
/usr/local/include
/opt/local/include
/sw/include
$ENV{DEVLIBS_PATH}//include//
PATH_SUFFIXES
${PATH_SUFFIXE}
)
find_library(${PREFIX}_LIBRARY
NAMES
${LIB_NAME}
PATHS
${_${PREFIX}_LIBDIR}
/usr/lib
/usr/local/lib
/opt/local/lib
/sw/lib
)
if (${PREFIX}_LIBRARY)
set(${PREFIX}_FOUND TRUE)
set(${PREFIX}_VERSION ${_${PREFIX}_VERSION})
endif (${PREFIX}_LIBRARY)
set(${PREFIX}_INCLUDE_DIRS
${${PREFIX}_INCLUDE_DIR}
)
if (${PREFIX}_FOUND)
set(${PREFIX}_LIBRARIES
${${PREFIX}_LIBRARIES}
${${PREFIX}_LIBRARY}
)
endif (${PREFIX}_FOUND)
if (${PREFIX}_INCLUDE_DIRS AND ${PREFIX}_LIBRARIES)
set(${PREFIX}_FOUND TRUE)
endif (${PREFIX}_INCLUDE_DIRS AND ${PREFIX}_LIBRARIES)
if (${PREFIX}_FOUND)
if (NOT ${PREFIX}_FIND_QUIETLY)
message(STATUS "Found ${MODNAME}: ${${PREFIX}_LIBRARIES}")
endif (NOT ${PREFIX}_FIND_QUIETLY)
else (${PREFIX}_FOUND)
if (${PREFIX}_FIND_REQUIRED)
message(FATAL_ERROR "Could not find ${MODNAME}")
endif (${PREFIX}_FIND_REQUIRED)
endif (${PREFIX}_FOUND)
# show the <PREFIX>_INCLUDE_DIRS and <PREFIX>_LIBRARIES variables only in the advanced view
mark_as_advanced(${PREFIX}_INCLUDE_DIRS ${PREFIX}_LIBRARIES)
endmacro()

View file

@ -0,0 +1,408 @@
if(WIN32)
install(FILES
NEWS.md
README.md
DESTINATION .)
# mingw-w64 dlls
# (use msys2checkdeps.py to list required libraries / check for missing or unused libraries)
file(GLOB MINGW_LIBS
${MINGW_BIN}/LIBEAY32.dll
${MINGW_BIN}/SSLEAY32.dll
${MINGW_BIN}/imagequant.dll
${MINGW_BIN}/lib2geom.dll
${MINGW_BIN}/libLerc.dll
${MINGW_BIN}/libaom.dll
${MINGW_BIN}/libaspell-[0-9]*.dll
${MINGW_BIN}/libatk-1.0-[0-9]*.dll
${MINGW_BIN}/libatkmm-1.6-[0-9]*.dll
${MINGW_BIN}/libboost_filesystem-mt.dll
${MINGW_BIN}/libbrotlicommon.dll
${MINGW_BIN}/libbrotlidec.dll
${MINGW_BIN}/libbz2-[0-9]*.dll
${MINGW_BIN}/libcairo-[0-9]*.dll
${MINGW_BIN}/libcairo-gobject-[0-9]*.dll
${MINGW_BIN}/libcairomm-1.0-[0-9]*.dll
${MINGW_BIN}/libcdr-0.[0-9]*.dll
${MINGW_BIN}/libcrypto-1_[0-9]*.dll
${MINGW_BIN}/libcrypto-3*.dll
${MINGW_BIN}/libcurl-[0-9]*.dll
${MINGW_BIN}/libdatrie-[0-9]*.dll
${MINGW_BIN}/libdav1d.dll
${MINGW_BIN}/libde265-[0-9]*.dll
${MINGW_BIN}/libdeflate.dll
${MINGW_BIN}/libdouble-conversion.dll
${MINGW_BIN}/libenchant-[0-9]*.dll
${MINGW_BIN}/libepoxy-[0-9]*.dll
${MINGW_BIN}/libexpat-[0-9]*.dll
${MINGW_BIN}/libexslt-[0-9]*.dll
${MINGW_BIN}/libffi-[0-9]*.dll
${MINGW_BIN}/libfftw3-[0-9]*.dll
${MINGW_BIN}/libfontconfig-[0-9]*.dll
${MINGW_BIN}/libfreetype-[0-9]*.dll
${MINGW_BIN}/libfribidi-[0-9]*.dll
${MINGW_BIN}/libgc-[0-9]*.dll
${MINGW_BIN}/libgdk-3-[0-9]*.dll
${MINGW_BIN}/libgdk_pixbuf-2.0-[0-9]*.dll
${MINGW_BIN}/libgdkmm-3.0-[0-9]*.dll
${MINGW_BIN}/libgfortran-[0-9]*.dll
${MINGW_BIN}/libgio-2.0-[0-9]*.dll
${MINGW_BIN}/libgiomm-2.4-[0-9]*.dll
${MINGW_BIN}/libgirepository-1.0-[0-9].dll
${MINGW_BIN}/libglib-2.0-[0-9]*.dll
${MINGW_BIN}/libglibmm-2.4-[0-9]*.dll
${MINGW_BIN}/libgmodule-2.0-[0-9]*.dll
${MINGW_BIN}/libgmp-[0-9]*.dll
${MINGW_BIN}/libgobject-2.0-[0-9]*.dll
${MINGW_BIN}/libgomp-[0-9]*.dll
${MINGW_BIN}/libgraphite[0-9]*.dll
${MINGW_BIN}/libgsl-[0-9]*.dll
${MINGW_BIN}/libgslcblas-[0-9]*.dll
${MINGW_BIN}/libgspell-1-[0-9]*.dll
${MINGW_BIN}/libgtk-3-[0-9]*.dll
${MINGW_BIN}/libgtkmm-3.0-[0-9]*.dll
${MINGW_BIN}/libgtksourceview-4-[0-9]*.dll
${MINGW_BIN}/libharfbuzz-[0-9]*.dll
${MINGW_BIN}/libharfbuzz-subset-[0-9]*.dll
${MINGW_BIN}/libheif.dll
${MINGW_BIN}/libiconv-[0-9]*.dll
${MINGW_BIN}/libicudt[0-9]*.dll
${MINGW_BIN}/libicuin[0-9]*.dll
${MINGW_BIN}/libicuuc[0-9]*.dll
${MINGW_BIN}/libidn2-[0-9]*.dll
${MINGW_BIN}/libintl-[0-9]*.dll
${MINGW_BIN}/libjbig-[0-9]*.dll
${MINGW_BIN}/libjpeg-[0-9]*.dll
${MINGW_BIN}/liblcms2-[0-9]*.dll
${MINGW_BIN}/liblqr-1-[0-9]*.dll
${MINGW_BIN}/liblzma-[0-9]*.dll
${MINGW_BIN}/libmpdec-[0-9]*.dll
${MINGW_BIN}/libmpfr-[0-9]*.dll
${MINGW_BIN}/libncursesw6.dll
${MINGW_BIN}/libnghttp[0-9]*.dll
${MINGW_BIN}/libnspr[0-9]*.dll
${MINGW_BIN}/libopenblas.dll
${MINGW_BIN}/libopenjp2-[0-9]*.dll
${MINGW_BIN}/libpanelw6.dll
${MINGW_BIN}/libpango-1.0-[0-9]*.dll
${MINGW_BIN}/libpangocairo-1.0-[0-9]*.dll
${MINGW_BIN}/libpangoft2-1.0-[0-9]*.dll
${MINGW_BIN}/libpangomm-1.4-[0-9]*.dll
${MINGW_BIN}/libpangowin32-1.0-[0-9]*.dll
${MINGW_BIN}/libpcre2-8-[0-9]*.dll
${MINGW_BIN}/libpixman-1-[0-9]*.dll
${MINGW_BIN}/libplc[0-9]*.dll
${MINGW_BIN}/libplds[0-9]*.dll
${MINGW_BIN}/libpng16-[0-9]*.dll
${MINGW_BIN}/libpoppler-[0-9]*.dll
${MINGW_BIN}/libpoppler-glib-[0-9]*.dll
${MINGW_BIN}/libpotrace-[0-9]*.dll
${MINGW_BIN}/libpsl-[0-9]*.dll
${MINGW_BIN}/libquadmath-[0-9]*.dll
${MINGW_BIN}/libraqm-[0-9]*.dll
${MINGW_BIN}/libreadline8.dll
${MINGW_BIN}/librevenge-0.[0-9]*.dll
${MINGW_BIN}/librevenge-stream-0.[0-9]*.dll
${MINGW_BIN}/librsvg-2-[0-9]*.dll
${MINGW_BIN}/libsharpyuv-0.dll
${MINGW_BIN}/libsigc-2.0-[0-9]*.dll
${MINGW_BIN}/libsqlite3-[0-9]*.dll
${MINGW_BIN}/libssh2-[0-9]*.dll
${MINGW_BIN}/libssl-1_[0-9]*.dll
${MINGW_BIN}/libssl-3*.dll
${MINGW_BIN}/libstdc++-[0-9]*.dll
${MINGW_BIN}/libtermcap-[0-9]*.dll
${MINGW_BIN}/libthai-[0-9]*.dll
${MINGW_BIN}/libtiff-[0-9]*.dll
${MINGW_BIN}/libunistring-[0-9]*.dll
${MINGW_BIN}/libvisio-0.[0-9]*.dll
${MINGW_BIN}/libwebp-[0-9]*.dll
${MINGW_BIN}/libwebpdemux-[0-9]*.dll
${MINGW_BIN}/libwebpmux-[0-9]*.dll
${MINGW_BIN}/libwinpthread-[0-9]*.dll
${MINGW_BIN}/libwmf-0-2-[0-9]*.dll
${MINGW_BIN}/libwmflite-0-2-[0-9]*.dll
${MINGW_BIN}/libwpd-0.[0-9]*.dll
${MINGW_BIN}/libwpg-0.[0-9]*.dll
${MINGW_BIN}/libxml2-[0-9]*.dll
${MINGW_BIN}/libxslt-[0-9]*.dll
${MINGW_BIN}/libx265.dll
${MINGW_BIN}/libzstd.dll
${MINGW_BIN}/nss[0-9]*.dll
${MINGW_BIN}/nssutil[0-9]*.dll
${MINGW_BIN}/rav1e.dll
${MINGW_BIN}/smime[0-9]*.dll
${MINGW_BIN}/tcl[0-9]*.dll
${MINGW_BIN}/tk[0-9]*.dll
${MINGW_BIN}/zlib1.dll)
INSTALL(FILES ${MINGW_LIBS} DESTINATION bin)
# There are differences for 64-Bit and 32-Bit build environments.
if(HAVE_MINGW64)
if($ENV{MSYSTEM} STREQUAL "CLANGARM64" OR $ENV{MSYSTEM} STREQUAL "CLANG64")
install(FILES
${MINGW_BIN}/libc++.dll
${MINGW_BIN}/libunwind.dll
DESTINATION bin)
else()
install(FILES
${MINGW_BIN}/libgcc_s_seh-1.dll
DESTINATION bin)
endif()
else()
install(FILES
${MINGW_BIN}/libgcc_s_dw2-1.dll
DESTINATION bin)
endif()
# Install graphics-magick dlls
if(WITH_GRAPHICS_MAGICK)
install (DIRECTORY ${MINGW_LIB}/GraphicsMagick-1.3.38
DESTINATION lib
FILES_MATCHING
PATTERN "*.dll"
PATTERN "*.la"
PATTERN "filters" EXCLUDE)
file(GLOB MAGICK_LIBS
${MINGW_BIN}/libGraphicsMagick[+-]*.dll
${MINGW_BIN}/libjxl.dll
${MINGW_BIN}/libjxl_cms.dll
${MINGW_BIN}/libjxl_threads.dll
${MINGW_BIN}/libltdl-[0-9]*.dll
${MINGW_BIN}/libhwy.dll
${MINGW_BIN}/libbrotlienc.dll)
install(FILES ${MAGICK_LIBS} DESTINATION bin)
endif()
if(WITH_IMAGE_MAGICK)
file(GLOB MAGICK_LIBS ${MINGW_BIN}/libMagick*.dll)
install(FILES ${MAGICK_LIBS} DESTINATION bin)
endif()
# Install hicolor/index.theme to avoid bug 1635207
install(FILES
${MINGW_PATH}/share/icons/hicolor/index.theme
DESTINATION share/icons/hicolor)
install(DIRECTORY ${MINGW_PATH}/share/icons/Adwaita
DESTINATION share/icons)
install(CODE "execute_process(COMMAND gtk-update-icon-cache \${CMAKE_INSTALL_PREFIX}/share/icons/Adwaita)")
# translations for libraries (we usually shouldn't need many)
get_inkscape_languages()
foreach(language_code ${INKSCAPE_LANGUAGE_CODES})
string(MAKE_C_IDENTIFIER "${language_code}" language_code_escaped)
install(DIRECTORY ${MINGW_PATH}/share/locale/${language_code}
DESTINATION share/locale
COMPONENT translations.${language_code_escaped}
FILES_MATCHING
PATTERN "*glib20.mo"
PATTERN "*gtk30.mo"
PATTERN "*gspell-1.mo")
endforeach()
install(DIRECTORY ${MINGW_PATH}/share/poppler
DESTINATION share)
install(DIRECTORY ${MINGW_PATH}/share/glib-2.0/schemas
DESTINATION share/glib-2.0)
install(DIRECTORY ${MINGW_PATH}/share/gtksourceview-4
DESTINATION share)
# fontconfig
install(DIRECTORY ${MINGW_PATH}/etc/fonts
DESTINATION etc
PATTERN "fonts.conf" EXCLUDE)
install(FILES ${MINGW_PATH}/share/fontconfig/conf.avail/70-no-bitmaps.conf
DESTINATION etc/fonts/conf.d)
# adjust fonts.conf
# - add "%localappdata%\Microsoft\Windows\Fonts" as font dir
# which is the default path for fonts installed per-user in Windows 10 (version 1809)
# - store font cache in non-temporary directory in "%localappdata%\fontconfig\cache"
set(fontdir_default "\\t^<dir^>WINDOWSFONTDIR^</dir^>") # the '^' are needed to escape angle brackets on Windows command shell
set(fontdir_additional "\\t^<dir^>~/AppData/Local/Microsoft/Windows/Fonts^</dir^>")
set(cachedir_default "\\t^<cachedir^>/var/cache/fontconfig^</cachedir^>")
set(cachedir_appdata "\\t^<cachedir^>LOCAL_APPDATA_FONTCONFIG_CACHE^</cachedir^>")
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/etc/fonts/fonts.conf
COMMAND sed 's!${fontdir_default}!${fontdir_default}\\n${fontdir_additional}!' ${MINGW_PATH}/etc/fonts/fonts.conf |
sed 's!${cachedir_default}!${cachedir_appdata}\\n${cachedir_default}!' > ${CMAKE_BINARY_DIR}/etc/fonts/fonts.conf
MAIN_DEPENDENCY ${MINGW_PATH}/etc/fonts/fonts.conf
)
add_custom_target(fonts_conf ALL DEPENDS ${CMAKE_BINARY_DIR}/etc/fonts/fonts.conf)
install(DIRECTORY ${CMAKE_BINARY_DIR}/etc/fonts
DESTINATION etc)
# GTK 3.0
install(DIRECTORY ${MINGW_LIB}/gtk-3.0
DESTINATION lib
FILES_MATCHING
PATTERN "*.dll"
PATTERN "*.cache")
install(DIRECTORY ${MINGW_PATH}/etc/gtk-3.0
DESTINATION etc)
install(DIRECTORY ${MINGW_LIB}/gdk-pixbuf-2.0
DESTINATION lib
FILES_MATCHING
PATTERN "*.dll"
PATTERN "*.cache")
# Typelibs for gtk, pango, cairo -> can be used in Python extensions
# ToDo: Automate the creation of this collection!
install (FILES
${MINGW_LIB}/girepository-1.0/Atk-1.0.typelib
${MINGW_LIB}/girepository-1.0/cairo-1.0.typelib
${MINGW_LIB}/girepository-1.0/Gdk-3.0.typelib
${MINGW_LIB}/girepository-1.0/GdkPixbuf-2.0.typelib
${MINGW_LIB}/girepository-1.0/Gio-2.0.typelib
${MINGW_LIB}/girepository-1.0/GLib-2.0.typelib
${MINGW_LIB}/girepository-1.0/GModule-2.0.typelib
${MINGW_LIB}/girepository-1.0/GObject-2.0.typelib
${MINGW_LIB}/girepository-1.0/Gtk-3.0.typelib
${MINGW_LIB}/girepository-1.0/HarfBuzz-0.0.typelib
${MINGW_LIB}/girepository-1.0/Pango-1.0.typelib
${MINGW_LIB}/girepository-1.0/PangoCairo-1.0.typelib
${MINGW_LIB}/girepository-1.0/fontconfig-2.0.typelib
${MINGW_LIB}/girepository-1.0/PangoFc-1.0.typelib
${MINGW_LIB}/girepository-1.0/PangoFT2-1.0.typelib
${MINGW_LIB}/girepository-1.0/freetype2-2.0.typelib
DESTINATION lib/girepository-1.0)
# Aspell dictionaries
install(DIRECTORY ${MINGW_LIB}/aspell-0.60
DESTINATION lib
COMPONENT dictionaries)
# Aspell backend for Enchant (gspell uses Enchant to access Aspell dictionaries)
install(FILES
${MINGW_LIB}/enchant-2/enchant_aspell.dll
DESTINATION lib/enchant-2)
# tcl/tk related files (required for tkinter)
install(DIRECTORY
${MINGW_PATH}/lib/tcl8
${MINGW_PATH}/lib/tcl8.6
${MINGW_PATH}/lib/tk8.6
DESTINATION lib)
# Necessary to run extensions on windows if it is not in the path
if (HAVE_MINGW64)
install(FILES
${MINGW_BIN}/gspawn-win64-helper.exe
${MINGW_BIN}/gspawn-win64-helper-console.exe
DESTINATION bin)
else()
install(FILES
${MINGW_BIN}/gspawn-win32-helper.exe
${MINGW_BIN}/gspawn-win32-helper-console.exe
DESTINATION bin)
endif()
# Install gdbus helper to avoid warnings printed to command line
# (GApplication unconditionally tries to establish a dbus connection)
install(FILES
${MINGW_BIN}/gdbus.exe
DESTINATION bin)
# Python (use executable names without version number for compatibility with python from python.org)
file(GLOB python_version ${MINGW_BIN}/libpython3.[0-9]*.dll)
string(REGEX REPLACE "${MINGW_BIN}/libpython(3\.[0-9]+)\.dll" "\\1" python_version ${python_version})
install(FILES
${MINGW_BIN}/python3.exe
RENAME python.exe
DESTINATION bin
COMPONENT python)
install(FILES
${MINGW_BIN}/python3w.exe
RENAME pythonw.exe
DESTINATION bin
COMPONENT python)
install(FILES
${MINGW_BIN}/libpython${python_version}.dll
DESTINATION bin
COMPONENT python)
install(DIRECTORY ${MINGW_LIB}/python${python_version}
DESTINATION lib
COMPONENT python
PATTERN "python${python_version}/site-packages" EXCLUDE # specify individual packages to install below
PATTERN "python${python_version}/test" EXCLUDE # we don't need the Python testsuite
PATTERN "*.pyc" EXCLUDE
)
set(site_packages "lib/python${python_version}/site-packages")
# Python packages installed via pacman
set(packages
"python-lxml" "python-numpy" "python-pillow" "python-six" "python-cairo" "python-cssselect"
"python-webencodings" "python-tinycss2"
"python-gobject" "python-coverage" "python-pyserial" "python-packaging" "python-zstandard" "scour")
foreach(package ${packages})
list_files_pacman(${package} paths)
install_list(FILES ${paths}
ROOT ${MINGW_PATH}
COMPONENT python
INCLUDE ${site_packages} # only include content from "site-packages" (we might consider to install everything)
EXCLUDE ".pyc$"
)
endforeach()
# Python packages for the extensions manager, and clipart importer extensions
set(packages
"python-appdirs" "python-msgpack" "python-lockfile" "python-cachecontrol"
"python-idna" "python-urllib3" "python-chardet" "python-certifi" "python-requests" "python-beautifulsoup4" "python-filelock")
foreach(package ${packages})
list_files_pacman(${package} paths)
install_list(FILES ${paths}
ROOT ${MINGW_PATH}
COMPONENT extension_manager
INCLUDE ${site_packages} # only include content from "site-packages" (we might consider to install everything)
EXCLUDE ".pyc$"
)
endforeach()
# Python packages installed via pip
set(packages "")
foreach(package ${packages})
list_files_pip(${package} paths)
install_list(FILES ${paths}
ROOT ${MINGW_PATH}/${site_packages}
DESTINATION ${site_packages}/
COMPONENT python
EXCLUDE "^\\.\\.\\/" # exclude content in parent directories (notably scripts installed to /bin)
EXCLUDE ".pyc$"
)
endforeach()
install(CODE
"MESSAGE(\"Pre-compiling Python distribution to byte-code (.pyc files)\")
execute_process(COMMAND \${CMAKE_INSTALL_PREFIX}/bin/python -m compileall -qq \${CMAKE_INSTALL_PREFIX}/lib/python${python_version})"
COMPONENT python)
# gdb
if (NOT ($ENV{MSYSTEM} STREQUAL "CLANGARM64" OR $ENV{MSYSTEM} STREQUAL "CLANG64"))
install(FILES
${MINGW_BIN}/gdb.exe
${MINGW_BIN}/libxxhash.dll
DESTINATION bin)
install(DIRECTORY
${MINGW_PATH}/share/gdb
DESTINATION share
PATTERN "*.pyc" EXCLUDE)
install(FILES
packaging/win32/gdb_create_backtrace.bat
DESTINATION bin)
# convenience launcher
install(FILES
"packaging/win32/Run Inkscape and create debug trace.bat"
DESTINATION .)
endif()
# convenience launchers
install(FILES
"packaging/win32/Run Inkscape !.bat"
"packaging/win32/Run Inkscape with GTK Inspector.bat"
DESTINATION .)
endif()

View file

@ -0,0 +1,27 @@
# - Try to find double-conversion
# Once done, this will define
#
# DoubleConversion_FOUND - system has double-conversion
# DoubleConversion_INCLUDE_DIRS - the double-conversion include directories
# DoubleConversion_LIBRARIES - link these to use double-conversion
include(FindPackageHandleStandardArgs)
find_library(DoubleConversion_LIBRARY double-conversion
PATHS ${DoubleConversion_LIBRARYDIR})
find_path(DoubleConversion_INCLUDE_DIR double-conversion/double-conversion.h
PATHS ${DoubleConversion_INCLUDEDIR})
find_package_handle_standard_args(DoubleConversion DEFAULT_MSG
DoubleConversion_LIBRARY
DoubleConversion_INCLUDE_DIR)
mark_as_advanced(
DoubleConversion_LIBRARY
DoubleConversion_INCLUDE_DIR)
if(DoubleConversion_FOUND)
set(DoubleConversion_LIBRARIES ${DoubleConversion_LIBRARY})
set(DoubleConversion_INCLUDE_DIRS ${DoubleConversion_INCLUDE_DIR})
endif()

View file

@ -0,0 +1,70 @@
# - Find JeMalloc library
# Find the native JeMalloc includes and library
# This module defines
# JEMALLOC_INCLUDE_DIRS, where to find jemalloc.h, Set when
# JEMALLOC_INCLUDE_DIR is found.
# JEMALLOC_LIBRARIES, libraries to link against to use JeMalloc.
# JEMALLOC_ROOT_DIR, The base directory to search for JeMalloc.
# This can also be an environment variable.
# JEMALLOC_FOUND, If false, do not try to use JeMalloc.
#
# also defined, but not for general use are
# JEMALLOC_LIBRARY, where to find the JeMalloc library.
#=============================================================================
# Copyright 2011 Blender Foundation.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# If JEMALLOC_ROOT_DIR was defined in the environment, use it.
IF(NOT JEMALLOC_ROOT_DIR AND NOT $ENV{JEMALLOC_ROOT_DIR} STREQUAL "")
SET(JEMALLOC_ROOT_DIR $ENV{JEMALLOC_ROOT_DIR})
ENDIF()
SET(_jemalloc_SEARCH_DIRS
${JEMALLOC_ROOT_DIR}
/usr/local
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
)
FIND_PATH(JEMALLOC_INCLUDE_DIR
NAMES
jemalloc.h
HINTS
${_jemalloc_SEARCH_DIRS}
PATH_SUFFIXES
include/jemalloc
)
FIND_LIBRARY(JEMALLOC_LIBRARY
NAMES
jemalloc
HINTS
${_jemalloc_SEARCH_DIRS}
PATH_SUFFIXES
lib64 lib
)
# handle the QUIETLY and REQUIRED arguments and set JEMALLOC_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(JeMalloc DEFAULT_MSG
JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR)
IF(JEMALLOC_FOUND)
SET(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
SET(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
ENDIF(JEMALLOC_FOUND)
MARK_AS_ADVANCED(
JEMALLOC_INCLUDE_DIR
JEMALLOC_LIBRARY
)

View file

@ -0,0 +1,55 @@
# - Try to find NSIS
# Once done this will define
#
# NSIS_ROOT_PATH - Set this variable to the root installation of NSIS
#
# Read-Only variables:
#
# NSIS_FOUND - system has NSIS
# NSIS_MAKE - NSIS creator executable
#
#=============================================================================
# Copyright (c) 2010-2013 Andreas Schneider <asn@cryptomilk.org>
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
#
if (WIN32)
set(_NSIS_ROOT_HINTS
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\NSIS;Default]")
set(_NSIS_ROOT_PATHS
$ENV{PROGRAMFILES}/NSIS)
find_path(NSIS_ROOT_PATH
NAMES
Include/Library.nsh
HINTS
${_NSIS_ROOT_HINTS}
PATHS
${_NSIS_ROOT_PATHS}
)
mark_as_advanced(NSIS_ROOT_PATH)
endif (WIN32)
find_program(NSIS_MAKE
NAMES
makensis
PATHS
${NSIS_ROOT_PATH}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(NSIS DEFAULT_MSG NSIS_MAKE)
if (NSIS_MAKE)
set(NSIS_FOUND TRUE)
endif (NSIS_MAKE)
mark_as_advanced(NSIS_MAKE)

View file

@ -0,0 +1,47 @@
# - Try to find PopplerCairo
# Once done this will define
#
# POPPLER_FOUND - system has PopplerCairo
# POPPLER_INCLUDE_DIRS - the PopplerCairo include directory
# POPPLER_LIBRARIES - Link these to use PopplerCairo
# POPPLER_DEFINITIONS - Compiler switches required for using PopplerCairo
#
# Copyright (c) 2008 Joshua L. Blocher <verbalshadow@gmail.com>
#
# Redistribution and use is allowed according to the terms of the New
# BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
include(${CMAKE_CURRENT_LIST_DIR}/../HelperMacros.cmake)
if (POPPLER_LIBRARIES AND POPPLER_INCLUDE_DIRS)
# in cache already
set(POPPLER_FOUND TRUE)
else (POPPLER_LIBRARIES AND POPPLER_INCLUDE_DIRS)
# use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
INKSCAPE_PKG_CONFIG_FIND(POPPLER poppler >=0.20.0 poppler-config.h poppler poppler)
if (POPPLER_FOUND)
INKSCAPE_PKG_CONFIG_FIND(POPPLER_GLIB poppler-glib >=0.20.0 poppler/glib/poppler.h "" poppler-glib)
if (POPPLER_GLIB_FOUND)
list(APPEND POPPLER_INCLUDE_DIRS ${POPPLER_GLIB_INCLUDE_DIRS})
list(APPEND POPPLER_LIBRARIES ${POPPLER_GLIB_LIBRARIES})
INKSCAPE_PKG_CONFIG_FIND(CAIRO_SVG cairo-svg 0 cairo-svg.h cairo cairo)
if (CAIRO_SVG_FOUND)
list(APPEND POPPLER_INCLUDE_DIRS ${CAIRO_SVG_INCLUDE_DIRS})
list(APPEND POPPLER_LIBRARIES ${CAIRO_SVG_LIBRARIES})
endif (CAIRO_SVG_FOUND)
endif (POPPLER_GLIB_FOUND)
if (ENABLE_POPPLER_CAIRO)
INKSCAPE_PKG_CONFIG_FIND(POPPLER_CAIRO poppler-cairo >=0.20.0 cairo.h cairo cairo)
if (POPPLER_GLIB_FOUND AND POPPLER_CAIRO_FOUND AND NOT CAIRO_SVG_FOUND)
list(APPEND POPPLER_INCLUDE_DIRS ${POPPLER_CAIRO_INCLUDE_DIRS})
list(APPEND POPPLER_LIBRARIES ${POPPLER_CAIRO_LIBRARIES})
endif (POPPLER_GLIB_FOUND AND POPPLER_CAIRO_FOUND AND NOT CAIRO_SVG_FOUND)
endif (ENABLE_POPPLER_CAIRO)
endif (POPPLER_FOUND)
endif (PKG_CONFIG_FOUND)
endif (POPPLER_LIBRARIES AND POPPLER_INCLUDE_DIRS)

View file

@ -0,0 +1,62 @@
# POTRACE_FOUND - system has Potrace
# POTRACE_INCLUDE_DIRS - the Potrace include directory
# POTRACE_LIBRARIES - The libraries needed to use Potrace
IF (POTRACE_LIBRARIES AND POTRACE_INCLUDE_DIRS)
# in cache already
SET(POTRACE_FOUND TRUE)
ELSE (POTRACE_LIBRARIES AND POTRACE_INCLUDE_DIRS)
FIND_PATH (POTRACE_INCLUDE_DIR
NAMES
potracelib.h
PATHS
/usr/include
/usr/local/include
$ENV{DEVLIBS_PATH}/include
PATH_SUFFIXES
potrace
)
FIND_LIBRARY (POTRACE_LIBRARY
NAMES
potrace
libpotrace
PATHS
/usr/lib
/usr/local/lib
$ENV{DEVLIBS_PATH}/lib
)
if (POTRACE_LIBRARY)
set (POTRACE_FOUND TRUE)
endif (POTRACE_LIBRARY)
set (POTRACE_INCLUDE_DIRS
${POTRACE_INCLUDE_DIR}
)
if (POTRACE_FOUND)
set(POTRACE_LIBRARIES
${POTRACE_LIBRARIES}
${POTRACE_LIBRARY}
)
endif (POTRACE_FOUND)
if (POTRACE_INCLUDE_DIRS AND POTRACE_LIBRARIES)
set(POTRACE_FOUND TRUE)
endif (POTRACE_INCLUDE_DIRS AND POTRACE_LIBRARIES)
if (POTRACE_FOUND)
if (NOT Potrace_FIND_QUIETLY)
message(STATUS "Found Potrace: ${POTRACE_LIBRARIES}")
endif (NOT Potrace_FIND_QUIETLY)
else (POTRACE_FOUND)
if (Potrace_FIND_REQUIRED)
message(FATAL_ERROR "Could not find potrace")
endif (Potrace_FIND_REQUIRED)
endif (POTRACE_FOUND)
# show the POTRACE_INCLUDE_DIRS and POTRACE_LIBRARIES variables only in the advanced view
MARK_AS_ADVANCED(POTRACE_INCLUDE_DIRS POTRACE_LIBRARIES)
endif (POTRACE_LIBRARIES AND POTRACE_INCLUDE_DIRS)

View file

@ -0,0 +1,83 @@
# Use pod2man to generate manual pages from .pod files
# Usage: pod2man(<podfile> <release-string> <man-section> <heading-center-text>)
#
# E.g.: pod2man("/path/to/file/mypod.pod" "1.2.3" 1 "My Manual Pages")
include(GNUInstallDirs)
find_program(POD2MAN pod2man)
if(NOT POD2MAN)
message(STATUS "Could not find pod2man - man pages disabled")
endif()
find_program(GZIP gzip)
if(NOT GZIP)
message(STATUS "Could not find gzip - man pages uncompressed")
endif()
macro(pod2man PODFILE_FULL RELEASE SECTION CENTER)
get_filename_component(PODFILE ${PODFILE_FULL} NAME)
string(REPLACE "." ";" PODFILE_LIST ${PODFILE})
list(GET PODFILE_LIST 0 NAME)
list(GET PODFILE_LIST 1 LANG)
string(TOUPPER ${NAME} NAME_UPCASE)
if(${LANG} STREQUAL "pod")
set(LANG "")
endif()
if(NOT EXISTS ${PODFILE_FULL})
message(FATAL_ERROR "Could not find pod file ${PODFILE_FULL} to generate man page")
endif(NOT EXISTS ${PODFILE_FULL})
if(POD2MAN)
if(LANG)
set(MANPAGE_TARGET "man-${NAME}-${LANG}")
set(MANFILE_TEMP "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.${LANG}.tmp")
set(MANFILE_FULL "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.${LANG}.${SECTION}")
set(MANFILE_FULL_GZ "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.${LANG}.${SECTION}.gz")
set(MANFILE_DEST "${CMAKE_INSTALL_MANDIR}/${LANG}/man${SECTION}")
else()
set(MANPAGE_TARGET "man-${NAME}")
set(MANFILE_TEMP "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.tmp")
set(MANFILE_FULL "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.${SECTION}")
set(MANFILE_FULL_GZ "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.${SECTION}.gz")
set(MANFILE_DEST "${CMAKE_INSTALL_MANDIR}/man${SECTION}")
endif()
add_custom_command(
OUTPUT ${MANFILE_TEMP}
COMMAND ${POD2MAN} --utf8 --section="${SECTION}" --center="${CENTER}"
--release="${RELEASE}" --name="${NAME_UPCASE}" "${PODFILE_FULL}" "${MANFILE_TEMP}"
)
add_custom_command(
OUTPUT ${MANFILE_FULL}
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/fix-roff-punct "${MANFILE_TEMP}" > ${MANFILE_FULL}
DEPENDS ${MANFILE_TEMP}
)
if(GZIP AND WITH_MANPAGE_COMPRESSION)
add_custom_command(
OUTPUT ${MANFILE_FULL_GZ}
COMMAND ${GZIP} -f -k --best -n "${MANFILE_FULL}"
DEPENDS ${MANFILE_FULL}
)
add_custom_target(${MANPAGE_TARGET} ALL
DEPENDS ${MANFILE_FULL_GZ}
)
install(
FILES ${MANFILE_FULL_GZ}
RENAME ${NAME}.${SECTION}.gz
DESTINATION ${MANFILE_DEST}
)
else()
add_custom_target(${MANPAGE_TARGET} ALL
DEPENDS ${MANFILE_FULL}
)
install(
FILES ${MANFILE_FULL}
RENAME ${NAME}.${SECTION}
DESTINATION ${MANFILE_DEST}
)
endif()
endif()
endmacro(pod2man PODFILE NAME SECTION CENTER)

View file

@ -0,0 +1,40 @@
# - This is a module to Generate files using Glib-Marshal
# Both the header and source files (.h and .cpp)
# Copyright 2008 - Joshua L. Blocher
#
# And it defines the following variables:
# GLIB_MARSHAL_PREFIX - The name of the files
# GLIB_MARSHAL_FILE - File to Generate from (.list) and to generate to (.h and .cpp)
# GLIB_MARSHAL_OUTPUT_HEADER - Result of Generation
# GLIB_MARSHAL_OUTPUT_CPP - Result of Generation
# GLIB_MARSHAL_OUTPUT_LOCATION - Where we are putting the Output
find_program(GLIB_MARSHAL_EXECUTABLE NAMES glib-genmarshal PATHS /usr/local/bin )
macro(GLIB_MARSHAL GLIB_MARSHAL_PREFIX GLIB_MARSHAL_FILE GLIB_MARSHAL_OUTPUT_LOCATION)
if(GLIB_MARSHAL_EXECUTABLE)
set(GLIB_MARSHAL_OUTPUT_EXTRA_LINE "#include \"${GLIB_MARSHAL_FILE}.h\" \n" )
message(STATUS "Generating header and sourcefiles from ${GLIB_MARSHAL_FILE}.list (Glib-Marshal)")
execute_process(COMMAND ${GLIB_MARSHAL_EXECUTABLE} --prefix=${GLIB_MARSHAL_PREFIX} --header ${CMAKE_CURRENT_SOURCE_DIR}/${GLIB_MARSHAL_FILE}.list
OUTPUT_VARIABLE GLIB_MARSHAL_OUTPUT_HEADER )
execute_process(COMMAND ${GLIB_MARSHAL_EXECUTABLE} --prefix=${GLIB_MARSHAL_PREFIX} --body ${CMAKE_CURRENT_SOURCE_DIR}/${GLIB_MARSHAL_FILE}.list
OUTPUT_VARIABLE GLIB_MARSHAL_OUTPUT_CPP )
# check whether the generated file is the same as the existing one
if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.h)
file(READ ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.h GLIB_MARSHAL_HEADER_OLD)
else()
set(GLIB_MARSHAL_HEADER_OLD "")
endif()
if(NOT GLIB_MARSHAL_HEADER_OLD STREQUAL GLIB_MARSHAL_OUTPUT_HEADER)
message(STATUS "${GLIB_MARSHAL_FILE}.h changed; overwriting")
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.h "${GLIB_MARSHAL_OUTPUT_HEADER}")
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.cpp "${GLIB_MARSHAL_OUTPUT_EXTRA_LINE}")
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/${GLIB_MARSHAL_FILE}.cpp "${GLIB_MARSHAL_OUTPUT_CPP}")
else()
message(STATUS "${GLIB_MARSHAL_FILE}.h unchanged")
endif()
endif()
endmacro()

View file

@ -0,0 +1,103 @@
# - pkg-config module for CMake
#
# Defines the following macros:
#
# PKGCONFIG_FOUND(package found)
# PKGCONFIG(package includedir libdir linkflags cflags)
# PKGCONFIG_VERSION(package version)
# PKGCONFIG_DEFINITION(package definition)
# Calling PKGCONFIG_FOUND will fill into the argument the value of the package search's result
# e.g. PKGCONFIG_FOUND(libart-2.0 LIBART_FOUND)
#
# Calling PKGCONFIG_VERSION will fill the desired version into the argument,
# e.g. PKGCONFIG_VERSION(libart-2.0 LIBART_VERSION)
# Calling PKGCONFIG will fill the desired information into the 4 given arguments,
# e.g. PKGCONFIG(libart-2.0 LIBART_INCLUDE_DIR LIBART_LINK_DIR LIBART_LINK_FLAGS LIBART_CFLAGS)
# if pkg-config was NOT found or the specified software package doesn't exist, the
# variable will be empty when the function returns, otherwise they will contain the respective information
#
# Calling PKGCONFIG_VERSION will fill the desired version into the argument,
# e.g. PKGCONFIG_VERSION(libart-2.0 LIBART_VERSION)
#
# Calling PKGCONFIG_DEFINITION will fill the definition (e.g -D_REENTRANT) into the argument,
# e.g. PKGCONFIG_DEFINITION(libart-2.0 LIBART_DEFINITION)
find_program(PKGCONFIG_EXECUTABLE NAMES pkg-config PATHS /usr/local/bin )
macro(STRIP_NEWLINES _string_var)
string(REGEX REPLACE "[\n\r]+" "" ${_string_var} ${${_string_var}})
endmacro(STRIP_NEWLINES _string_var)
macro(PKGCONFIG_FOUND _package _found)
# reset the variable at the beginning
set(${_found})
# if pkg-config has been found
if(PKGCONFIG_EXECUTABLE)
exec_program(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --print-errors --exists RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
if(${_pkgconfigDevNull})
message(STATUS "${_pkgconfigDevNull}")
endif(${_pkgconfigDevNull})
if(NOT _return_VALUE)
set(${_found} "TRUE")
endif(NOT _return_VALUE)
endif(PKGCONFIG_EXECUTABLE)
endmacro(PKGCONFIG_FOUND _found)
macro(PKGCONFIG _package _include_DIR _link_DIR _link_FLAGS _cflags)
# reset the variables at the beginning
set(${_include_DIR})
set(${_link_DIR})
set(${_link_FLAGS})
set(${_cflags})
# if pkg-config has been found
if(PKGCONFIG_EXECUTABLE)
exec_program(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --exists RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
# and if the package of interest also exists for pkg-config, then get the information
if(NOT _return_VALUE)
exec_program(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=includedir OUTPUT_VARIABLE ${_include_DIR} )
exec_program(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --variable=libdir OUTPUT_VARIABLE ${_link_DIR} )
exec_program(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --libs OUTPUT_VARIABLE ${_link_FLAGS} )
exec_program(${PKGCONFIG_EXECUTABLE} ARGS ${_package} --cflags OUTPUT_VARIABLE ${_cflags} )
strip_newlines(${_cflags})
endif(NOT _return_VALUE)
endif(PKGCONFIG_EXECUTABLE)
endmacro(PKGCONFIG _include_DIR _link_DIR _link_FLAGS _cflags)
macro(PKGCONFIG_VERSION _package _version)
# reset the variables at the beginning
set(${_version})
# if pkg-config has been found
if(PKGCONFIG_EXECUTABLE)
exec_program(${PKGCONFIG_EXECUTABLE} ARGS --print-errors ${_package} --exists RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
# and if the package of interest also exists for pkg-config, then get the information
if(NOT _return_VALUE)
exec_program(${PKGCONFIG_EXECUTABLE} ARGS --print-errors ${_package} --modversion OUTPUT_VARIABLE ${_version} )
endif(NOT _return_VALUE)
endif(PKGCONFIG_EXECUTABLE)
endmacro(PKGCONFIG_VERSION _package _version)
mark_as_advanced(PKGCONFIG_EXECUTABLE)
macro(PKGCONFIG_DEFINITION _package _definition)
# reset the variables at the beginning
set(${_definition})
# if pkg-config has been found
if(PKGCONFIG_EXECUTABLE)
exec_program(${PKGCONFIG_EXECUTABLE} ARGS --print-errors ${_package} --exists RETURN_VALUE _return_VALUE OUTPUT_VARIABLE _pkgconfigDevNull )
# and if the package of interest also exists for pkg-config, then get the information
if(NOT _return_VALUE)
exec_program(${PKGCONFIG_EXECUTABLE} ARGS --print-errors ${_package} --cflags-only-other OUTPUT_VARIABLE ${_definition} )
endif(NOT _return_VALUE)
endif(PKGCONFIG_EXECUTABLE)
endmacro(PKGCONFIG_DEFINITION _package _definition)
mark_as_advanced(PKGCONFIG_EXECUTABLE)

View file

@ -0,0 +1,331 @@
#!/usr/bin/env python3
# $Id: cmake_consistency_check.py 38869 2011-07-31 03:15:37Z campbellbarton $
# ***** BEGIN GPL LICENSE BLOCK *****
#
# 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 2
# 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, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Contributor(s): Campbell Barton
#
# ***** END GPL LICENSE BLOCK *****
# <pep8 compliant>
import sys
if not sys.version.startswith("3"):
print("\nPython3.x needed, found %s.\nAborting!\n" %
sys.version.partition(" ")[0])
sys.exit(1)
from cmake_consistency_check_config import (
IGNORE,
UTF8_CHECK,
SOURCE_DIR,
)
import os
from os.path import join, dirname, normpath, splitext
global_h = set()
global_c = set()
global_refs = {}
def replace_line(f, i, text, keep_indent=True):
file_handle = open(f, 'r')
data = file_handle.readlines()
file_handle.close()
l = data[i]
ws = l[:len(l) - len(l.lstrip())]
data[i] = "%s%s\n" % (ws, text)
file_handle = open(f, 'w')
file_handle.writelines(data)
file_handle.close()
def source_list(path, filename_check=None):
for dirpath, dirnames, filenames in os.walk(path):
# skip '.git'
if dirpath.startswith("."):
continue
for filename in filenames:
if filename_check is None or filename_check(filename):
yield os.path.join(dirpath, filename)
# extension checking
def is_cmake(filename):
ext = splitext(filename)[1]
return (ext == ".cmake") or (filename == "CMakeLists.txt")
def is_c_header(filename):
ext = splitext(filename)[1]
return (ext in {".h", ".hpp", ".hxx", ".hh"})
def is_c(filename):
ext = splitext(filename)[1]
return (ext in {".c", ".cpp", ".cxx", ".m", ".mm", ".rc", ".cc", ".inl"})
def is_c_any(filename):
return is_c(filename) or is_c_header(filename)
def cmake_get_src(f):
sources_h = []
sources_c = []
filen = open(f, "r", encoding="utf8")
it = iter(filen)
found = False
i = 0
# print(f)
def is_definition(l, f, i, name):
if l.startswith("unset("):
return False
if ('set(%s' % name) in l or ('set(' in l and l.endswith(name)):
if len(l.split()) > 1:
raise Exception("strict formatting not kept 'set(%s*' %s:%d" % (name, f, i))
return True
if ("list(APPEND %s" % name) in l or ('list(APPEND ' in l and l.endswith(name)):
if l.endswith(")"):
raise Exception("strict formatting not kept 'list(APPEND %s...)' on 1 line %s:%d" % (name, f, i))
return True
while it is not None:
context_name = ""
while it is not None:
i += 1
try:
l = next(it)
except StopIteration:
it = None
break
l = l.strip()
if not l.startswith("#"):
found = is_definition(l, f, i, "SRC")
if found:
context_name = "SRC"
break
found = is_definition(l, f, i, "INC")
if found:
context_name = "INC"
break
if found:
cmake_base = dirname(f)
while it is not None:
i += 1
try:
l = next(it)
except StopIteration:
it = None
break
l = l.strip()
if not l.startswith("#"):
if ")" in l:
if l.strip() != ")":
raise Exception("strict formatting not kept '*)' %s:%d" % (f, i))
break
# replace dirs
l = l.replace("${CMAKE_CURRENT_SOURCE_DIR}", cmake_base)
l = l.strip('"')
if not l:
pass
elif l.startswith("$"):
if context_name == "SRC":
# assume if it ends with context_name we know about it
if not l.split("}")[0].endswith(context_name):
print("Can't use var '%s' %s:%d" % (l, f, i))
elif len(l.split()) > 1:
raise Exception("Multi-line define '%s' %s:%d" % (l, f, i))
else:
new_file = normpath(join(cmake_base, l))
if context_name == "SRC":
if is_c_header(new_file):
sources_h.append(new_file)
global_refs.setdefault(new_file, []).append((f, i))
elif is_c(new_file):
sources_c.append(new_file)
global_refs.setdefault(new_file, []).append((f, i))
elif l in {"PARENT_SCOPE", }:
# cmake var, ignore
pass
elif new_file.endswith(".list"):
pass
elif new_file.endswith(".def"):
pass
elif new_file.endswith(".cl"): # opencl
pass
elif new_file.endswith(".cu"): # cuda
pass
elif new_file.endswith(".osl"): # open shading language
pass
elif new_file.endswith(".glsl"):
pass
else:
raise Exception("unknown file type - not c or h %s -> %s" % (f, new_file))
elif context_name == "INC":
if os.path.isdir(new_file):
new_path_rel = os.path.relpath(new_file, cmake_base)
if new_path_rel != l:
print("overly relative path:\n %s:%d\n %s\n %s" % (f, i, l, new_path_rel))
# # Save time. just replace the line
# replace_line(f, i - 1, new_path_rel)
else:
raise Exception("non existent include %s:%d -> %s" % (f, i, new_file))
# print(new_file)
global_h.update(set(sources_h))
global_c.update(set(sources_c))
'''
if not sources_h and not sources_c:
raise Exception("No sources %s" % f)
sources_h_fs = list(source_list(cmake_base, is_c_header))
sources_c_fs = list(source_list(cmake_base, is_c))
'''
# find missing C files:
'''
for ff in sources_c_fs:
if ff not in sources_c:
print(" missing: " + ff)
'''
# reset
del sources_h[:]
del sources_c[:]
filen.close()
def is_ignore(f, ignore_used):
for index, ig in enumerate(IGNORE):
if ig in f:
ignore_used[index] = True
return True
return False
def main():
print("Scanning:", SOURCE_DIR)
for cmake in source_list(SOURCE_DIR, is_cmake):
cmake_get_src(cmake)
# First do stupid check, do these files exist?
print("\nChecking for missing references:")
is_err = False
errs = []
for f in (global_h | global_c):
if not os.path.exists(f):
refs = global_refs[f]
if refs:
for cf, i in refs:
errs.append((cf, i))
else:
raise Exception("CMake referenecs missing, internal error, aborting!")
is_err = True
errs.sort()
errs.reverse()
for cf, i in errs:
print("%s:%d" % (cf, i))
# Write a 'sed' script, useful if we get a lot of these
# print("sed '%dd' '%s' > '%s.tmp' ; mv '%s.tmp' '%s'" % (i, cf, cf, cf, cf))
if is_err:
raise Exception("CMake referenecs missing files, aborting!")
del is_err
del errs
ignore_used = [False] * len(IGNORE)
# now check on files not accounted for.
print("\nC/C++ Files CMake does not know about...")
for cf in sorted(source_list(SOURCE_DIR, is_c)):
if not is_ignore(cf, ignore_used):
if cf not in global_c:
print("missing_c: ", cf)
# check if automake builds a corrasponding .o file.
'''
if cf in global_c:
out1 = os.path.splitext(cf)[0] + ".o"
out2 = os.path.splitext(cf)[0] + ".Po"
out2_dir, out2_file = out2 = os.path.split(out2)
out2 = os.path.join(out2_dir, ".deps", out2_file)
if not os.path.exists(out1) and not os.path.exists(out2):
print("bad_c: ", cf)
'''
print("\nC/C++ Headers CMake does not know about...")
for hf in sorted(source_list(SOURCE_DIR, is_c_header)):
if not is_ignore(hf, ignore_used):
if hf not in global_h:
print("missing_h: ", hf)
if UTF8_CHECK:
# test encoding
import traceback
for files in (global_c, global_h):
for f in sorted(files):
if os.path.exists(f):
# ignore outside of our source tree
if "extern" not in f:
i = 1
try:
for l in open(f, "r", encoding="utf8"):
i += 1
except UnicodeDecodeError:
print("Non utf8: %s:%d" % (f, i))
if i > 1:
traceback.print_exc()
# Check ignores aren't stale
print("\nCheck for unused 'IGNORE' paths...")
for index, ig in enumerate(IGNORE):
if not ignore_used[index]:
print("unused ignore: %r" % ig)
if __name__ == "__main__":
main()

View file

@ -0,0 +1,55 @@
import os
IGNORE = (
# dirs
"/cxxtest/",
"/dom/work/",
"/src/extension/dxf2svg/",
"/test/",
# files
"buildtool.cpp",
"src/inkscape-x64.rc",
"src/inkview-x64.rc",
"packaging/macosx/ScriptExec/main.c",
"share/ui/keybindings.rc",
"src/deptool.cpp",
"src/display/nr-filter-skeleton.cpp",
"src/display/testnr.cpp",
"src/dom/io/httpclient.cpp",
"src/dom/odf/SvgOdg.cpp",
"src/dom/xmlwriter.cpp",
"src/inkview.cpp",
"src/inkview.rc",
"src/io/streamtest.cpp",
"src/libcola/cycle_detector.cpp",
"src/libnr/nr-compose-reference.cpp",
"src/libnr/testnr.cp",
"src/live_effects/lpe-skeleton.cpp",
"src/svg/test-stubs.cpp",
"src/winconsole.cpp",
# header files
"share/filters/filters.svg.h",
"share/palettes/palettes.h",
"share/paint/patterns.svg.h",
"share/templates/templates.h",
"share/symbols/symbols.h",
"src/libcola/cycle_detector.h",
"src/libnr/in-svg-plane-test.h",
"src/libnr/nr-point-fns-test.h",
"src/libnr/nr-translate-test.h",
"src/svg/test-stubs.h",
# generated files, created by an in-source build
"CMakeFiles/CompilerIdC/CMakeCCompilerId.c",
"CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.cpp",
"src/helper/sp-marshal.cpp",
"src/helper/sp-marshal.h",
"src/inkscape-version.cpp",
"config.h",
)
UTF8_CHECK = False
SOURCE_DIR = os.path.normpath(os.path.abspath(os.path.normpath(os.path.join(os.path.dirname(__file__), ".."))))

View file

@ -0,0 +1,21 @@
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
foreach(file ${files})
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
exec_program(
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
OUTPUT_VARIABLE rm_out
RETURN_VALUE rm_retval
)
if(NOT "${rm_retval}" STREQUAL 0)
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
endif(NOT "${rm_retval}" STREQUAL 0)
else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
endforeach(file)

View file

@ -0,0 +1,52 @@
# This is called by cmake as an extermal process from
# ./src/CMakeLists.txt and creates inkscape-version.cpp
#
# It's also included directly in ./CMakeScripts/Dist.cmake to
# determine INKSCAPE_REVISION, INKSCAPE_REVISION_HASH and INKSCAPE_REVISION_DATE
# for the 'dist' targets
#
# These variables are defined by the caller, matching the CMake equivilents.
# - ${INKSCAPE_SOURCE_DIR}
# - ${INKSCAPE_BINARY_DIR}
set(INKSCAPE_REVISION "e7c3feb100, 2024-10-09")
if(EXISTS ${INKSCAPE_SOURCE_DIR}/.git)
execute_process(COMMAND git rev-parse --short HEAD
WORKING_DIRECTORY ${INKSCAPE_SOURCE_DIR}
OUTPUT_VARIABLE INKSCAPE_REVISION_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND git log -n 1 --pretty=%cd --date=short
WORKING_DIRECTORY ${INKSCAPE_SOURCE_DIR}
OUTPUT_VARIABLE INKSCAPE_REVISION_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE)
set(INKSCAPE_REVISION "${INKSCAPE_REVISION_HASH}, ${INKSCAPE_REVISION_DATE}")
execute_process(COMMAND
git status -s ${INKSCAPE_SOURCE_DIR}/src
WORKING_DIRECTORY ${INKSCAPE_SOURCE_DIR}
OUTPUT_VARIABLE INKSCAPE_SOURCE_MODIFIED
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT INKSCAPE_SOURCE_MODIFIED STREQUAL "")
set(INKSCAPE_REVISION "${INKSCAPE_REVISION}")
endif()
elseif(EXISTS ${INKSCAPE_SOURCE_DIR}/debian/git-build-recipe.manifest)
# workaround for debian packaging in ppa (where we have no repo)
# TODO: figure out how to match this to standard build environments
execute_process(COMMAND sed -n "s/.*deb-version\\s*//p" git-build-recipe.manifest
WORKING_DIRECTORY ${INKSCAPE_SOURCE_DIR}/debian
OUTPUT_VARIABLE DEB_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
set(INKSCAPE_REVISION "${DEB_VERSION}")
endif()
if(${INKSCAPE_REVISION_DATE} MATCHES "^([0-9][0-9][0-9][0-9])-[0-9][0-9]-[0-9][0-9]$")
set(INKSCAPE_BUILD_YEAR ${CMAKE_MATCH_1})
else()
string(TIMESTAMP INKSCAPE_BUILD_YEAR %Y UTC)
endif()
if(NOT "${INKSCAPE_BINARY_DIR}" STREQUAL "")
message("revision is " ${INKSCAPE_REVISION})
configure_file(${INKSCAPE_BINARY_DIR}/src/inkscape-version.cpp.in ${INKSCAPE_BINARY_DIR}/src/inkscape-version.cpp)
endif()

137
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,137 @@
Contributing to Inkscape
========================
Inkscape welcomes your contributions to help turn it into a fully
SVG-compliant drawing program for the Open Source community.
While many developers work on fixing bugs and creating new features, it
is worth strong emphasis that even non-programmers can help make
Inkscape more powerful and successful. You probably already have an idea
of something you'd like to work on. If not, here are just a few ways you
can help:
* Pick a bug, fix it, and send in a merge request on GitLab.
* Choose a feature you want to see developed, and make it.
* If you speak a language in addition to English, work on your
language's i18n file in the po/ directory.
* Find a new bug and report it.
* Help answer questions for new Inkscapers on IRC, forum, or the
mailing lists.
* Write an article advocating Inkscape.
* Author a HOWTO describing a trick or technique you've figured out.
Git Access
----------
Inkscape is currently developed on Git, with the code hosted on GitLab.
* https://gitlab.com/inkscape/inkscape
We give write access out to people with proven interest in helping develop
the codebase. Proving your interest is straightforward: Make two
contributions and request access.
Compiling the Development Version
---------------------------------
See http://wiki.inkscape.org/wiki/index.php/CompilingInkscape for general
remarks about compiling, including how to find some of the needed packages for
your distribution, and suggestions for developers.
Patch Decisions
---------------
Our motto for changes to the codebase is "Patch first, ask questions
later". When someone has an idea, rather than endlessly debating it, we
encourage folks to go ahead and code something up (even prototypish).
You would make this change in your own fork of Inkscape (see GitLab docs about
how to fork the repository), in a development branch of the code, which can be
submitted to GitLab as a merge request. Once in an MR it is convenient for other
folks to try out, poke and prod, and tinker with. We figure, the best
way to see if an idea fits is to try it on for size.
So if you have an idea, go ahead and fork Inkscape and submit a merge request!
That will also take care of running build tests on the branch, although we would
encourage you to check if everything builds and tests pass on your system first.
Coding Style
------------
Please refer to the Coding Style Guidelines
(https://inkscape.org/en/develop/coding-style/) if you have specific questions
on the style to use for code. If reading style guidelines doesn't interest
you, just follow the general style of the surrounding code, so that it is at
least consistent.
Documentation
-------------
Code needs to be documented. Future Inkscape developers will really
appreciate this. New files should have one or two lines describing the
purpose of the code inside the file.
Building (In Linux distribution)
--------------------------------
This is the best set of instructions for setting up your build directory...
You should install ninja and ccache for the fastest build:
```bash
sudo apt-get install ninja-build ccache
```
Next we prepare a build directory with a symlink to Inkscape's share folder, add a profile dir and set the bin folder (optional):
```bash
ln -s $PWD/share ./share/inkscape
mkdir -p build/conf
cd build
export INKSCAPE_PROFILE_DIR=$PWD/conf
PATH=$PWD/bin/:$PATH
```
Now we invoke cmake, letting it know to use our new build directory prefix, ccache and the Ninja compiler:
```bash
cmake -DCMAKE_INSTALL_PREFIX:PATH=$PWD/../ -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Debug -G Ninja ..
```
Invoke ninja to build the code. You may also use plain gcc's `make` if you didn't specific `-G` in the command above:
```bash
ninja
```
Now we can run `inkscape` that we have built, with the latest resources and code:
```bash
./bin/inkscape
```
To build in Non-Linux Platforms check out `INSTALL.md` (Links to Inkscape Wiki pages are given right below "Basic Installation")
Profiling
---------
To run with profiling, add `-DWITH_PROFILING=ON` to the above cmake script. Compiling and running will be slower and the gmon file will appear only after Inkscape quits.
See: https://wiki.inkscape.org/wiki/index.php/Profiling
Testing
-------
Before landing a patch, the unit tests should pass.
See: http://wiki.inkscape.org/wiki/index.php/CMake#Using_CMake_to_run_tests
General Guidelines for developers
----------------------------------
* If you are new, fork the inkscape project (https://gitlab.com/inkscape/inkscape) and create a new branch for each bug/feature you want to work on. Try to Set the CI time to a high value like 2 hour (Go to your fork > Settings > General Pipelines > Timeout)
* Merge requests (MR) are encouraged for the smallest of contributions. This helps other developers review the code you've written and check for the mistakes that may have slipped by you.
* Before working on anything big, be sure to discuss your idea with us ([IRC](irc://irc.freenode.org/#inkscape) or [RocketChat](https://chat.inkscape.org/)). Someone else might already have plans you can build upon and we will try to guide you !
* Adopt the coding style (indentation, bracket placement, reference/pointer placement, variable naming etc. - developer's common sense required!) of existing source so that your changes and code doesn't stand out/feel foreign.
* Carefully explain your ideas and the changes you've made along with their importance in the MR. Feel free to use pictures !
* Check the "Allow commits from members who can merge to this target branch" option while submitting the MR.
* Write informative commit messages ([check this](https://chris.beams.io/posts/git-commit/)). Use full url of bug instead of mentioning just the number in messages and discussions.
* Try to keep your MR current instead of creating a new one. Rebase your MR sometimes.
* Inkscape has contributors/developers from across the globe. Some may be unavailable at times but be patient and we will try our best to help you. We are glad to have you!

35
COPYING Normal file
View file

@ -0,0 +1,35 @@
Inkscape license
================
Most Inkscape source code is available under the GNU General Public License, version 2 or later.
Notable exceptions are:
- all javascript polyfill libraries are CC0 / Public Domain
- some libraries in src/3rdparty (mostly GNU Lesser General Public License or Mozilla Public License).
- a few files copied from GIMP, which are available under GNU (L)GPL version 3 or later.
- a few files which are dual-licensed, which means that they offer the additional permission to alternatively use them under another license.
As such, the complete binaries of Inkscape are currently covered by the terms of GNU GPL version 3 or later.
License of individual source files
==================================
The license of each individual inkscape source file can be found in the first few lines after "SPDX-License-Identifier:". The license text of every such license can be found in LICENSES/. Some files are dual-licensed, e.g. "GPL-2.0-or-later OR MPL-1.1", which means you can choose one of these licenses.
Libraries have their COPYING or LICENSE file in the respective subdirectory.
See also https://spdx.org/licenses/ for the full license texts, and https://spdx.org/ids for the standardized header format.
License Compatibility
=====================
Suggested reading for license version compatibility: https://www.gnu.org/licenses/gpl-faq.html#AllCompatibility
Roughly summarized (I am not a lawyer, this is not legal advice):
- You may legally make the following license changes without having to ask anyone:
LGPL-2.1-or-later -> GPL-2.0-or-later -> GPL-3.0-or-later
LGPL-3.0-or-later -> GPL-3.0-or-later
- Due to that, the resulting inkscape must be under GPL-3.0-or-later.
- Any license that is not "-or-later" is evil and must not be used in the inkscape project.

99
INSTALL.md Normal file
View file

@ -0,0 +1,99 @@
Installation
============
Required Dependencies
---------------------
The Inkscape core depends on several other libraries that you will need
install, if they are not already present on your system. The most
typical libraries you may need to install are:
[Boehm-GC](http://www.hboehm.info/gc/),
[libsigc++](https://github.com/libsigcplusplus/libsigcplusplus),
[gtkmm](https://www.gtkmm.org/).
Make sure you got the submodules code when fetching the code
(either by using `--recurse-submodules` on the git clone command, as recommended on the [Getting started](https://inkscape.org/develop/getting-started/#fetching-the-source-code) page, or by running `git submodule init && git submodule update`)
Please see [the wiki page on compiling Inkscape](http://wiki.inkscape.org/wiki/index.php/CompilingInkscape) for the
most current dependencies, including links to the source tarballs.
For common linux-distributions (Ubuntu, Debian, Fedora) you can use
[a bash-script](https://gitlab.com/inkscape/inkscape-ci-docker/-/raw/master/install_dependencies.sh?inline=false)
for getting required libraries.
Basic Installation
------------------
For Linux based Free Desktops, Inkscape version 0.92 and newer can be built using CMake:
```sh
mkdir build
cd build
cmake ..
make
make install
```
See `CONTRIBUTING.md` for more developer details and the [wiki](https://wiki.inkscape.org/wiki/index.php?title=Compiling_Inkscape).
For non-linux platforms, please see the Inkscape wiki pages here:
For building on ChromeOS, please click [here](
https://wiki.inkscape.org/wiki/index.php?title=Compiling_Inkscape_on_Chrome_OS)
For building on Windows, please click [here](
https://wiki.inkscape.org/wiki/index.php?title=Compiling_Inkscape_on_Windows_with_MSYS2)
For building on Mac, please click [here](
https://wiki.inkscape.org/wiki/index.php?title=CompilingMacOsX)
Running Without Installing
--------------------------
For developers and others who want to run Inkscape without installing it please
see the ***Building*** section in the `CONTRIBUTING.md` file.
Extensions
----------
All Inkscape extensions have been moved into their own repository. They
can be installed from there and should be packaged into builds directly.
Report all bugs and ideas to that sub project.
[Inkscape Extensions](https://gitlab.com/inkscape/extensions/)
They are available as a sub-module which can be updated independently:
```sh
git submodule update --remote
```
This will update the module to the latest version and you will see the
extensions directory is now changes in the git status. So be mindful of that.
Build Options
-------------
A number of configuration settings can be overridden through CMake. To
see a list of the options available for Inkscape, run:
```sh
cmake -L
```
or, for more advanced cmake settings:
```sh
cmake --help
```
For example, to build Inkscape with only SVG 1 support, and no SVG 2, do:
```sh
cmake .. -DWITH_SVG2=OFF
```
Or, to build Inkscape with debugging symbols, do:
```sh
cmake -DCMAKE_BUILD_TYPE=Debug ..
```

View file

@ -0,0 +1,15 @@
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 2 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.
The license text can be found in GPL-2.0.txt.

340
LICENSES/GPL-2.0.txt Normal file
View file

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
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
this service 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.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. 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.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
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
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the 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 a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE 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.
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
convey 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 2 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, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision 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, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This 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 Library General
Public License instead of this License.

View file

@ -0,0 +1,15 @@
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.
The license text can be found in GPL-3.0.txt.

674
LICENSES/GPL-3.0.txt Normal file
View file

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
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.
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.
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.
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.
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.
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.
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.
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.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"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.
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.
A "covered work" means either the unmodified Program or a work based
on the Program.
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.
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

@ -0,0 +1,12 @@
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
The license file text can be found in LGPL-2.1.txt.

515
LICENSES/LGPL-2.1.txt Normal file
View file

@ -0,0 +1,515 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations
below.
When we speak of free software, we are referring to freedom of use,
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 this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
^L
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it
becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
^L
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control
compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
^L
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. 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 not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
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
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply, and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License
may add an explicit geographical distribution limitation excluding those
countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the 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.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms
of the ordinary General Public License).
To apply these terms, attach the following notices to the library.
It is safest to attach them to the start of each source file to most
effectively convey 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 library's name and a brief idea of what it
does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper
mail.
You should also get your employer (if you work as a programmer) or
your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James
Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

View file

@ -0,0 +1,12 @@
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
The license file text can be found in LGPL-3.0.txt.

165
LICENSES/LGPL-3.0.txt Normal file
View file

@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
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.
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.
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.
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".
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.
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.
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:
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
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
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:
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 object code with a copy 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:
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.
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.
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.)
5. Combined Libraries.
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:
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.
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.
6. Revised Versions of the GNU Lesser General Public License.
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.
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.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

422
LICENSES/MPL-1.1.txt Normal file
View file

@ -0,0 +1,422 @@
Mozilla Public License Version 1.1
1. Definitions.
1.0.1. "Commercial Use" means distribution or otherwise making the Covered
Code available to a third party.
1.1. "Contributor" means each entity that creates or contributes to the creation
of Modifications.
1.2. "Contributor Version" means the combination of the Original Code, prior
Modifications used by a Contributor, and the Modifications made by that particular
Contributor.
1.3. "Covered Code" means the Original Code or Modifications or the combination
of the Original Code and Modifications, in each case including portions thereof.
1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted
in the software development community for the electronic transfer of data.
1.5. "Executable" means Covered Code in any form other than Source Code.
1.6. "Initial Developer" means the individual or entity identified as the
Initial Developer in the Source Code notice required by Exhibit A.
1.7. "Larger Work" means a work which combines Covered Code or portions thereof
with code not governed by the terms of this License.
1.8. "License" means this document.
1.8.1. "Licensable" means having the right to grant, to the maximum extent
possible, whether at the time of the initial grant or subsequently acquired,
any and all of the rights conveyed herein.
1.9. "Modifications" means any addition to or deletion from the substance
or structure of either the Original Code or any previous Modifications. When
Covered Code is released as a series of files, a Modification is:
Any addition to or deletion from the contents of a file containing Original
Code or previous Modifications.
Any new file that contains any part of the Original Code or previous Modifications.
1.10. "Original Code" means Source Code of computer software code which is
described in the Source Code notice required by Exhibit A as Original Code,
and which, at the time of its release under this License is not already Covered
Code governed by this License.
1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter
acquired, including without limitation, method, process, and apparatus claims,
in any patent Licensable by grantor.
1.11. "Source Code" means the preferred form of the Covered Code for making
modifications to it, including all modules it contains, plus any associated
interface definition files, scripts used to control compilation and installation
of an Executable, or source code differential comparisons against either the
Original Code or another well known, available Covered Code of the Contributor's
choice. The Source Code can be in a compressed or archival form, provided
the appropriate decompression or de-archiving software is widely available
for no charge.
1.12. "You" (or "Your") means an individual or a legal entity exercising rights
under, and complying with all of the terms of, this License or a future version
of this License issued under Section 6.1. For legal entities, "You" includes
any entity which controls, is controlled by, or is under common control with
You. For purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity, whether
by contract or otherwise, or (b) ownership of more than fifty percent (50%)
of the outstanding shares or beneficial ownership of such entity.
2. Source Code License.
2.1. The Initial Developer Grant. The Initial Developer hereby grants You
a world-wide, royalty-free, non-exclusive license, subject to third party
intellectual property claims:
a. under intellectual property rights (other than patent or trademark) Licensable
by Initial Developer to use, reproduce, modify, display, perform, sublicense
and distribute the Original Code (or portions thereof) with or without Modifications,
and/or as part of a Larger Work; and
b. under Patents Claims infringed by the making, using or selling of Original
Code, to make, have made, use, practice, sell, and offer for sale, and/or
otherwise dispose of the Original Code (or portions thereof).
c. the licenses granted in this Section 2.1 (a) and (b) are effective on the
date Initial Developer first distributes Original Code under the terms of
this License.
d. Notwithstanding Section 2.1 (b) above, no patent license is granted: 1)
for code that You delete from the Original Code; 2) separate from the Original
Code; or 3) for infringements caused by: i) the modification of the Original
Code or ii) the combination of the Original Code with other software or devices.
2.2. Contributor Grant. Subject to third party intellectual property claims,
each Contributor hereby grants You a world-wide, royalty-free, non-exclusive
license
a. under intellectual property rights (other than patent or trademark) Licensable
by Contributor, to use, reproduce, modify, display, perform, sublicense and
distribute the Modifications created by such Contributor (or portions thereof)
either on an unmodified basis, with other Modifications, as Covered Code and/or
as part of a Larger Work; and
b. under Patent Claims infringed by the making, using, or selling of Modifications
made by that Contributor either alone and/or in combination with its Contributor
Version (or portions of such combination), to make, use, sell, offer for sale,
have made, and/or otherwise dispose of: 1) Modifications made by that Contributor
(or portions thereof); and 2) the combination of Modifications made by that
Contributor with its Contributor Version (or portions of such combination).
c. the licenses granted in Sections 2.2 (a) and 2.2 (b) are effective on the
date Contributor first makes Commercial Use of the Covered Code.
d. Notwithstanding Section 2.2 (b) above, no patent license is granted: 1)
for any code that Contributor has deleted from the Contributor Version; 2)
separate from the Contributor Version; 3) for infringements caused by: i)
third party modifications of Contributor Version or ii) the combination of
Modifications made by that Contributor with other software (except as part
of the Contributor Version) or other devices; or 4) under Patent Claims infringed
by Covered Code in the absence of Modifications made by that Contributor.
3. Distribution Obligations.
3.1. Application of License. The Modifications which You create or to which
You contribute are governed by the terms of this License, including without
limitation Section 2.2. The Source Code version of Covered Code may be distributed
only under the terms of this License or a future version of this License released
under Section 6.1, and You must include a copy of this License with every
copy of the Source Code You distribute. You may not offer or impose any terms
on any Source Code version that alters or restricts the applicable version
of this License or the recipients' rights hereunder. However, You may include
an additional document offering the additional rights described in Section
3.5.
3.2. Availability of Source Code. Any Modification which You create or to
which You contribute must be made available in Source Code form under the
terms of this License either on the same media as an Executable version or
via an accepted Electronic Distribution Mechanism to anyone to whom you made
an Executable version available; and if made available via Electronic Distribution
Mechanism, must remain available for at least twelve (12) months after the
date it initially became available, or at least six (6) months after a subsequent
version of that particular Modification has been made available to such recipients.
You are responsible for ensuring that the Source Code version remains available
even if the Electronic Distribution Mechanism is maintained by a third party.
3.3. Description of Modifications. You must cause all Covered Code to which
You contribute to contain a file documenting the changes You made to create
that Covered Code and the date of any change. You must include a prominent
statement that the Modification is derived, directly or indirectly, from Original
Code provided by the Initial Developer and including the name of the Initial
Developer in (a) the Source Code, and (b) in any notice in an Executable version
or related documentation in which You describe the origin or ownership of
the Covered Code.
3.4. Intellectual Property Matters
(a) Third Party Claims
If Contributor has knowledge that a license under a third party's intellectual
property rights is required to exercise the rights granted by such Contributor
under Sections 2.1 or 2.2, Contributor must include a text file with the Source
Code distribution titled "LEGAL" which describes the claim and the party making
the claim in sufficient detail that a recipient will know whom to contact.
If Contributor obtains such knowledge after the Modification is made available
as described in Section 3.2, Contributor shall promptly modify the LEGAL file
in all copies Contributor makes available thereafter and shall take other
steps (such as notifying appropriate mailing lists or newsgroups) reasonably
calculated to inform those who received the Covered Code that new knowledge
has been obtained.
(b) Contributor APIs
If Contributor's Modifications include an application programming interface
and Contributor has knowledge of patent licenses which are reasonably necessary
to implement that API, Contributor must also include this information in the
LEGAL file.
(c) Representations.
Contributor represents that, except as disclosed pursuant to Section 3.4 (a)
above, Contributor believes that Contributor's Modifications are Contributor's
original creation(s) and/or Contributor has sufficient rights to grant the
rights conveyed by this License.
3.5. Required Notices. You must duplicate the notice in Exhibit A in each
file of the Source Code. If it is not possible to put such notice in a particular
Source Code file due to its structure, then You must include such notice in
a location (such as a relevant directory) where a user would be likely to
look for such a notice. If You created one or more Modification(s) You may
add your name as a Contributor to the notice described in Exhibit A. You must
also duplicate this License in any documentation for the Source Code where
You describe recipients' rights or ownership rights relating to Covered Code.
You may choose to offer, and to charge a fee for, warranty, support, indemnity
or liability obligations to one or more recipients of Covered Code. However,
You may do so only on Your own behalf, and not on behalf of the Initial Developer
or any Contributor. You must make it absolutely clear than any such warranty,
support, indemnity or liability obligation is offered by You alone, and You
hereby agree to indemnify the Initial Developer and every Contributor for
any liability incurred by the Initial Developer or such Contributor as a result
of warranty, support, indemnity or liability terms You offer.
3.6. Distribution of Executable Versions. You may distribute Covered Code
in Executable form only if the requirements of Sections 3.1, 3.2, 3.3, 3.4
and 3.5 have been met for that Covered Code, and if You include a notice stating
that the Source Code version of the Covered Code is available under the terms
of this License, including a description of how and where You have fulfilled
the obligations of Section 3.2. The notice must be conspicuously included
in any notice in an Executable version, related documentation or collateral
in which You describe recipients' rights relating to the Covered Code. You
may distribute the Executable version of Covered Code or ownership rights
under a license of Your choice, which may contain terms different from this
License, provided that You are in compliance with the terms of this License
and that the license for the Executable version does not attempt to limit
or alter the recipient's rights in the Source Code version from the rights
set forth in this License. If You distribute the Executable version under
a different license You must make it absolutely clear that any terms which
differ from this License are offered by You alone, not by the Initial Developer
or any Contributor. You hereby agree to indemnify the Initial Developer and
every Contributor for any liability incurred by the Initial Developer or such
Contributor as a result of any such terms You offer.
3.7. Larger Works. You may create a Larger Work by combining Covered Code
with other code not governed by the terms of this License and distribute the
Larger Work as a single product. In such a case, You must make sure the requirements
of this License are fulfilled for the Covered Code.
4. Inability to Comply Due to Statute or Regulation.
If it is impossible for You to comply with any of the terms of this License
with respect to some or all of the Covered Code due to statute, judicial order,
or regulation then You must: (a) comply with the terms of this License to
the maximum extent possible; and (b) describe the limitations and the code
they affect. Such description must be included in the LEGAL file described
in Section 3.4 and must be included with all distributions of the Source Code.
Except to the extent prohibited by statute or regulation, such description
must be sufficiently detailed for a recipient of ordinary skill to be able
to understand it.
5. Application of this License.
This License applies to code to which the Initial Developer has attached the
notice in Exhibit A and to related Covered Code.
6. Versions of the License.
6.1. New Versions
Netscape Communications Corporation ("Netscape") may publish revised and/or
new versions of the License from time to time. Each version will be given
a distinguishing version number.
6.2. Effect of New Versions
Once Covered Code has been published under a particular version of the License,
You may always continue to use it under the terms of that version. You may
also choose to use such Covered Code under the terms of any subsequent version
of the License published by Netscape. No one other than Netscape has the right
to modify the terms applicable to Covered Code created under this License.
6.3. Derivative Works
If You create or use a modified version of this License (which you may only
do in order to apply it to code which is not already Covered Code governed
by this License), You must (a) rename Your license so that the phrases "Mozilla",
"MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar
phrase do not appear in your license (except to note that your license differs
from this License) and (b) otherwise make it clear that Your version of the
license contains terms which differ from the Mozilla Public License and Netscape
Public License. (Filling in the name of the Initial Developer, Original Code
or Contributor in the notice described in Exhibit A shall not of themselves
be deemed to be modifications of this License.)
7. DISCLAIMER OF WARRANTY
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN
ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME
THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED
CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
8. Termination
8.1. This License and the rights granted hereunder will terminate automatically
if You fail to comply with terms herein and fail to cure such breach within
30 days of becoming aware of the breach. All sublicenses to the Covered Code
which are properly granted shall survive any termination of this License.
Provisions which, by their nature, must remain in effect beyond the termination
of this License shall survive.
8.2. If You initiate litigation by asserting a patent infringement claim (excluding
declatory judgment actions) against Initial Developer or a Contributor (the
Initial Developer or Contributor against whom You file such action is referred
to as "Participant") alleging that:
a. such Participant's Contributor Version directly or indirectly infringes
any patent, then any and all rights granted by such Participant to You under
Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant
terminate prospectively, unless if within 60 days after receipt of notice
You either: (i) agree in writing to pay Participant a mutually agreeable reasonable
royalty for Your past and future use of Modifications made by such Participant,
or (ii) withdraw Your litigation claim with respect to the Contributor Version
against such Participant. If within 60 days of notice, a reasonable royalty
and payment arrangement are not mutually agreed upon in writing by the parties
or the litigation claim is not withdrawn, the rights granted by Participant
to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration
of the 60 day notice period specified above.
b. any software, hardware, or device, other than such Participant's Contributor
Version, directly or indirectly infringes any patent, then any rights granted
to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective
as of the date You first made, used, sold, distributed, or had made, Modifications
made by that Participant.
8.3. If You assert a patent infringement claim against Participant alleging
that such Participant's Contributor Version directly or indirectly infringes
any patent where such claim is resolved (such as by license or settlement)
prior to the initiation of patent infringement litigation, then the reasonable
value of the licenses granted by such Participant under Sections 2.1 or 2.2
shall be taken into account in determining the amount or value of any payment
or license.
8.4. In the event of termination under Sections 8.1 or 8.2 above, all end
user license agreements (excluding distributors and resellers) which have
been validly granted by You or any distributor hereunder prior to termination
shall survive termination.
9. LIMITATION OF LIABILITY
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING
NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY
OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF
ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL,
OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES
FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY
AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE
BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY
SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH
PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION.
SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL
OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO
YOU.
10. U.S. government end users
The Covered Code is a "commercial item," as that term is defined in 48 C.F.R.
2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial
computer software documentation," as such terms are used in 48 C.F.R. 12.212
(Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through
227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code
with only those rights set forth herein.
11. Miscellaneous
This License represents the complete agreement concerning subject matter hereof.
If any provision of this License is held to be unenforceable, such provision
shall be reformed only to the extent necessary to make it enforceable. This
License shall be governed by California law provisions (except to the extent
applicable law, if any, provides otherwise), excluding its conflict-of-law
provisions. With respect to disputes in which at least one party is a citizen
of, or an entity chartered or registered to do business in the United States
of America, any litigation relating to this License shall be subject to the
jurisdiction of the Federal Courts of the Northern District of California,
with venue lying in Santa Clara County, California, with the losing party
responsible for costs, including without limitation, court costs and reasonable
attorneys' fees and expenses. The application of the United Nations Convention
on Contracts for the International Sale of Goods is expressly excluded. Any
law or regulation which provides that the language of a contract shall be
construed against the drafter shall not apply to this License.
12. Responsibility for claims
As between Initial Developer and the Contributors, each party is responsible
for claims and damages arising, directly or indirectly, out of its utilization
of rights under this License and You agree to work with Initial Developer
and Contributors to distribute such responsibility on an equitable basis.
Nothing herein is intended or shall be deemed to constitute any admission
of liability.
13. Multiple-licensed code
Initial Developer may designate portions of the Covered Code as "Multiple-Licensed".
"Multiple-Licensed" means that the Initial Developer permits you to utilize
portions of the Covered Code under Your choice of the MPL or the alternative
licenses, if any, specified by the Initial Developer in the file described
in Exhibit A. Exhibit A - Mozilla Public License.
" The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is ______________________________________ .
The Initial Developer of the Original Code is ________________________ .
Portions created by ______________________ are Copyright (C) ______ . All
Rights Reserved.
Contributor(s): ______________________________________ .
Alternatively, the contents of this file may be used under the terms of the
_____ license (the " [___] License"), in which case the provisions of [______]
License are applicable instead of those above. If you wish to allow use of
your version of this file only under the terms of the [____] License and not
to allow others to use your version of this file under the MPL, indicate your
decision by deleting the provisions above and replace them with the notice
and other provisions required by the [___] License. If you do not delete the
provisions above, a recipient may use your version of this file under either
the MPL or the [___] License. "
NOTE: The text of this Exhibit A may differ slightly from the text of the
notices in the Source Code files of the Original Code. You should use the
text of this Exhibit A rather than the text found in the Original Code Source
Code for Your Modifications.

98
LICENSES/OFL-1.1.txt Normal file
View file

@ -0,0 +1,98 @@
share/fonts/euphoriascript-regular.ttf
Copyright (c) 2012, Sabrina Mariela Lopez (typesenses@live.com.ar),
with Reserved Font Name "Euphoria Script".
share/fonts/LinuxLibertineDisplayRegular.ttf
Copyright (c) 2003-2012, Philipp H. Poll,
with Reserved Font Name "Linux Libertine Display".
Fonts licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

429
NEWS.md Normal file
View file

@ -0,0 +1,429 @@
Inkscape 1.2-alpha
Release highlights
Released on 2022-02-05
Inkscape documents can now hold multiple pages, which are managed by the new Page tool
Editable markers and dash patterns
On-canvas alignment snapping
Selectable origin for numerical scaling and moving
All alignment options in a single dialog
Gradient editing in the Fill and Stroke dialog
Layers and objects dialog merged
Snap settings refactored
Configurable Tool bar, continuous icon scaling and many more new customization options
Performance improvements for many parts of the interface and many different functions
Many crash & bug fixes
==================================================================
=== ===
=== The authoritative version of the changelog is at ===
=== https://wiki.inkscape.org/wiki/index.php/Release_notes/1.2 ===
=== ===
==================================================================
General user interface
Color palette
The overall look and options of the Color palette and the Swatches dialog got a massive overhaul (MR #2881):
When switching the color palette, the switcher shows a colorful preview line for each palette
Between 1 and 5 palette rows that can be displayed all at once, or scrolled through vertically / using the arrow buttons
Improved and reliably working settings for padding, tile size and tile shape / auto-stretching
Status Bar
The layer selection dropdown has been replaced by a layer indicator. Clicking on the indicator opens the new Layers and object dialog. This change improves Inkscape's performance for documents with many layers (MR #3648).
The status bar contents is now configurable, see Customization section.
Tool bar
The tool bar width can now be resized and also wraps into multiple columns automatically if the screen height is too small for all icons to fit.
You can customize which tools will be part of the tool bar in the preferences, see Customization section
Dithering
Inkscape's gradients sometimes suffered from visible steps between colors, a phenomenon also known as gradient banding. Gradient banding is caused by the difference between how many different colors are available for the selected image file format and how many colors a human eye can discern. The effect becomes especially prominent when exporting a gradient that only spans a small color range to a high-resolution image. There just aren't enough colors available for a smooth transition.
Dithering softens these steps by scattering pixels of the different adjacent colors along the gradient, a little bit like a blur.
Dithering is now used both for Export of raster images as well as for displaying gradients on canvas(MR #3812). This functionality requires a special version of Cairo, our rendering engine. This means that it will only be available in the pre-packaged builds (for macOS, Windows and for the Linux AppImage).
For standard Linux package formats (deb, rpm, …), it depends upon your Linux distribution maintainers whether they will patch up the version of Cairo they want to distribute. We hope that this change will one day also be included in the official Cairo packages (Link to ongoing discussion).
Canvas
Page
The page shadow now has a more realistic, blurry, fade-out look (MR #3128). [TODO: add a small screenshot]
Settings for the page background / decoration were refactored, see section about Document properties dialog.
Inkscape documents can now hold multiple pages! Learn more in the section about the new Page tool.
Snapping
Snap bar is now Snap popover
The snap bar has been replaced with a new 'popover'-type dialog, which will unfold when you click on the little arrow symbol in the top right corner, next to the snap symbol. Snap options now have always-visible descriptions, to make them easier to understand (MR #3323).
To activate / deactivate snapping globally, click on the snap symbol in the top right corner or press %.
The popover dialog has two different modes:
Simple: Only 3 options: snap bounding boxes and paths, activate / deactivate the new alignment snapping). This provides a simple preset for many use cases.
Advanced: Gives the familiar granular control over every snapping option. Switching from 'Advanced' back to 'Simple' is not merely a visual change, but will reset snap settings to defaults.
Snapping preferences globalized
Snap settings are no longer saved with the document, but are set globally for all documents in the preferences and in the snap popover dialog. The option for enabling snapping in new documents has been removed, as it no longer makes sense.
The options for snapping perpendicularly and tangentially to paths or guidelines have been moved from the document preferences to the snap popover to make them more discoverable. The other snap options from the document settings dialog were removed. [TODO: check whether this is still true at the time of release]
Alignment and Distribution snapping
During Google Summer of Code 2021, GSOC student Parth Pant worked on adding on-canvas alignment and distribution snapping, with support of the mentors Thomas Holder and Marc Jeanmougin. As a result, three new modes of on-canvas snapping have been added. These new modes make aligning and distributing objects a very easy drag-and-drop operation (MR #3294)..
When on-canvas alignment is active, Inkscape will display horizontal or vertical temporary guidelines that indicate when the selected object can be aligned relative to another object on the canvas. It connects the points of the objects that are in alignment. With distribution snapping, multiple objects close by are taken into account, making it possible to align objects in a grid, with very little effort.
The temporary guidelines only appear while editing / moving objects on the canvas. Once a guide shows up, the movement of the selection is loosely constrained in the direction of the guide.
Alignment and Distribution snapping guidelines display the distance(s) between objects as a little label per default. This can be disabled from Edit → Preferences → Snapping: Show snap distance in case of alignment or distribution snap.
The 'Simple' mode of the snapping popover dialog allows you to simply activate or deactivate Alignment snapping. The 'Advanced' mode gives you additional control by allowing you to en-/disable:
Self snapping: Toggle alignment snapping for nodes in the same path while editing nodes or node handles
Distribution snapping: Toggle distribution snapping
Tools
Page tool
The new Page tool (lowest button in the tool bar) allows you to create multi-page Inkscape documents, and to import as well as export multi-page PDF documents. (MR #3486, MR #3785, MR #3821). It supports overlapping pages and pages of different sizes in a single document.
Tool usage:
To create a new page either:
click-and-drag on the canvas
or click on the 'Create a new page' button in the tool controls
To delete a page, click on the page to select it, then click on the button Delete selected page or use the Del or Backspace keys.
To move a page on the canvas, click-and-drag it to the desired new position. If the option to Move overlapping objects is active, this will also move any objects that touch the page along with it.
To change a page's size:
click on a page whose size you want to change to select it, then drag the square-shaped handle in its bottom right corner
click on the page, and then choose one of the predefined sizes in the page size dropdown, or enter your size values for the 'Custom' option, by typing them into the field in the form of 10cm x 15cm
To fit a page to:
the size of the drawing: make sure to have no object selected before you switch to the Page tool. Then select a page by clicking on it, then click on the button 'Fit page to drawing or selection' in the tool controls
a selected object: first select the object(s) with the selection tool, then switch to the Page tool, click on a page to select it, then press the the button 'Fit page to drawing or selection' in the tool controls
To add a label to your page, select the page by clicking on it, then enter a name or label for it into the text field in the page tool's tool controls. Labels are always visible, no matter which tool is currently selected.
To export a multi-page PDF file, use File → Save a copy … → PDF. This will automatically include all pages.
To open or import a multi-page PDF or (pdf-based) AI file, use File → Open/Import → select file name → choose to import 'All' pages [Known issue: 'import' moves content of some pages to some far out place in the drawing]
Note: Multi-page SVG files are an Inkscape-specific concept. Web browsers will only display the first page of your document, which corresponds to the 'viewbox' area of the SVG file.
Selector Tool
The tool now allows to set the origin of the selection for precise numerical positioning:
Click on one of the 9 object handles to select your desired origin for the scaling, or select and then drag the middle handle to the desired position
A small red circle now indicates the new origin and the x/y position in the tool controls will adjust to the new origin.
Now edit the x, y, width or height values to move and scale your object using the new origin (MR #2700)
Text Tool
Kerning options are now symbolized by a button between the subscript and text direction selectors. Clicking on it will open a so-called pop-over, where all previously available options can be found. This change saves space in the Text tool's toolbar.
Negative kerning values can now be as little as -1000 (previously -100), making them symmetrical to their positive counterparts (MR #2569, MR #3434)
Padding: Text that is flowed into a shape and standard flowed text now have an additional square-shaped handle in the top right corner. Move the handle to adjust the text padding inside the frame (MR #2769) [Currently broken]
Exclusion zones: Text can now flow around one or more movable objects:
Select all object(s) (use only shapes and paths on the same object hierarchy level as the text; no groups / clones / images supported) and the text.
Set the exclusion zone by going to Text → Set subtraction frames.
Now you can move the exclusion objects around or edit their shape, and the text will adjust automatically.
If you want to change the exclusion zones again at a later point, repeat the process with all objects that the text should flow around.
Background info: SVG 2.0 flowed text allows for shape-padding and shape-subtract attributes. shape-padding lets the text flow into a shape and leave some space between its edges and w where the text will start to flow. shape-subtract subtracts shapes with margin, so text can flow around other objects in the scene. These attributes were supported in Inkscape 1.0, but not exposed to the user. This version of Inkscape includes both an adjustable on-canvas knot for changing the padding as well as a Text menu item for setting text subtraction properties with a further knot to adjust it's margins.
[See merge request for animated gifs to add here]
Path Operations
New Split path operation, available from Path → Split path:
The function separates a path object that consists of multiple subpaths into a set of path objects that 'belong together'. This means that parts of a path that have holes in them are kept as whole objects. The function works by splitting up a path into non-intersecting bits, keeping intersecting bits together.
Example: A path that consists of a word, like 'Inkscape' will be split into 8 parts, one for each letter. With the familiar 'Break apart' function, there would be 12 parts, because of the holes in the letters that would be split off as their own objects, too (MR #3738).[TODO: add animation]
On-Canvas Boolean operations [TODO: fill in if merged, seems to have low probability, lots of work to be done] https://gitlab.com/inkscape/inkscape/-/merge_requests/3357 Osama Ahmad with mentors Thomas Holder, Marc Jeanmougin, Martin Owens
Dialogs
General
A mini-menu (downward pointing arrow symbol) was added into the title bar of every multi-dialog panel (also called 'notebook'). You can use it to close the current tab, to undock it, or to close the whole panel. It also shows a list of available dialogs, sorted by purpose, allowing you to open them with a click ((MR #3728)
Open dialogs are now less costly for performance, because they do not update when it's not needed (MR #3369), or when they are hidden (MR #3761)
Docking zones now expand and flash slowly when a dialog is dragged close to them. This makes it easier to see where docking is possible (MR #3729)
The text labels of docked dialogs are now more responsive to the width of dialog (MR #3627)
Align and distribute
The formerly separate Arrange dialog is now integrated with the Align and Distribute dialog. With its three tabs, more user-friendly names and some small visual tweaks, the dialog now holds everything that is needed for aligning, distributing and arranging objects in your drawing (MR #3382, MR #3667).
The icons inside this dialog are now smaller.
Node alignment and distribution is nolonger shown on first run Just when you use node editing tool
Document Properties
The 'Snapping' tab was removed in favor of a global snapping preference, see Snapping section.
The first tab of the Document properties dialog was refactored thoroughly to make it easier to use:
It's now labelled 'Display' instead of 'Page'
The long list of different document formats is now available from a dropdown
There is a preview available of the page format and colors [TODO: needs screenshot]
The page area(s) in a document can now have a different color than the underlying 'desk' area [TODO: mention in highlights?]
The other options have been rearranged to look tidier
The option to add margins to a document when resizing it is currently unavailable [TODO: hopefully get that back before the release]
(MR #3700).
(MR #3400, MR #3403)
Fill and Stroke dialog
Color selector
The more intuitive HSL mode (hue, saturation, lightness) is now the default mode of the color selector.
All color selection modes (e.g. HSL, HSV, RGB, CMYK, color wheel, CMS) have been moved into drop-down menu, with icons. You can get the old, tabbed look back by disabling the option in Edit → Preferences → Interface: Use compact color selector mode switch (MR #3443).
Gradient Editor is back
A replacement for the gradient editor was added to the Fill and Stroke dialog (MR #2688, Bug ux#67).
This allows you to add, edit and delete gradient stops directly in the 'Fill and Stroke' dialog again:
to add a new stop, double click on the gradient preview
to move a stop, click and drag it along the gradient preview or enter the stop offset numerically for more precision
to remove a stop, click on it to select it, then press the Del or Backspace key
The Gradient tool toolbar options `repeat mode`, `reverse gradient direction`, a gradient selection library and a list of all stops have been added here, too, so all the options pertaining to gradients are in easy reach.
we added a preference to auto delete non used gradients. previously, inkscape deletes the non used gradients automatically. now, we made this optional so that, users can preserve those gradients in SVG file. https://gitlab.com/inkscape/inkscape/-/merge_requests/3897
Markers
The markers drop down list has been replaced by a little dialog that displays all available markers in a grid, and even allows you to edit the selected marker! This project was undertaken by GSOC student Rachana Podaralla with the mentors Michael Kowalski, Marc Jeanmougin and Martin Owens (MR #3394, MR #3420).
When clicking on the drop down for the start, middle or end markers, you will see the following:
a list of markers used in the current document at the top
below that, a list of all available markers, which also contains some fun new markers!
at the bottom, the 'Edit' section, with:
a preview of how the marker will look
some number fields to change the size of the marker (keep the lock on to scale proportionally)
an option to scale the markers when the stroke width is changed
options for changing the marker direction
the option to change the marker's angle and to have that angle fixed
marker offsetting options
a button to enable editing of markers (rotate, scale, move) on the canvas
Custom Dash patterns
To choose your own dash pattern, select Custom in the dash pattern drop-down menu. This will make a new text field show up where you can add your new custom dash pattern by typing in numbers. Each number corresponds to the length of a dash or a gap. It always starts with a dash, and when it reaches the end, it will continue with the first number again, for the next gap or dash. So if you enter an even number of numbers, e.g. '1 1 4.5 4.5' the pattern will be 'dot - short gap - dash - long gap' and then repeat again, and for an uneven number of numbers, the pattern will be inverted when the first 'set' ends.
On the canvas, you can watch how your object changes when you change the custom dash pattern numbers.
[TODO: needs gif]
Other small changes
Line cap and line join order buttons have been reordered, so they match vertically (MR #3402).
Layers and Objects dialog
A new dialog was created that merges the functionality of the familiar 'Layers' and 'Objects' dialogs, with better performance (MR #2466, MR #3635, MR #2466, MR #3741, MR #3597, MR #3645).
It is available from both the 'Layers' and the 'Objects' menu and offers the following functionality:
a button to toggle between 'Layers' and 'Objects' view
a list of all layers and objects in the drawing, featuring new icons for the different object types
8 alternating default colors for layers and the objects in them:
these colors are used for drawing the paths in the respective layers
the colors can be set (in case they clash with your theme, or you cannot see the paths that you draw) in the file style.css in your Inkscape preferences directory
layer and object colors can be customized for each layer/object on its own, by clicking on the vertical color bar at the end of each line
tiny mask and scissor symbols indicate that a clip or mask is applied to an object
object and layer names (label, not id) can be changed after a double-click on the current name
icons for locking and hiding a layer/object light up when you hover over the layer's row:
click to hide/unhide, lock/unlock, Shift+click to hide/lock other items [TODO: check whether 'on same level' would apply, doesn't work currently]
holding Alt while hovering over an object in the dialog will highlight that object on canvas
layers as well as objects can be multi-selected
the context (right-click) menu for layers provides options to move, delete, rename the current layer, to lock/hide all/other/the current layers, to add a new layer and to convert a layer to a group
the context menu for objects provides the same options as it would when you right-click on the object on canvas
Note:
the (partially hidden) setting for path colors in the preferences file is no longer respected. Adjust the style.css file as a workaround.
the dialog no longer offers the options to change opacity, blur or blend mode. Use the Fill and Stroke dialog as a workaround.
the type-forward search to filter for objects is no longer available. For objects, use the Search and Replace dialog as a workaround, for layers there is currently no replacement.
[TODO: needs a picture]
Preferences
The preferences zoom ruler now respects your theme's look (MR #3450)
An option to make Select same behave like Select all with respect to whether it selects objects only in the current layer or in all layers was added to Edit → Preferences → Behavior → Selecting (MR #2832)
SVG Font Editor
Bug fixes, small face lift and UX and performance improvements of the dialog (MR #3396, MR #3552, MR #3628)
To improve font editing experience new dialog simplifies glyph organization. When editing a font users can start by inserting new glyphs (glyph auto generation makes it easy - press '+' to add new glyphs). Next the user can select a glyph they want to edit and hit "Edit" button. Inkscape will then create a layer dedicated to this glyph, switch to it, and hide other layers. Thanks to this feature canvas can remain uncluttered, with only edited glyph visible.
SVG font dialog improvements:
speed improvements: Inkscape can now handle fonts with thousands of glyphs
automatic glyph generation: adding new glyph creates new entry and populates unicode string based on the last defined glyph; pressing '+' creates glyphs with consecutive unicodes
glyph management: glyph editing action creates glyph-specific layers to keep glyphs organized
added grid glyph view which offers larger preview than a list
Swatches
The Swatches dialog uses the same improved settings as the color palette.
Text and Font dialog
The dialog's width has been reduced, so it won't take up excessive amounts of space when docked (MR #3314).
Trace Bitmap
The Trace Bitmap dialog received a few updates and some more polish (MR #3405):
The preview auto-updates more reliably and shows a better preview image.
The preview location now adjusts to the dialog's format: if it is wider than tall, it moves to the right side, and if it is taller than wide, the preview appears at the bottom of the dialog.
The number entry fields are now accompanied by draggable sliders.
Transform dialog
We cleaned up this dialog, reduced width and added explanation for metric transformations (MR #3381)
Filters
Live path effects
We added button in to Live Path Effect Dialog that will select parent path that is related to that path. It quality of life feature for Booleans, Copie, etc...
Select satelit.png
We also fixed Problems that weare present when you copy/duplicate/ or stamped paths with LPE. This fixies big namber of bugs
TODO: needs more info
MR #3479
Copy LPE
New Copies Lpe. This will allows you to quickly copy large number of objects non distractively. Has many advanced features like mirroring or transformations to create interesting grids and patterns and variations quickly.
Features:
Cloning of objects in rows an colloms
Offset of rows and colloms
16 Mirroring modes
Linear Blendin of scale (4 mode+ mirroing)
Linear Blendin of rotation (4 modes + mirroing)
Custom Gap Controls
Custom styling of clones
Copie LPE.gif
MR #3814
Fixes
Perspective/envelope LPE now works on objects with 0 width or height . (edge cases for single line stroke) (MR #2712)
Import / Export
[TODO: not available yet, fill in when/if merged] Anshudhar Kumar Singh with mentors Michael Kowalski, Ted Gould, Tavmjong Bah https://gitlab.com/inkscape/inkscape/-/merge_requests/3825
Customization / Theming
General User Interface
The font size in the user interface can be adjusted at Edit → Preferences → Interface → Theming: Font scale (MR #3690)
The +/- buttons for number entry fields are now smaller. If you prefer the old, wider buttons, they can be turned on again by disabling Preferences → Interface : Use narrow number entry boxes . (MR #3358)
Bars / Toolbars
You can now hide elements from the status bar (style indicator, layer indicator, mouse coordinates, canvas rotation) at Edit → Preferences → Interface: Status bar (MR #3445)
You can now hide tools from the tool bar at Edit → Preferences → Interface → Toolbars: Toolbars (MR #3515)
Editing toolbox.gif [TODO: outdated, needs new recording]
Cursors
The drop shadow is now optional for mouse cursors. You can turn it off in Edit → Preferences → Interface → Mouse cursors: Show drop shadow (MR #3352).
Icons
Multiple icons in the Multicolor icons set got small retouches and other improvements to readability or contrast, e.g. the green color is now a little brighter when using a dark theme, to improve contrast.
Cursors and icons in Multicolor icon theme for the Bézier tool and the Calligraphy tool in the tool bar now use the same imagery [to be confirmed]
Align and distribute icons are now smaller, some were redesigned to fit in to 16x16 grid.
The icon sizes for the tool bar and the control / tool controls bar can now be adjusted smoothly on a continuous scale from from 100% to 300% in Edit → Preferences → Interface → Toolbars: Toolbox icon size / Control bar icon size. Changing the size no longer requires a restart.
Themes
A contrast slider was added for fine tuning the selected theme's colors at Edit → Preferences → Interface → Theming: Contrast (MR #906)
The contrast slider allows to fine-tune the theme's colors
macOS-specific Changes
On macOS, enable all special menu items in the application menu and hide them from other menus (MR #3767)
Windows-specific Changes
Modifier keys now work with pen input (Commit #46c12b)
Extensions
Add option to limit output extension to save copy (MR #3600)
Added Python app dirs dependency (MR #3568) [Is this a bug fix?]
Command line
'verbs' have been removed. All verbs are available as 'actions' now (see below for more context)(MR #3884, MR #3880, MR #3874).
A new action for scaling by a factor has been added, it replaces the previous one, which is now called 'grow' (MR #3880).
Behind the curtains
Gio::Actions: The old 'verbs' were converted to 'actions'. This work was done to prepare for migrating to Gtk4. It also makes it possible to reach them all from the commands palette, to assign keyboard shortcuts them and to use them on the command line. A big part of this work was done by Google Summer of Code student SUSHANT A.A. with the mentors Alexander Valavanis, Ted Gould and Tavmjong Bah.
Symbols
Add support for x, y, width and height SVG2 attributes on <symbol>. Follows logic of <svg> element, which already supported these attributes (MR #3828)
Notable bugfixes
Crash fixes
Check knot still exists before updating (MR #717)
Massive collection of crash fixes related to number of LPE (copy, stampe, duplicate) (MR #3479)
Action after grouping 3D boxes crash Fix (MR #3698)
Fix for crashing of inkscape while Quitting (MR #3681)
Fix crash due to invalid or malformed direct-action string (MR #3663)
Bezier curve tool Backspace crash (MR #3715)
Fix crash scrolling across line height units (MR #3541)
Fix adding a path effect to symbol causes crash (MR #3520)
Fix drag-and-drop svgs, stops crash (MR #3710)
Handle two items in spray tool's single path mode (MR #3470)
Icon preview crash (MR #3439)
Prevents crashing during 3D box import (MR #3592)
Fill between Paths LPE crash on selecting (MR #3801)
Other bug fixes
Inkscape no longer slows down when using grids and havign the Document Properties dialog open on macOS
Calligraphy tool: use correct tool tilt direction (MR #3782, Bug #1692)
duplicated gradeint does not get deleted (MR #3361)
Last line in paragraph is not justified anymore (MR #3780)
Fix #1034 - Recursively flatten css style when copying (MR #3656)
new boolean operation algorithm (MR #3724)
Respect mouse down before mouse move coordinates (WIN) (MR #3735)
Remove mandatory break from end of paragraphs, added in Pango 1.49 (MR #3630)
Fix: Subsequent font changes to words in the same textbox now apply (MR #3631)
Fix numpad input for unimode in text tool (MR #3689)
Restore refresh of units trackers (MR #3665)
Fix find and replace if text has description, nested tspans (MR #3551)
all canvas knots should have same size and be controlled form preferences (MR #3679, MR #3699)
Fix multiline vertical text positioning in browsers (MR #3537)
Stop changing line height when units change (MR #3544)
Fix Clone Tiler menu item, action mismatch (MR #3650)
fix: Cannot quit Inkscape on macOS Big Sur from welcome screen (MAC) (MR #2762)
Fix: Position of flowed text no longer applies extra transforms on text (MR #3695)
Fix default value for saturate in color matrix filter (MR #3626)
nodes widget no longer appears on startup in align and distribute dialog (MR #3677)
fixes #2621. Clicking on fill/stroke in the status bar now reopens the dialog if it is hidden (MR #3754)
Fix KP_2,4,6,8 shortcuts for rect tool (MR #3773)
Transform handle modifiers are now displayed on status bar (MR #3809)
Even more bug fixes
There were even more issues fixed than those listed above, but these probably only affect a small portion of users, or are relevant for development and packaging only.
For a complete list, visit our GitLab issue tracker and see the commit history.

31
README.md Normal file
View file

@ -0,0 +1,31 @@
Inkscape. Draw Freely.
======================
[https://inkscape.org/](https://inkscape.org/)
Inkscape is a Free and open source vector graphics editor. It offers a rich set
of features and is widely used for both artistic and technical illustrations
such as cartoons, clip art, logos, typography, diagramming and flowcharting.
It uses vector graphics to allow for sharp printouts and renderings at
unlimited resolution and is not bound to a fixed number of pixels like raster
graphics. Inkscape uses the standardized SVG file format as its main format,
which is supported by many other applications including web browsers.
SVG Features include basic shapes, paths, text, markers, clones,
alpha blending, transforms, gradients, and grouping.
In addition, Inkscape supports Creative Commons meta-data, node-editing,
layers, complex path operations, text-on-path, and SVG XML editing.
It also imports several formats like EPS, Postscript,
JPEG, PNG, BMP, and TIFF and exports PNG as well as multiple vector-based
formats.
Inkscape's main motivations are to provide the Open Source community
with a fully W3C compliant XML, SVG, and CSS2 drawing tool emphasizing a
lightweight core with powerful features added as extensions, and the
establishment of a friendly, open, community-oriented development
processes.
[![build status](https://gitlab.com/inkscape/inkscape/badges/master/pipeline.svg)](https://gitlab.com/inkscape/inkscape/-/commits/master)
[![Build Status](https://ci.appveyor.com/api/projects/status/gitlab/inkscape/inkscape?branch=master&svg=true)](https://ci.appveyor.com/project/inkscape/inkscape)
For installation, please see: [INSTALL.md](INSTALL.md)

224
TRANSLATORS Normal file
View file

@ -0,0 +1,224 @@
3ARRANO.com <3arrano@3arrano.com>, 2005.
Abdelhak Sidi Ali Mebarek <abdelhakcpm@gmail.com>, 2019.
Abdul Munif Hanafi <amunifhanafi@gmail.com>, 2019.
Abhay Raj Singh <abhayonlyone@gmail.com>, 2019.
Adam Belis <adambelis@launchpad>, 2019.
Adib Taraben <theadib@gmail.com>, 2004-2014.
Alan Monfort <alan.monfort@free.fr>, 2009-2010.
Alastair McKinstry <mckinstry@computer.org>, 2000.
Aleksandar Marković <alleksandar.markovic@gmail.com>, 2015.
Aleksandar Urošević <urke@users.sourceforge.net>, 2004-2009.
Alessio Frusciante <algol@firenze.linux.it>, 2002, 2003.
Alexander Shopov <ash@contact.bg>, 2006.
Alexandre Prokoudine <alexandre.prokoudine@gmail.com>, 2005, 2010-2014.
Alexey Remizov <alexey@remizov.pp.ru>, 2004.
Alfredo Rafael Vicente Boix <vicente_alf@gva.es>, 2019.
Ali Ghanavatian <ghanvatian.ali@gmail.com>, 2010.
Álvaro Lopes <alvieboy@alvie.com>, 2001, 2002.
Amanpreet Singh Brar Alamwalia <apbrar@gmail.com>, 2005.
Andreas Hyden <a.hyden@cyberpoint.se>, 2000.
andrew <andrew@cubicledrone.com>, 2018.
Andrius Ramanauskas <knutux@gmail.com>, 2006.
Antônio Cláudio (LedStyle) <ledstyle@gmail.com>, 2006.
Antonio Codazzi <f_sophia@libero.it>, 2006, 2007.
Arkadiusz Dzięgiel <arkadiusz.dziegiel@glorpen.pl>, 2020.
Arman Aksoy <armish@linux-sevenler.de>, 2003.
Arpad Biro <biro_arpad@yahoo.com>, 2004, 2005.
Artur Krzysztof Wróblewski <krypalkora1984@gmail.com>, 2010-2020.
Asier Sarasua Garmendia <asier.sarasua@gmail.com>, 2018-2019.
Benedikt Roth <Benedikt.Roth@gmx.net>, 2000.
Benjamin Weis <benjamin.weis@gmx.com>, 2014.
Benno Schulenberg <benno@vertaalt.nl>, 2008.
Boštjan Špetič <igzebedze@cyberpipe.org>, 2004, 2005.
Brisa Francesco <fbrisa@yahoo.it>, 2000.
Bruce Cowan <bruce@bcowan.me.uk>, 2010.
bulia byak <buliabyak@users.sf.net>, 2004.
Cédric Gemy <radar.map35@free.fr>, 2006.
Chris jia <Chrisjiasl@gmail.com>, 2006.
Christian Meyer <chrisime@gnome.org>, 2000-2002.
Christian Neumair <chris@gnome-de.org>, 2002, 2003.
Christian Rose <menthos@menthos.com>, 2000-2003.
Christophe Merlet (RedFox) <redfox@redfoxcenter.org>, 2000-2002.
Clytie Siddall <clytie@riverland.net.au>, 2004-2008.
Colin Marquardt <colin@marquardt-home.de>, 2004-2006.
Cristian Secară <cristi@secarica.ro>, 2010-2023.
ctenar <ctenar@fujitsu.k.utb.cz>, 2014.
Daniel Díaz <yosoy@danieldiaz.org>, 2004.
davi0145 <dm@kanute.dk>, 2020.
David Planella <david.planella@ubuntu.com>, 2020.
Didier Conchaudron <conchaudron@free.fr>, 2003.
Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>, 2011-2024.
Dmitry Astankov <mornie@basealt.ru>, 2019.
Dongjun Wu <ziyawu@gmail.com>, 2020.
Dorji Tashi <dorjee_doss@hotmail.com>, 2006.
Duarte Farrajota Ramos <duarte.framos@gmail.com> 2024.
Duarte Loreto <happyguy_pt@hotmail.com> 2002, 2003 (Maintainer).
Elias Norberg <elno0959 at student.su.se>, 2009.
Equipe de Tradução Inkscape Brasil <www.inkscapebrasil.org>, 2007.
Fatih Demir <kabalak@gtranslator.org>, 2000.
Felipe Corrêa da Silva Sanches <juca@members.fsf.org>, 2009.
Firas Hanife <FirasHanife@gmail.com>, 2014-2024.
Foppe Benedictus <foppe.benedictus@gmail.com>, 2007-2009.
Francesc Dorca <f.dorca@filnet.es>, 2003. Traducció sodipodi.
Francisco Javier F. Serrador <serrador@arrakis.es>, 2003.
Francisco Xosé Vázquez Grandal <fxvazquez@arrakis.es>, 2001.
Frederic Rodrigo <f.rodrigo free.fr>, 2004-2005.
Ganesh Murmu <g_murmu_in@yahoo.com>, 2014.
Ge'ez Frontier Foundation <locales@geez.org>, 2002.
George Boukeas <boukeas@gmail.com>, 2011.
Germano Gasparini <grigio60@gmail.com>, 2019.
Gihun Ham <progh2@gmail.com>, 2019.
Guillaume Audirac <guillaume.audirac@viregul.fr>, 2018-2020.
Gyuris Gellért <bubu@ujevangelizacio.hu>, 2018-2024.
Heiko Wöhrle <mail@heikowoehrle.de>, 2014.
heskjestad <cato@heskjestad.xyz>, 2019.
Hizkuntza Politikarako Sailburuordetza <hizkpol@ej-gv.es>, 2005.
Hleb Valoshka <375gnu@gmail.com>, 2008-2009.
Hoang Duy Tran <hoangduytran1960@googlemail.com>, 2022.
hugo mendes <hugospm@al.insper.edu.br>, 2020.
Igor Zhigunov <craysy@gmail.com>, 2017.
Ilia Penev <lichopicho@gmail.com>, 2006.
Imre Eilertsen <imreeil42@gmail.com>, 2024.
Iñaki Larrañaga <dooteo@euskalgnu.org>, 2006.
Iñigo Salvador Azurmendi <xalba@ni.eus>, 2023.
Ivan Masár <helix84@centrum.sk>, 2006-2017.
Ivan Řihošek <irihosek@seznam.cz>, 2014.
Jānis Eisaks <jancs@dv.lv>, 2012-2014.
Jeffrey Steve Borbón Sanabria <jeff_kerokid@yahoo.com>, 2005.
Jeroen van der Vegt <jvdvegt@gmail.com>, 2003, 2005, 2008.
Jesper Öqvist <jesper@llbit.se>, 2010, 2011.
Jin-Hwan Jeong <yongdoria@gmail.com>, 2009.
João Lima Neto <contato@joaolimaneto.com.br>, 2021, 2024.
Joaquim Perez i Noguer <noguer@gmail.com>, 2008-2009.
Jonathan Ernst <jernst@users.sourceforge.net>, 2006.
Jon South <striker@lunar-linux.org>, 2006.
Jordi Mas i Hernàndez <jmas@softcatala.org>, 2015.
Jordi Mas <jmas@softcatala.org>, 2020-2024.
Jörg Müller <jfm@ram-brand.de>, 2005.
Jose Antonio Salgueiro Aquino <developer@telefonica.net>, 2003.
José Esteban Quintanilla Ramírez <imagen.imperio@gmail.com>, 2019.
Josef Vybiral <josef.vybiral@gmail.com>, 2005-2006.
joshua simmons <jsimmons100@hotmail.co.uk>, 2019.
Juarez Rudsatz <juarez@correio.com>, 2004.
Junghee <daemul72@gmail.com>, 2024.
Junichi Uekawa <dancer@debian.org>, 2002.
Jurmey Rabgay <jur_gay@yahoo.com>, 2006.
Kai Lahmann <kailahmann@01019freenet.de>, 2000.
Karl Ove Hufthammer <karl@huftis.org>, 2004, 2005.
KATSURAGAWA Naoki <naopon@private.email.ne.jp>, 2006.
Keld Simonsen <keld@dkuug.dk>, 2000, 2001.
Kenji Inoue <kenz@oct.zaq.ne.jp>, 2006-2007.
Khandakar Mujahidul Islam <suzan@bengalinux.org>, 2006.
Khoem Sokhem <khoemsokhem@khmeros.info>, 2011.
Kingsley Turner <kingsley@maddogsbreakfast.com.au>, 2006.
Kitae <bluetux@gmail.com>, 2006.
Kjartan Maraas <kmaraas@gnome.org>, 2000-2002.
Kris De Gussem <Kris.DeGussem@gmail.com>, 2008-2021.
Lars Acou <lars.acou@gmail.com>, 2020-2021.
Lauris Kaplinski <lauris@ariman.ee>, 2000.
Leandro Regueiro <leandro.regueiro@gmail.com>, 2006-2008, 2010.
Levent <mustafaleventfidanci@gmail.com>, 2019.
libre ajans <libreajans@gmail.com>, 2019.
Liu Xiaoqin <liuxqsmile@gmail.com>, 2008.
Louni Kandulna <kandulna.louni@gmail.com>, 2014.
Luca Bruno <luca.br@uno.it>, 2005.
Lucas Vieites Fariña <lucas.vieites@gmail.com>, 2003-2024.
Mahesh subedi <submanesh@hotmail.com>, 2006.
Marc Jeanmougin <marc@jeanmougin.fr>, 2022-2024.
Marcin Floryan <marcin.floryan+inkscape (at) gmail.com>, 2016.
Marco Riva <oelimar@mail.com>, 2019-2023.
Maren Hachmann <marenhachmann@yahoo.com>, 2015-2016, 2019, 2024.
Marius Pârvu <iamlookingforthebathroom@yahoo.com>, 2024.
Mariya Shikunova <mariia@basealt.ru>, 2024.
Martin Srebotnjak, <miles@filmsi.net>, 2005, 2010, 2024.
Masatake YAMATO <jet@gyve.org>, 2002.
Masato Hashimoto <cabezon.hashimoto@gmail.com>, 2009-2014.
Matiphas <matiphas _a_ free _point_ fr>, 2004-2006.
Mattias Hultgren <mattias_hultgren@tele2.se>, 2005, 2006.
Max Gaukler <development@maxgaukler.de>, 2018-2019.
Maxim Dziumanenko <mvd@mylinux.com.ua>, 2004.
Meskó Balázs <meskobalazs@gmail.com>, 2018.
Mətin Əmirov <metin@karegen.com>, 2003.
Michael Rack <miohna@freenet.de>, 2018.
Michał Tomaszewski <mitom.tomaszewski@gmail.com>, 2019.
Mikhail novosyolov <mikhailnov@dumalogiya.ru>, 2018.
Milo Ivir <mail@milotype.de>, 2019-2024.
Mitsuru Oka <oka326@parkcity.ne.jp>, 2002.
ModProg <dev@modprog.de>, 2021.
Mornie <giku@live.jp>, 2019.
Morphix User <pchitrakar@gmail.com>, 2006.
Mufit Eribol <meribol@ere.com.tr>, 2000.
Muhammad Bashir Al-Noimi <mhdbnoimi@gmail.com>, 2008.
Myckel Habets <myckel@sdf.lonestar.org>, 2008.
Nasreen <nasreen_saifee@hotmail.com>, 2013.
Nguyen Dinh Trung <nguyendinhtrung141@gmail.com>, 2007, 2008.
Nicolas Dufour <nicoduf@yahoo.fr>, 2008-2016.
Olexandr Pylypchuk <lxlalexlxl@ukr.net>, 2019.
Oscar Gustafsson <oscar.gustafsson@gmail.com>, 2018.
Paresh prabhu <goa.paresh@Gmail.com>, 2013.
Patrick Storz <eduard.braun2@gmx.de>, 2015-2019.
Pawan Chitrakar <pchitrakar@gmail.com>, 2006.
PBS <pbs3141@gmail.com>, 2023.
Peter Bojtos <ptr@ulx.hu>, 2015.
Przemysław Loesch <p_loesch@poczta.onet.pl>, 2005.
Quico Llach <quico@softcatala.org>, 2000. Traducció sodipodi.
Raymond Ostertag <raymond@linuxgraphic.org>, 2002, 2003.
Riku Leino <tsoots@gmail.com>, 2006-2011.
Rong "Mantle" Bao <mantlejonse@foxmail.com>, 2021.
Rune Rønde Laursen <runerl@skjoldhoej.dk>, 2006.
Ruud Steltenpool <svg@steltenpower.com>, 2006.
saiba akhtar <sa2438@live.mdx.ac.uk>, 2019.
Sangeeta <sk@gma.co>, 2011.
Savitha <savithasprasad@yahoo.co.in>, 2013.
scootergrisen <scootergrisen@gmail.com>, 2020.
Sensu Iun <cieltero@gmail.com>, 2019.
Serdar Soytetir <sendirom@gmail.com>, 2005.
shivaken <shivaken@owls-nest.net>, 2004.
Shyam Krishna Bal <shyamkrishna_bal@yahoo.com>, 2006.
sileGit <mf.sile@gmail.com>, 2018.
Simos Xenitellis <simos@hellug.gr>, 2001, 2011.
Spyros Blanas <cid_e@users.sourceforge.net>, 2006, 2011.
Stefan Graubner <pflaumenmus92@gmx.net>, 2005.
Stephan Paternotte <stephan@paternottes.net>, 2024.
Stoyan Dimitrov <stoyan@gmx.com>, 2020.
Supranee Thirawatthanasuk <supranee@opentle.org>, 2006.
Sushma Joshi <shshma_joshi8266@vsnl.net>, 2011.
Sveinn í Felli <sv1@fellsnet.is>, 2014-2024.
Sylvain Chiron <chironsylvain@orange.fr>, 2016.
Takeshi Aihana <aihana@muc.biglobe.ne.jp>, 2000, 2001.
Tatiana Coelho <tcoelho83@gmail.com>, 2019.
Theodoros Asimakopoulos <theoasima@gmail.com>, 2024.
Theppitak Karoonboonyanan <thep@linux.thai.net>, 2006.
Thiago Pimentel <thiago.merces@gmail.com>, 2006.
Tim Sheridan <tghs@tghs.net>, 2007-2016.
tobiczech <tobiczech@gmail.com>, 2019.
Tomáš Marný <tomik.marny@gmail.com>, 2020-2023.
Toshifumi Sato <sato@centrosystem.com>, 2005.
Uwe Schöler <oss@oss-marketplace.com>, 2006-2014.
Valek Filippov <frob@df.ru>, 2000, 2003.
Valessio Soares de Brito <contato@valessiobrito.info>, 2009.
Victor Dachev <vdachev@gmail.com>, 2006.
Victor Westmann <victor.westmann@gmail.com>, 2011, 2014, 2019, 2020.
Viktar Haurylavets <vhaurylavets@gmail.com>, 2023-2024.
Ville Pätsi, 2013.
Vincent van Adrighem <V.vanAdrighem@dirck.mine.nu>, 2003.
Vinícius Lopes <viniciusiluminador@gmail.com>, 2017.
Vital Khilko <dojlid@mova.org>, 2003.
Vitaly Lipatov <lav@altlinux.ru>, 2002, 2004.
vonHalenbach <vonHalenbach@users.sourceforge.net>, 2005.
vrundeshw <vrundeshw@cdac.in>, 2012.
Waluyo Adi Siswanto <was.uthm@gmail.com>, 2011.
Wang Li <charlesw1234@163.com>, 2002.
Wei-Lun Chao <william.chao@ossii.com.tw>, 2006.
Wolfram Strempfer <wolfram@strempfer.de>, 2006.
Xavier Conde Rueda <xavi.conde@gmail.com>, 2004-2008.
Yaron Shahrabani <sh.yaron@gmail.com>, 2009, 2024.
Yuka Kachi <8232155-ykachi@users.noreply.gitlab.com>, 2021-2024.
Yukihiro Nakai <nakai@gnome.gr.jp>, 2000, 2003.
Yuri Beznos <zhiz0id@gmail.com>, 2006.
Yuri Chornoivan <yurchor@ukr.net>, 2007-2024.
Yuri Syrota <rasta@renome.rovno.ua>, 2000.
Yves Guillou <yvesguillou@users.sourceforge.net>, 2004.
Zdenko Podobný <zdpo@mailbox.sk>, 2003, 2004.
驿窗 <classenu@163.com>, 2020-2024.
Wen-Wei Kao <ltlnx@disroot.org>, 2023-2024.

113
_clang-format Normal file
View file

@ -0,0 +1,113 @@
---
# SPDX-License-Identifier: GPL-2.0-or-later
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: false
AllowAllConstructorInitializersOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterCaseLabel: false
AfterClass: true
AfterControlStatement: false
AfterEnum: true
AfterFunction: true
AfterNamespace: false
AfterStruct: true
AfterUnion: true
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeComma
BreakInheritanceList: BeforeComma
BreakStringLiterals: true
ColumnLimit: 120
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
DerivePointerBinding: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros: []
IncludeBlocks: Regroup
IncludeCategories:
- Regex: '^<'
Priority: 1
- Regex: '^"'
Priority: 2
IncludeIsMainRegex: '(-test)?$'
IndentCaseLabels: true
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
NamespaceMacros: []
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 60
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: c++20
StatementMacros: []
TypenameMacros: []
TabWidth: 4
UseCRLF: false
UseTab: Never
...

29
astylerc Normal file
View file

@ -0,0 +1,29 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Inkscape coding style options for the Artistic Style formatter
# See http://astyle.sourceforge.net/
# See https://inkscape.org/de/develop/coding-style/
# Opening braces broken from functions only
--style=stroustrup
# Four-space indent; convert stray tabs
--indent=spaces=4
--convert-tabs
# Spaces around binary operators and before control statement parens
--unpad-paren
--pad-oper
--pad-header
# Attach pointers and references to variable names
--align-pointer=name
--align-reference=name
# Add brackets to single-statement blocks
--add-brackets
# Misc. options
--indent-preprocessor
--indent-col1-comments

2444
buildtools/Doxyfile Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,153 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0-or-later
# License checker: test that files have a proper SPDX license header.
# Author: Max Gaukler <development@maxgaukler.de>
# Licensed under GPL version 2 or any later version, read the file "COPYING" for more information.
from __future__ import print_function
import fnmatch
import os
import sys
import subprocess
license = {}
hasSPDX = {}
if sys.version_info[0] < 3:
from io import open
# do not check licenses in these subdirectories:
# TODO: have look at the libraries' licenses
IGNORE_PATHS = [
".git*",
"CMakeScripts",
"LICENSES",
"ccache",
"build*",
"doc",
"inst",
"man",
"packaging",
"patches",
"po",
"share",
"src/3rdparty",
"testfiles/cli_tests/testcases",
"testfiles/data/example-FEXTRA-FCOMMENT.gz",
"testfiles/rendering_tests/fonts/LICENSES",
]
# do not check licenses for the following file endings:
IGNORE_FILE_ENDINGS = [
".bmp",
".bz2",
".dia",
".dll",
".eps",
".kate-swp",
".ods",
".otf",
".pdf",
".png",
".po",
".ps",
".rc",
".svg",
".ttf",
".xml",
".xpm",
"AUTHORS",
"BUILD_YOUR_OWN",
"CONTRIBUTING.md",
"COPYING",
"HACKING",
"INSTALL.md",
"NEWS",
"NEWS.md",
"Notes.txt",
"README",
"README.md",
"TRANSLATORS",
"todo.txt",
]
# permitted licenses (MUST BE compatible with licensing the compiled product as GPL3).
# IF YOU CHANGE THIS, also update the list of licenses in COPYING!
PERMITTED_LICENSES = [
"GPL-2.0-or-later",
"GPL-3.0-or-later",
"LGPL-2.1-or-later",
"LGPL-3.0-or-later",
"CC0",
]
class LicenseCheckError(Exception):
pass
if not os.path.exists("./LICENSES"):
print("this script must be run from the main git directory", file=sys.stderr)
sys.exit(1)
def files_all():
ignore_paths = [('./' + p) for p in IGNORE_PATHS]
ignore_paths += [(p + '/*') for p in ignore_paths]
for root, dirs, files in os.walk("."):
for name in files:
p = os.path.join(root,name)
if any(p.endswith(i) for i in IGNORE_FILE_ENDINGS):
continue
if any(fnmatch.fnmatch(p, i) for i in ignore_paths):
continue
if subprocess.call(["git", "check-ignore", "-q", "--", p]) == 0:
# file is in .gitignore
continue
yield p
def main(filenames):
for p in filenames:
license[p] = None
hasSPDX[p] = False
try:
for line in open(p, encoding='utf-8').readlines():
line = line.strip(' */#<>-!;\r\n')
if line.startswith("SPDX-License-Identifier: "):
hasSPDX[p] = True
license[p] = line[len("SPDX-License-Identifier: "):]
except IOError:
print("Cannot open {} (ignored)".format(p), file=sys.stderr)
continue
except UnicodeDecodeError:
raise LicenseCheckError(
"Encoding of {} is damaged (should be UTF8), cannot check license"
.format(p))
if not hasSPDX[p]:
raise LicenseCheckError(
"File '{}' does not have a SPDX-License-Identifier: header.\n"
"Please have a look at the coding style: https://inkscape.org/en/develop/coding-style/\n"
"This is required so that we can make sure all files have compatible licenses."
.format(p))
if not any(lic in PERMITTED_LICENSES for lic in license[p].split(' OR ')):
raise LicenseCheckError(
"File '{}' has an incompatible or unknown license '{}' in the SPDX-License-Identifier header.\n"
"Allowed licenses are:\n"
"{}".format(p, license[p], "\n".join(PERMITTED_LICENSES)))
if __name__ == '__main__':
try:
main(files_all())
except LicenseCheckError as e:
print(e, file=sys.stderr)
print("If you think this message is wrong, edit buildtools/check_license_header.py", file=sys.stderr)
sys.exit(1)
# vi:sw=4:expandtab:

21
buildtools/ci-index.html Normal file
View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<!-- This is the entry point for CI-generated stuff from the source code.
Currently, scan-build analysis and doxygen documentation.
Feel free to make this page as beautiful as you want.
Mc -->
<head>
<title>Inkscape CI</title>
</head>
<body>
<h1>Welcome to the Inkscape CI homepage</h1>
<p> This page lists the elements generated from the source code and regularly updated.</p>
<p>LAST UPDATE: <span style="font-weight:bold;">%DATE%</span> </p>
<ul>
<li><a href="doxygen/">Doxygen documentation for Inkscape source code</a></li>
<li><a href="doxygen-extensions/">Doxygen documentation for extensions</a></li>
<li><a href="scan-build/">scan-build static analysis report</a></li>
</ul>
<p><span style="font-size:small;position:absolute;bottom:0;right:0;"><a href="https://gitlab.com/inkscape/inkscape/-/blob/master/buildtools/ci-index.html">Feel free to improve this file.</a></span></p>
</body>
</html>

View file

@ -0,0 +1,33 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-or-later
##
## usage: clangtidy-helper [list of cpp files]
##
## Without arguments, run for all source files.
##
set -e
mkdir -p build
cd build
export CC="ccache clang"
export CXX="ccache clang++"
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
#remove 3rdparty files from analysis, and only do those in inkscape_base target
jq -c '.[] | select( .file | contains("3rdparty") | not) | select(.command | contains("CMakeFiles/inkscape_base")) ' compile_commands.json | jq -s > compile_commands2.json
#treat 3rdparty code as system headers
sed -e 's/-I\([^ ]*\)\/src\/3rdparty/-isystem \1\/src\/3rdparty/g' compile_commands2.json > compile_commands.json && rm compile_commands2.json
run-clang-tidy -fix "$@" > /dev/null || true
# revert all fixes in protected directories
git checkout --recurse-submodules ../src/3rdparty
git diff | tee clang_tidy_diff
if [[ -s clang_tidy_diff ]]; then
exit 1
fi

198
buildtools/media-check-icons.py Executable file
View file

@ -0,0 +1,198 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0-or-later
# Icon checker: test that icon themes contain all needed icons
# Author: Martin Owens <doctormo@geek-2.com>
# Licensed under GPL version 2 or any later version, read the file "COPYING" for more information.
import fnmatch
import os
import sys
from collections import defaultdict
THEME_PATH = os.path.join('.', 'share', 'icons')
IGNORE_THEMES = [
'application',
'Tango',
]
IGNORE_ICONS = [
# These are hard coded as symbolic in the gtk source code
'list-add-symbolic.svg',
'list-add.svg',
'list-remove-symbolic.svg',
'list-remove.svg',
'accessories-character-map.svg',
'accessories-character-map-symbolic.svg',
'applications-graphics.svg',
'applications-graphics-symbolic.svg',
'dialog-information.svg',
'dialog-information-symbolic.svg',
'edit-find.svg',
'edit-find-symbolic.svg',
'folder-open.svg',
'folder-open-symbolic.svg',
'tools-check-spelling.svg',
'tools-check-spelling-symbolic.svg',
'dialog-warning.svg',
'dialog-warning-symbolic.svg',
'format-justify-center.svg',
'format-justify-center-symbolic.svg',
'format-justify-fill.svg',
'format-justify-fill-symbolic.svg',
'format-justify-left.svg',
'format-justify-left-symbolic.svg',
'format-justify-right.svg',
'format-justify-right-symbolic.svg',
'dialog-warning-symbolic.svg',
'edit-clear.svg',
'edit-clear-symbolic.svg',
'view-refresh-symbolic.svg',
'view-refresh.svg',
# Those are illustrations rather than icons
'feBlend-icon-symbolic.svg',
'feColorMatrix-icon-symbolic.svg',
'feComponentTransfer-icon-symbolic.svg',
'feComposite-icon-symbolic.svg',
'feConvolveMatrix-icon-symbolic.svg',
'feDiffuseLighting-icon-symbolic.svg',
'feDisplacementMap-icon-symbolic.svg',
'feFlood-icon-symbolic.svg',
'feGaussianBlur-icon-symbolic.svg',
'feImage-icon-symbolic.svg',
'feMerge-icon-symbolic.svg',
'feMorphology-icon-symbolic.svg',
'feOffset-icon-symbolic.svg',
'feSpecularLighting-icon-symbolic.svg',
'feTile-icon-symbolic.svg',
'feTurbulence-icon-symbolic.svg',
'feBlend-icon.svg',
'feColorMatrix-icon.svg',
'feComponentTransfer-icon.svg',
'feComposite-icon.svg',
'feConvolveMatrix-icon.svg',
'feDiffuseLighting-icon.svg',
'feDisplacementMap-icon.svg',
'feFlood-icon.svg',
'feGaussianBlur-icon.svg',
'feImage-icon.svg',
'feMerge-icon.svg',
'feMorphology-icon.svg',
'feOffset-icon.svg',
'feSpecularLighting-icon.svg',
'feTile-icon.svg',
'feTurbulence-icon.svg',
]
NO_PROBLEM,\
BAD_SYMBOLIC_NAME,\
BAD_SCALABLE_NAME,\
MISSING_FROM,\
ONLY_FOUND_IN = range(5)
def icon_themes():
for name in os.listdir(THEME_PATH):
filename = os.path.join(THEME_PATH, name)
if name in IGNORE_THEMES or not os.path.isdir(filename):
continue
yield name, filename
def find_errors_in(themes):
data = defaultdict(set)
bad_symbolic = []
bad_scalable = []
names = set()
for name, path in themes:
for root, dirs, files in os.walk(path):
orig = root
root = root[len(path)+1:]
if '/' not in root:
continue
(kind, root) = root.split('/', 1)
if kind not in ("symbolic", "scalable"):
continue # Not testing cursors, maybe later.
theme_name = f"{name}-{kind}"
names.add(theme_name)
for fname in files:
if fname in IGNORE_ICONS:
continue
if not fname.endswith('.svg'):
continue
if kind == "symbolic":
if not fname.endswith('-symbolic.svg'):
bad_symbolic.append(os.path.join(orig, fname))
continue
else:
# Make filenames consistant for comparison
fname = fname.replace('-symbolic.svg', '.svg')
elif kind == "scalable" and fname.endswith('-symbolic.svg'):
bad_scalable.append(os.path.join(orig, fname))
continue
filename = os.path.join(root, fname)
data[filename].add(theme_name)
if bad_symbolic:
yield BAD_SYMBOLIC_NAME, bad_symbolic
if bad_scalable:
yield BAD_SCALABLE_NAME, bad_scalable
only_found_in = defaultdict(list)
missing_from = defaultdict(list)
for filename in sorted(data):
datum = data[filename]
if datum == names:
continue
elif len(datum) == 1:
only_found_in[list(datum)[0]].append(filename)
continue
for theme in (names - datum):
missing_from[theme].append(filename)
if only_found_in:
yield ONLY_FOUND_IN, only_found_in
if missing_from:
yield MISSING_FROM, missing_from
if __name__ == '__main__':
errors = list(find_errors_in(icon_themes()))
if errors:
count = 0
for error, themes in errors:
if isinstance(themes, list):
count += len(themes)
elif isinstance(themes, dict):
count += sum([len(v) for v in themes.values()])
sys.stderr.write(f" == {count} problems found in icon themes! == \n\n")
for error, themes in errors:
if error is BAD_SCALABLE_NAME:
sys.stderr.write(f"Scalable themes should not have symbolic icons in them (They end with -symbolic.svg so won't be used):\n")
for name in themes:
sys.stderr.write(f" - {name}\n")
sys.stderr.write("\n")
elif error is BAD_SYMBOLIC_NAME:
sys.stderr.write(f"Symbolic themes should only have symbolic icons in them (They don't end with -symbolic.svg so can't be used):\n")
for name in themes:
sys.stderr.write(f" - {name}\n")
sys.stderr.write("\n")
elif error is MISSING_FROM:
for theme in themes:
sys.stderr.write(f"Icons missing from {theme}:\n")
for name in themes[theme]:
sys.stderr.write(f" - {name}\n")
sys.stderr.write("\n")
elif error is ONLY_FOUND_IN:
for theme in themes:
sys.stderr.write(f"Icons only found in {theme}:\n")
for name in themes[theme]:
sys.stderr.write(f" + {name}\n")
sys.stderr.write("\n")
else:
pass
sys.exit(5)
# vi:sw=4:expandtab:

139
buildtools/media-check-keys.py Executable file
View file

@ -0,0 +1,139 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0-or-later
# Keys checker:
#
# * Are there bad xml elements / parsing
# * Does it contain non-key xml elements
# * Does the keys file reference something unknown
# * Does it repeat empty actions
# * Are there keys formatted as verbs
# * Are some of the keys missing
# * Does it include the default xml
#
# Author: Martin Owens <doctormo@geek-2.com>
# Licensed under GPL version 2 or any later version, read the file "COPYING" for more information.
import fnmatch
import os
import sys
from collections import defaultdict
from lxml import etree
KEYS_PATH = os.path.join('.', 'share', 'keys')
DEFAULT = 'inkscape.xml'
IGNORE_MISSING_KEYS = ['org.']
class Keys:
"""Open and parse a keys xml file"""
def __init__(self, filename):
self.filename = filename
self.mods = set()
self.keys = set()
self.olds = set()
self.ticks = defaultdict(list)
self.errors = False
self.parse(etree.parse(filename))
def parse(self, doc):
"""Parse the document into checkable concerns"""
for child in doc.getroot().getchildren():
try:
if child.tag == "modifier":
name = child.attrib['action']
self.mods.add(name)
self.ticks[name].append(child.attrib.get('modifiers'))
elif child.tag == "bind":
name = child.attrib['gaction']
self.keys.add(name)
self.ticks[name].append(child.attrib.get('keys'))
if 'key' in child.attrib or 'modifiers' in child.attrib:
self.olds.add(name)
elif child.tag == "{http://www.w3.org/2001/XInclude}include":
self.parse_include(child.attrib['href'])
elif isinstance(child.tag, str):
sys.stderr.write(f"Unrecognised tag in keys file {child.tag}\n")
self.errors = True
except KeyError as err:
sys.stderr.write(f"Missing attribute g/action in {self.filename}\n")
self.errors = True
def parse_include(self, file):
"""Parse in the linked file"""
other = Keys(os.path.join(os.path.dirname(self.filename), file))
self.mods = self.mods.union(other.mods)
self.keys = self.keys.union(other.keys)
@classmethod
def others(cls):
"""Load all non default keys"""
for name in os.listdir(KEYS_PATH):
filename = os.path.join(KEYS_PATH, name)
if name == DEFAULT:
continue
if not os.path.isfile(filename) or not filename.endswith('.xml'):
continue
yield name, cls(filename)
@classmethod
def default(cls):
"""Load default keys"""
return cls(os.path.join(KEYS_PATH, DEFAULT))
if __name__ == '__main__':
sys.stderr.write("\n\n==== CHECKING KEYBOARD FILES ====\n\n")
data = defaultdict(set)
names = set()
errors = False
that = Keys.default()
for name, this in Keys.others():
sys.stderr.write(f"Checking '{name}'\n")
for old in this.olds:
sys.stderr.write(f" ! Old formatted key binding {old}\n")
add = []
if '-' not in sys.argv:
for key in this.keys ^ (that.keys & this.keys):
sys.stderr.write(f" + Unknown extra key {key}\n")
errors = True
for mod in this.mods ^ (that.mods & this.mods):
sys.stderr.write(f" + Unknown extra modifier {mod}\n")
errors = True
for tick, lst in this.ticks.items():
if len(lst) > 1 and None in lst:
sys.stderr.write(f" * Multiple empty references to {tick}\n")
if '+' not in sys.argv:
for key in that.keys ^ (that.keys & this.keys):
if [ig for ig in IGNORE_MISSING_KEYS if key.startswith(ig)]:
continue
if '-' in sys.argv:
add.append(f"<bind gaction=\"{key}\" />")
else:
sys.stderr.write(f" - Missing key {key}\n")
errors = True
for mod in that.mods ^ (that.mods & this.mods):
if '-' in sys.argv:
add.append(f"<modifier action=\"{mod}\" />")
else:
sys.stderr.write(f" - Missing modifier {mod}\n")
errors = True
for item in sorted(add):
sys.stderr.write(f" {item}\n")
sys.stderr.write("\n")
if errors:
sys.exit(5)
# vi:sw=4:expandtab:

View file

@ -0,0 +1,174 @@
#!/usr/bin/env python
# ------------------------------------------------------------------------------------------------------------------
# list or check dependencies for binary distributions based on MSYS2 (requires the package mingw-w64-ntldd)
#
# run './msys2checkdeps.py --help' for usage information
# ------------------------------------------------------------------------------------------------------------------
from __future__ import print_function
import argparse
import os
import subprocess
import sys
SYSTEMROOT = os.environ['SYSTEMROOT']
class Dependency:
def __init__(self):
self.location = None
self.dependents = set()
def warning(msg):
print("Warning: " + msg, file=sys.stderr)
def error(msg):
print("Error: " + msg, file=sys.stderr)
exit(1)
def call_ntldd(filename):
try:
output = subprocess.check_output(['ntldd', '-R', filename], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
error("'ntldd' failed with '" + str(e) + "'")
except WindowsError as e:
error("Calling 'ntldd' failed with '" + str(e) + "' (have you installed 'mingw-w64-ntldd-git'?)")
except Exception as e:
error("Calling 'ntldd' failed with '" + str(e) + "'")
return output.decode('utf-8')
def get_dependencies(filename, deps):
raw_list = call_ntldd(filename)
skip_indent = float('Inf')
parents = {}
parents[0] = os.path.basename(filename)
for line in raw_list.splitlines():
line = line[1:]
indent = len(line) - len(line.lstrip())
if indent > skip_indent:
continue
else:
skip_indent = float('Inf')
# if the dependency is not found in the working directory ntldd tries to find it on the search path
# which is indicated by the string '=>' followed by the determined location or 'not found'
if ('=>' in line):
(lib, location) = line.lstrip().split(' => ')
if location == 'not found':
location = None
else:
location = location.rsplit('(', 1)[0].strip()
else:
lib = line.rsplit('(', 1)[0].strip()
location = os.getcwd()
parents[indent+1] = lib
# we don't care about Microsoft libraries and their dependencies
if location and SYSTEMROOT in location:
skip_indent = indent
continue
if lib not in deps:
deps[lib] = Dependency()
deps[lib].location = location
deps[lib].dependents.add(parents[indent])
return deps
def collect_dependencies(path):
# collect dependencies
# - each key in 'deps' will be the filename of a dependency
# - the corresponding value is an instance of class Dependency (containing full path and dependents)
deps = {}
if os.path.isfile(path):
deps = get_dependencies(path, deps)
elif os.path.isdir(path):
extensions = ['.exe', '.pyd', '.dll']
exclusions = ['distutils/command/wininst'] # python
for base, dirs, files in os.walk(path):
for f in files:
filepath = os.path.join(base, f)
(_, ext) = os.path.splitext(f)
if (ext.lower() not in extensions) or any(exclusion in filepath for exclusion in exclusions):
continue
deps = get_dependencies(filepath, deps)
return deps
if __name__ == '__main__':
modes = ['list', 'list-compact', 'check', 'check-missing', 'check-unused']
# parse arguments from command line
parser = argparse.ArgumentParser(description="List or check dependencies for binary distributions based on MSYS2.\n"
"(requires the package 'mingw-w64-ntldd')",
formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('mode', metavar="MODE", choices=modes,
help="One of the following:\n"
" list - list dependencies in human-readable form\n"
" with full path and list of dependents\n"
" list-compact - list dependencies in compact form (as a plain list of filenames)\n"
" check - check for missing or unused dependencies (see below for details)\n"
" check-missing - check if all required dependencies are present in PATH\n"
" exits with error code 2 if missing dependencies are found\n"
" and prints the list to stderr\n"
" check-unused - check if any of the libraries in the root of PATH are unused\n"
" and prints the list to stderr")
parser.add_argument('path', metavar='PATH',
help="full or relative path to a single file or a directory to work on\n"
"(directories will be checked recursively)")
parser.add_argument('-w', '--working-directory', metavar="DIR",
help="Use custom working directory (instead of 'dirname PATH')")
args = parser.parse_args()
# check if path exists
args.path = os.path.abspath(args.path)
if not os.path.exists(args.path):
error("Can't find file/folder '" + args.path + "'")
# get root and set it as working directory (unless one is explicitly specified)
if args.working_directory:
root = os.path.abspath(args.working_directory)
elif os.path.isdir(args.path):
root = args.path
elif os.path.isfile(args.path):
root = os.path.dirname(args.path)
os.chdir(root)
# get dependencies for path recursively
deps = collect_dependencies(args.path)
# print output / prepare exit code
exit_code = 0
for dep in sorted(deps):
location = deps[dep].location
dependents = deps[dep].dependents
if args.mode == 'list':
if (location is None):
location = '---MISSING---'
print(dep + " - " + location + " (" + ", ".join(dependents) + ")")
elif args.mode == 'list-compact':
print(dep)
elif args.mode in ['check', 'check-missing']:
if ((location is None) or (root not in os.path.abspath(location))):
warning("Missing dependency " + dep + " (" + ", ".join(dependents) + ")")
exit_code = 2
# check for unused libraries
if args.mode in ['check', 'check-unused']:
installed_libs = [file for file in os.listdir(root) if file.endswith(".dll")]
deps_lower = [dep.lower() for dep in deps]
top_level_libs = [lib for lib in installed_libs if lib.lower() not in deps_lower]
for top_level_lib in top_level_libs:
warning("Unused dependency " + top_level_lib)
exit(exit_code)

View file

@ -0,0 +1,141 @@
#!/usr/bin/env bash
# -------------------------------------------------------------------------------
# This script installs all dependencies required for building Inkscape with MSYS2.
#
# See https://wiki.inkscape.org/wiki/Compiling_Inkscape_on_Windows_with_MSYS2 for
# detailed instructions.
#
# The following instructions assume you are building for the standard x86_64 processor architecture,
# which means that you use the UCRT64 variant of msys2.
# Else, replace UCRT64 with the appropriate variant for your architecture.
#
# To run this script, execute it once on an UCRT64 shell, i.e.
# - use the "MSYS2 UCRT64" shortcut in the start menu or
# - run "ucrt64.exe" in MSYS2's installation folder
#
# MSYS2 and installed libraries can be updated later by executing
# pacman -Syu
# -------------------------------------------------------------------------------
# select if you want to build 32-bit (i686), 64-bit (x86_64), or both
case "$MSYSTEM" in
MINGW32)
ARCH=mingw-w64-i686
;;
MINGW64)
ARCH=mingw-w64-x86_64
;;
UCRT64)
ARCH=mingw-w64-ucrt-x86_64
;;
CLANG64)
ARCH=mingw-w64-clang-x86_64
;;
CLANGARM64)
ARCH=mingw-w64-clang-aarch64
;;
*)
ARCH={mingw-w64-i686,mingw-w64-x86_64}
;;
esac
# set default options for invoking pacman (in CI this variable is already set globally)
if [ -z $CI ]; then
PACMAN_OPTIONS="--needed --noconfirm"
fi
# sync package databases
pacman -Sy
# install basic development system, compiler toolchain and build tools
eval pacman -S $PACMAN_OPTIONS \
git \
base-devel \
$ARCH-toolchain \
$ARCH-autotools \
$ARCH-cmake \
$ARCH-meson \
$ARCH-ninja \
$ARCH-ccache
# install Inkscape dependencies (required)
eval pacman -S $PACMAN_OPTIONS \
$ARCH-double-conversion \
$ARCH-gc \
$ARCH-gsl \
$ARCH-libxslt \
$ARCH-boost \
$ARCH-gtk3 \
$ARCH-gtk-doc \
$ARCH-gtkmm3
# install Inkscape dependencies (optional)
eval pacman -S $PACMAN_OPTIONS \
$ARCH-poppler \
$ARCH-potrace \
$ARCH-libcdr \
$ARCH-libvisio \
$ARCH-libwpg \
$ARCH-aspell \
$ARCH-aspell-en \
$ARCH-gspell \
$ARCH-gtksourceview4 \
$ARCH-graphicsmagick \
$ARCH-libjxl
# install Python and modules used by Inkscape
eval pacman -S $PACMAN_OPTIONS \
$ARCH-python \
$ARCH-python-pip \
$ARCH-python-lxml \
$ARCH-python-numpy \
$ARCH-python-cssselect \
$ARCH-python-webencodings \
$ARCH-python-tinycss2 \
$ARCH-python-pillow \
$ARCH-python-six \
$ARCH-python-gobject \
$ARCH-python-pyserial \
$ARCH-python-coverage \
$ARCH-python-packaging \
$ARCH-python-zstandard \
$ARCH-scour
# install modules needed by extensions manager and clipart importer
eval pacman -S $PACMAN_OPTIONS \
$ARCH-python-appdirs \
$ARCH-python-beautifulsoup4 \
$ARCH-python-filelock \
$ARCH-python-msgpack \
$ARCH-python-lockfile \
$ARCH-python-cachecontrol \
$ARCH-python-idna \
$ARCH-python-urllib3 \
$ARCH-python-chardet \
$ARCH-python-certifi \
$ARCH-python-requests
# install Python modules not provided as MSYS2/MinGW packages
PACKAGES=""
for arch in $(eval echo $ARCH); do
case ${arch} in
mingw-w64-i686)
#/mingw32/bin/pip3 install --upgrade ${PACKAGES}
;;
mingw-w64-x86_64)
#/mingw64/bin/pip3 install --upgrade ${PACKAGES}
;;
mingw-w64-ucrt-x86_64)
#/ucrt64/bin/pip3 install --upgrade ${PACKAGES}
;;
mingw-w64-clang-x86_64)
#/clang64/bin/pip3 install --upgrade ${PACKAGES}
;;
mingw-w64-clang-aarch64)
#/clangarm64/bin/pip3 install --upgrade ${PACKAGES}
;;
esac
done
echo "Done :-)"

View file

@ -0,0 +1,29 @@
#!/bin/bash
set -euo pipefail
if [ -z ${CI_MERGE_REQUEST_ID-} ]; then
echo "Not from a MR"
exit 0
fi
if [ -z ${API_TOKEN-} ]; then
echo "No token"
exit 0
fi
CHANGES=$(git diff ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --name-only ../po/*.po | cut -d '/' -f 2 | cut -d '.' -f1)
NCHANGES=$(git diff ${CI_MERGE_REQUEST_DIFF_BASE_SHA} --name-only ../po/*.po | wc -l)
if [ $NCHANGES -eq 0 ]; then
echo "No translation changes"
exit 0
fi
./update_po_files.sh
tmpfile=$(mktemp)
echo '```' > ${tmpfile}
./language_statistics.sh $CHANGES | tee -a ${tmpfile}
echo '```' >> ${tmpfile}
curl --request POST --header "PRIVATE-TOKEN: $API_TOKEN" -G https://gitlab.com/api/v4/projects/${CI_MERGE_REQUEST_PROJECT_ID}/merge_requests/${CI_MERGE_REQUEST_IID}/notes --data-urlencode body@${tmpfile}

105
config.h.cmake Normal file
View file

@ -0,0 +1,105 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#ifndef _CONFIG_H_
#define _CONFIG_H_
/* Name of package */
#define PACKAGE "${PROJECT_NAME}"
/* Define to the full name of this package. */
#define PACKAGE_NAME "${PROJECT_NAME}"
/* Translation domain used */
#define GETTEXT_PACKAGE "${PROJECT_NAME}"
/* Localization directory */
#define PACKAGE_LOCALE_DIR "${PACKAGE_LOCALE_DIR}"
#define PACKAGE_LOCALE_DIR_ABSOLUTE "${CMAKE_INSTALL_PREFIX}/${PACKAGE_LOCALE_DIR}"
/* Base data directory -- only path-prefix.h should use it! */
#define INKSCAPE_DATADIR "${INKSCAPE_DATADIR}"
/* Use AutoPackage? */
#cmakedefine ENABLE_BINRELOC 1
/* always defined to indicate that i18n is enabled */
#cmakedefine ENABLE_NLS 1
/* Whether the Cairo PDF backend is available */
#cmakedefine PANGO_ENABLE_ENGINE 1
/* Define to 1 if you have the <ieeefp.h> header file. */
#cmakedefine HAVE_IEEEFP_H 1
/* Define to 1 if you have the `mallinfo2' function. */
#cmakedefine HAVE_MALLINFO2 1
/* Define to 1 if you have the `mallinfo' function. */
#cmakedefine HAVE_MALLINFO 1
/* Define to 1 if you have the <malloc.h> header file. */
#cmakedefine HAVE_MALLOC_H 1
/* Use OpenMP (via cmake) */
#cmakedefine HAVE_OPENMP 1
/* Use libpoppler for direct PDF import */
#cmakedefine HAVE_POPPLER 1
/* Use libpoppler-cairo for rendering PDF preview */
#cmakedefine HAVE_POPPLER_CAIRO 1
/* Define to 1 if you have the <stdint.h> header file. */
#cmakedefine HAVE_STDINT_H 1
/* Define to 1 if `fordblks' is member of `struct mallinfo'. */
#cmakedefine HAVE_STRUCT_MALLINFO_FORDBLKS 1
/* Define to 1 if `fsmblks' is member of `struct mallinfo'. */
#cmakedefine HAVE_STRUCT_MALLINFO_FSMBLKS 1
/* Define to 1 if `hblkhd' is member of `struct mallinfo'. */
#cmakedefine HAVE_STRUCT_MALLINFO_HBLKHD 1
/* Define to 1 if `uordblks' is member of `struct mallinfo'. */
#cmakedefine HAVE_STRUCT_MALLINFO_UORDBLKS
/* Define to 1 if `usmblks' is member of `struct mallinfo'. */
#cmakedefine HAVE_STRUCT_MALLINFO_USMBLKS 1
/* enable gtk spelling widget and built-in spellchecker */
#cmakedefine WITH_GSPELL 1
/* enable gtk syntax coloring text view widget */
#cmakedefine WITH_GSOURCEVIEW 1
/* Image/Graphics Magick++ support for bitmap effects */
#cmakedefine WITH_MAGICK 1
/* Use libjpeg */
#cmakedefine HAVE_JPEG 1
/* Build in libcdr */
#cmakedefine WITH_LIBCDR 1
/* Build in libvisio */
#cmakedefine WITH_LIBVISIO 1
/* Build in libwpg */
#cmakedefine WITH_LIBWPG 1
/* Build in libreadline */
#cmakedefine WITH_GNU_READLINE 1
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
#cmakedefine WORDS_BIGENDIAN 1
/* Enable LPE Tool? */
#cmakedefine WITH_LPETOOL 0
/* Do we want experimental, unsupported, unguaranteed, etc., LivePathEffects enabled? */
#cmakedefine LPE_ENABLE_TEST_EFFECTS 0
#endif /* _CONFIG_H_ */

21282
doc/ChangeLog_archive.txt Normal file

File diff suppressed because it is too large Load diff

23
doc/LOGGING.txt Normal file
View file

@ -0,0 +1,23 @@
Logging Inkscape events can be done by switching on DEBUG logs:
Set the environment variables:
INKSCAPE_DEBUG_LOG=filename.xml
INKSCAPE_DEBUG_FILTER=Comma,List,Options
Filter Options:
CORE - Logs core events
XML - Same xml changes in the log
SPOBJECT - Logs events from sp-object
DOCUMENT - Logs document events
REFCOUNT - Will track refs, may cause crashes
EXTENSION - Track extension events (where available)
FINALIZERS - Unknown
INTERACTION - User events
CONFIGURATION - Configuration entries as they're read
OTHER - None
The log will output an xml file useful for machine reading.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 27 KiB

View file

@ -0,0 +1,517 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg586"
sodipodi:version="0.32"
inkscape:version="0.92.0 r15304"
width="640pt"
height="480pt"
sodipodi:docname="02-outline.svg"
version="1.1">
<defs
id="defs588">
<linearGradient
id="linearGradient2570">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2571" />
<stop
style="stop-color:#000000;stop-opacity:0.62745100;"
offset="0.58504134"
id="stop2572" />
<stop
style="stop-color:#ffffff;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop2573" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1218"
id="linearGradient1322"
x1="77.599106"
y1="20.687101"
x2="53.030737"
y2="114.57422"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1318"
x1="59.491886"
y1="30.563196"
x2="33.266399"
y2="58.199241"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1307"
x1="0.45376351"
y1="1.9347328"
x2="0.41986585"
y2="0.12454049"
gradientTransform="scale(1.004208,0.995809)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1306"
x1="0.45009527"
y1="1.9667202"
x2="0.41548476"
y2="0.11846013"
gradientTransform="scale(1.006361,0.993679)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1305"
x1="0.45839140"
y1="1.8676205"
x2="0.42603236"
y2="0.13959341"
gradientTransform="scale(1.002016,0.997989)" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1277"
x1="11.967844"
y1="119.11808"
x2="51.413385"
y2="80.482086"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1272"
x1="118.66497"
y1="45.70058"
x2="90.28563"
y2="62.493129"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1270" />
<linearGradient
xlink:href="#linearGradient1323"
id="linearGradient1231"
x1="17.696665"
y1="120.74315"
x2="94.698939"
y2="120.74315"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1221"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1219" />
<stop
style="stop-color:#323232;stop-opacity:1.0000000;"
offset="0.073255815"
id="stop1321" />
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.65260679"
id="stop1320" />
<stop
style="stop-color:#fff;stop-opacity:1;"
offset="1"
id="stop1220" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
style="stop-color:#0081ac;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop1223" />
<stop
style="stop-color:#006d91;stop-opacity:0.62745100;"
offset="0.50000000"
id="stop1722" />
<stop
style="stop-color:#000000;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop1224" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1274" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1275" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
style="stop-color:#000000;stop-opacity:0.77685952;"
offset="0.00000000"
id="stop1324" />
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1325" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient826"
id="radialGradient829"
cx="296.2963"
cy="281.25"
r="248.40302"
fx="303.7037"
fy="93.75"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
style="stop-color:#000000;stop-opacity:0.95294118;"
offset="0.00000000"
id="stop827" />
<stop
style="stop-color:#000000;stop-opacity:0.76078433;"
offset="0.36585677"
id="stop830" />
<stop
style="stop-color:#000000;stop-opacity:0.52941179;"
offset="0.47107276"
id="stop847" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop828" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient909"
id="linearGradient907"
x1="0.50000000"
y1="0.66667551"
x2="0.50000000"
y2="-1.7333326" />
<linearGradient
id="linearGradient909">
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="0.00000000"
id="stop910" />
<stop
style="stop-color:#000000;stop-opacity:0.17000000;"
offset="1.0000000"
id="stop913" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1309"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient2570"
id="linearGradient1308"
x1="-0.0028122679"
y1="1365.4825"
x2="64.30938"
y2="1365.4825"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient36619"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36621"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36623"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36625"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36627"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36629"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36631"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.05"
inkscape:cx="320"
inkscape:cy="240"
inkscape:window-width="764"
inkscape:window-height="687"
inkscape:window-x="432"
inkscape:window-y="41"
showguides="true"
inkscape:guide-bbox="true"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-maximized="0">
<sodipodi:guide
orientation="horizontal"
position="0,464"
id="guide607"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Background"
style="display:block">
<rect
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt"
id="topbluebox"
width="853.33331"
height="120"
x="0"
y="1.8947807e-15" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M -0.03652902,117.55657 850.68323,117.34163"
id="path654"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<g
id="g1085"
transform="translate(689.36448,-10.40511)">
<g
id="g1394"
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)">
<ellipse
id="path898"
style="opacity:0.69398911;fill:url(#radialGradient36619);stroke-width:0.84729707;stroke-dashoffset:0"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
id="ball1"
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
id="g1310"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
style="fill:url(#linearGradient1221)">
<path
style="fill:url(#linearGradient36621);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
id="path1278"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient36623);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
id="path1283"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient36625);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
id="path1286"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient36627);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
id="path1295"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient36629);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
id="path1300"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient36631);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
id="path1304"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
id="path1217"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
id="path1269"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
id="path1271"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
id="path1276"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
id="path1317"
sodipodi:nodetypes="ccccccccccczz"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Title">
<text
x="48"
y="74.666664"
style="font-style:normal;font-weight:normal;font-size:51.20000076px;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text48">
<tspan
id="tspan49"
style="stroke-width:3.20000017pt">Overview</tspan>
</text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34.13333511px;line-height:139.99999762%;font-family:Arial;letter-spacing:0;writing-mode:lr-tb;text-anchor:start;display:block;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
x="46.316666"
y="185.39682"
id="text1126"><tspan
x="46.316666"
y="185.39682"
sodipodi:role="line"
id="tspan1270"
style="stroke-width:3.20000017pt">* Current inkscape gui/app architecture</tspan><tspan
x="46.316666"
y="233.18349"
sodipodi:role="line"
id="tspan1272"
style="stroke-width:3.20000017pt">* Problems with current architecture</tspan><tspan
x="46.316666"
y="280.97015"
sodipodi:role="line"
id="tspan1274"
style="stroke-width:3.20000017pt" /><tspan
x="46.316666"
y="328.75684"
sodipodi:role="line"
id="tspan1276"
style="stroke-width:3.20000017pt">* Current inkscape_gtkmm architecture</tspan><tspan
x="46.316666"
y="376.54349"
sodipodi:role="line"
id="tspan1278"
style="stroke-width:3.20000017pt">* Future capabilities we'd like to support</tspan><tspan
x="46.316666"
y="424.33017"
sodipodi:role="line"
id="tspan1280"
style="stroke-width:3.20000017pt" /><tspan
x="46.316666"
y="472.11682"
sodipodi:role="line"
id="tspan1282"
style="stroke-width:3.20000017pt">* Next generation architecture</tspan><tspan
x="46.316666"
y="519.9035"
sodipodi:role="line"
id="tspan1284"
style="stroke-width:3.20000017pt">* Evolving to next gen inkscape architecture</tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Drawing Area" />
</svg>

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -0,0 +1,581 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="03-current.svg"
height="480pt"
width="640pt"
inkscape:version="0.92.0 r15304"
sodipodi:version="0.32"
id="svg586"
version="1.1">
<defs
id="defs588">
<marker
style="overflow:visible;"
id="TriangleOutL"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path2817"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="TriangleInL"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleInL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
id="path2823"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="Arrow2L"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2L">
<path
d="M 4.363143,4.732916 -8.456553,0.01878889 4.3631437,-4.6953372 c -2.0480514,2.7832182 -2.0362505,6.5911436 -7e-7,9.4282532 z"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.73333335;stroke-linejoin:round"
id="path2863"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient2570">
<stop
id="stop2571"
offset="0.0000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop2572"
offset="0.58504134"
style="stop-color:#000000;stop-opacity:0.62745100;" />
<stop
id="stop2573"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
y2="114.57422"
x2="53.030737"
y1="20.687101"
x1="77.599106"
id="linearGradient1322"
xlink:href="#linearGradient1218"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="58.199241"
x2="33.266399"
y1="30.563196"
x1="59.491886"
id="linearGradient1318"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
gradientTransform="scale(1.004208,0.995809)"
y2="0.12454049"
x2="0.41986585"
y1="1.9347328"
x1="0.45376351"
id="linearGradient1307"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.006361,0.993679)"
y2="0.11846013"
x2="0.41548476"
y1="1.9667202"
x1="0.45009527"
id="linearGradient1306"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.002016,0.997989)"
y2="0.13959341"
x2="0.42603236"
y1="1.8676205"
x1="0.45839140"
id="linearGradient1305"
xlink:href="#linearGradient1222" />
<linearGradient
y2="80.482086"
x2="51.413385"
y1="119.11808"
x1="11.967844"
id="linearGradient1277"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="62.493129"
x2="90.28563"
y1="45.70058"
x1="118.66497"
id="linearGradient1272"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1270"
xlink:href="#linearGradient1222" />
<linearGradient
y2="120.74315"
x2="94.698939"
y1="120.74315"
x1="17.696665"
id="linearGradient1231"
xlink:href="#linearGradient1323"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="28.120696"
x2="130.70353"
y1="170.27164"
x1="27.318817"
id="linearGradient1221"
xlink:href="#linearGradient1222"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
id="stop1219"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1321"
offset="0.073255815"
style="stop-color:#323232;stop-opacity:1.0000000;" />
<stop
id="stop1320"
offset="0.65260679"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1220"
offset="1"
style="stop-color:#fff;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
id="stop1223"
offset="0.0000000"
style="stop-color:#0081ac;stop-opacity:1.0000000;" />
<stop
id="stop1722"
offset="0.50000000"
style="stop-color:#006d91;stop-opacity:0.62745100;" />
<stop
id="stop1224"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
id="stop1274"
offset="0.00000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop1275"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
id="stop1324"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.77685952;" />
<stop
id="stop1325"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
</linearGradient>
<radialGradient
fy="93.75"
fx="303.7037"
r="248.40302"
cy="281.25"
cx="296.2963"
id="radialGradient829"
xlink:href="#linearGradient826"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
id="stop827"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.95294118;" />
<stop
id="stop830"
offset="0.36585677"
style="stop-color:#000000;stop-opacity:0.76078433;" />
<stop
id="stop847"
offset="0.47107276"
style="stop-color:#000000;stop-opacity:0.52941179;" />
<stop
id="stop828"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
y2="-1.7333326"
x2="0.50000000"
y1="0.66667551"
x1="0.50000000"
id="linearGradient907"
xlink:href="#linearGradient909" />
<linearGradient
id="linearGradient909">
<stop
id="stop910"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
<stop
id="stop913"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.17000000;" />
</linearGradient>
<linearGradient
id="linearGradient1309"
xlink:href="#linearGradient1222"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="1365.4825"
x2="64.30938"
y1="1365.4825"
x1="-0.0028122679"
id="linearGradient1308"
xlink:href="#linearGradient2570"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient36867"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36869"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36871"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36873"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36875"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36877"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient36879"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
inkscape:current-layer="layer2"
inkscape:guide-bbox="true"
showguides="true"
inkscape:window-y="105"
inkscape:window-x="410"
inkscape:window-height="687"
inkscape:window-width="764"
inkscape:cy="232.38095"
inkscape:cx="348.40278"
inkscape:zoom="1.05"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
style="display:block"
inkscape:label="Background"
id="layer1"
inkscape:groupmode="layer">
<rect
y="1.8947807e-15"
x="0"
height="120"
width="853.33331"
id="topbluebox"
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt" />
<path
sodipodi:nodetypes="cc"
id="path654"
d="M -0.03652902,117.55657 850.68323,117.34163"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
transform="translate(689.36448,-10.40511)"
id="g1085">
<g
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)"
id="g1394">
<ellipse
style="opacity:0.69398911;fill:url(#radialGradient36867);stroke-width:0.84729707;stroke-dashoffset:0"
id="path898"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
id="ball1"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
style="fill:url(#linearGradient1221)"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
id="g1310">
<path
id="path1278"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
style="fill:url(#linearGradient36869);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1283"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
style="fill:url(#linearGradient36871);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1286"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
style="fill:url(#linearGradient36873);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1295"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
style="fill:url(#linearGradient36875);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1300"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
style="fill:url(#linearGradient36877);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1304"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
style="fill:url(#linearGradient36879);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
id="path1217"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
id="path1269"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1271"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1276"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccczz"
id="path1317"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:label="Title"
id="layer2"
inkscape:groupmode="layer">
<text
id="text48"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:100%;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
y="74.666664"
x="48">
<tspan
x="48"
y="74.666664"
sodipodi:role="line"
id="tspan1508"
style="stroke-width:3.20000017pt">Current Inkscape Architecture</tspan>
</text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:139.99999762%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="57.142857"
y="168.88889"
id="text3025"><tspan
x="57.142857"
y="168.88889"
sodipodi:role="line"
id="tspan3452"
style="stroke-width:1.06666669pt">* Core assumption: This is a Linux GUI Editor _only_</tspan><tspan
x="57.142857"
y="204.72888"
sodipodi:role="line"
id="tspan3454"
style="stroke-width:1.06666669pt"> + Well, plus a GUI viewer, too</tspan><tspan
x="57.142857"
y="240.56888"
sodipodi:role="line"
id="tspan3456"
style="stroke-width:1.06666669pt"> + Well, plus non-GUI cmdline tool, too</tspan><tspan
x="57.142857"
y="276.40887"
sodipodi:role="line"
id="tspan3458"
style="stroke-width:1.06666669pt"> + Well, plus all the above on Windows, too</tspan><tspan
x="57.142857"
y="312.24887"
sodipodi:role="line"
id="tspan3460"
style="stroke-width:1.06666669pt"> + (Architecture has grown organically)</tspan><tspan
x="57.142857"
y="348.0889"
sodipodi:role="line"
id="tspan3462"
style="stroke-width:1.06666669pt" /><tspan
x="57.142857"
y="383.92889"
sodipodi:role="line"
id="tspan3464"
style="stroke-width:1.06666669pt">* Core architecture</tspan><tspan
x="57.142857"
y="419.76889"
sodipodi:role="line"
id="tspan3466"
style="stroke-width:1.06666669pt"> + Gtk::Main - runs program</tspan><tspan
x="57.142857"
y="455.60889"
sodipodi:role="line"
id="tspan3468"
style="stroke-width:1.06666669pt"> + Inkscape::Application - GUI editing mode</tspan><tspan
x="57.142857"
y="491.44888"
sodipodi:role="line"
id="tspan3470"
style="stroke-width:1.06666669pt"> - Contains 'Document's</tspan><tspan
x="57.142857"
y="527.28888"
sodipodi:role="line"
id="tspan3472"
style="stroke-width:1.06666669pt"> - Each Document has one or more 'View's</tspan><tspan
x="57.142857"
y="563.12891"
sodipodi:role="line"
id="tspan3474"
style="stroke-width:1.06666669pt"> - An editable View is called a 'Desktop'</tspan><tspan
x="57.142857"
y="598.96887"
sodipodi:role="line"
id="tspan3476"
style="stroke-width:1.06666669pt"> + Other run modes (inkview, cmdline) handled uniquely</tspan></text>
</g>
<g
inkscape:label="Drawing Area"
id="layer3"
inkscape:groupmode="layer" />
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

View file

@ -0,0 +1,686 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg586"
sodipodi:version="0.32"
inkscape:version="0.92.0 r15304"
width="640pt"
height="480pt"
sodipodi:docname="04-current-main.svg"
version="1.1">
<defs
id="defs588">
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker396"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path397"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker394"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path395"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker391"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path392"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker319"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path320"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="TriangleOutL"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path224"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient2570">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2571" />
<stop
style="stop-color:#000000;stop-opacity:0.62745100;"
offset="0.58504134"
id="stop2572" />
<stop
style="stop-color:#ffffff;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop2573" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1218"
id="linearGradient1322"
x1="77.599106"
y1="20.687101"
x2="53.030737"
y2="114.57422"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1318"
x1="59.491886"
y1="30.563196"
x2="33.266399"
y2="58.199241"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1307"
x1="0.45376351"
y1="1.9347328"
x2="0.41986585"
y2="0.12454049"
gradientTransform="scale(1.004208,0.995809)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1306"
x1="0.45009527"
y1="1.9667202"
x2="0.41548476"
y2="0.11846013"
gradientTransform="scale(1.006361,0.993679)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1305"
x1="0.45839140"
y1="1.8676205"
x2="0.42603236"
y2="0.13959341"
gradientTransform="scale(1.002016,0.997989)" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1277"
x1="11.967844"
y1="119.11808"
x2="51.413385"
y2="80.482086"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1272"
x1="118.66497"
y1="45.70058"
x2="90.28563"
y2="62.493129"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1270" />
<linearGradient
xlink:href="#linearGradient1323"
id="linearGradient1231"
x1="17.696665"
y1="120.74315"
x2="94.698939"
y2="120.74315"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1221"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1219" />
<stop
style="stop-color:#323232;stop-opacity:1.0000000;"
offset="0.073255815"
id="stop1321" />
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.65260679"
id="stop1320" />
<stop
style="stop-color:#fff;stop-opacity:1;"
offset="1"
id="stop1220" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
style="stop-color:#0081ac;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop1223" />
<stop
style="stop-color:#006d91;stop-opacity:0.62745100;"
offset="0.50000000"
id="stop1722" />
<stop
style="stop-color:#000000;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop1224" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1274" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1275" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
style="stop-color:#000000;stop-opacity:0.77685952;"
offset="0.00000000"
id="stop1324" />
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1325" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient826"
id="radialGradient829"
cx="296.2963"
cy="281.25"
r="248.40302"
fx="303.7037"
fy="93.75"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
style="stop-color:#000000;stop-opacity:0.95294118;"
offset="0.00000000"
id="stop827" />
<stop
style="stop-color:#000000;stop-opacity:0.76078433;"
offset="0.36585677"
id="stop830" />
<stop
style="stop-color:#000000;stop-opacity:0.52941179;"
offset="0.47107276"
id="stop847" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop828" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient909"
id="linearGradient907"
x1="0.50000000"
y1="0.66667551"
x2="0.50000000"
y2="-1.7333326" />
<linearGradient
id="linearGradient909">
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="0.00000000"
id="stop910" />
<stop
style="stop-color:#000000;stop-opacity:0.17000000;"
offset="1.0000000"
id="stop913" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1309"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient2570"
id="linearGradient1308"
x1="-0.0028122679"
y1="1365.4825"
x2="64.30938"
y2="1365.4825"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient37145"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient37147"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient37149"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient37151"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient37153"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient37155"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient37157"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.70710678"
inkscape:cx="372.43198"
inkscape:cy="354.2857"
inkscape:window-width="968"
inkscape:window-height="821"
inkscape:window-x="133"
inkscape:window-y="71"
showguides="true"
inkscape:guide-bbox="true"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Background"
style="display:block">
<rect
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt"
id="topbluebox"
width="853.33331"
height="120"
x="0"
y="1.8947807e-15" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M -0.03652902,117.55657 850.68323,117.34163"
id="path654"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<g
id="g1085"
transform="translate(689.36448,-10.40511)">
<g
id="g1394"
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)">
<ellipse
id="path898"
style="opacity:0.69398911;fill:url(#radialGradient37145);stroke-width:0.84729707;stroke-dashoffset:0"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
id="ball1"
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
id="g1310"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
style="fill:url(#linearGradient1221)">
<path
style="fill:url(#linearGradient37147);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
id="path1278"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient37149);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
id="path1283"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient37151);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
id="path1286"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient37153);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
id="path1295"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient37155);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
id="path1300"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient37157);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
id="path1304"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
id="path1217"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
id="path1269"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
id="path1271"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
id="path1276"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
id="path1317"
sodipodi:nodetypes="ccccccccccczz"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Title">
<text
x="48"
y="74.666664"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:100%;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text48">
<tspan
id="tspan415"
sodipodi:role="line"
y="74.666664"
x="48"
style="stroke-width:3.20000017pt">main() Process Flow</tspan>
</text>
<rect
y="176.8922"
x="325.83481"
height="70.899239"
width="150.84944"
id="rect1"
style="color:#000000;visibility:visible;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
<text
id="text74"
y="220.63853"
x="356.0047"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:100%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
y="220.63853"
x="356.0047"
id="tspan75"
sodipodi:role="line"
style="stroke-width:1.06666669pt">main()</tspan></text>
<text
id="text77"
y="256.08817"
x="641.11017"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:100%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan150"
sodipodi:role="line"
y="256.08817"
x="641.11017"
style="stroke-width:1.06666669pt">WinMain()</tspan></text>
<rect
y="207.06209"
x="606.41479"
height="85.984169"
width="197.61299"
id="rect79"
style="color:#000000;visibility:visible;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.33333333, 5.33333333;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
<path
sodipodi:nodetypes="cc"
id="path151"
d="M 609.43177,249.29994 484.22673,213.09606"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.33333333, 5.33333333;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutL)"
inkscape:connector-curvature="0" />
<rect
y="330.00439"
x="27.152899"
height="70.899239"
width="297.1734"
id="rect311"
style="color:#000000;visibility:visible;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
<text
id="text312"
y="373.7507"
x="57.322788"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:100%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan317"
sodipodi:role="line"
y="373.7507"
x="57.322788"
style="stroke-width:1.06666669pt">sp_main_console()</tspan></text>
<rect
y="330.00439"
x="469.14175"
height="70.899239"
width="238.34212"
id="rect314"
style="color:#000000;visibility:visible;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
<text
id="text315"
y="373.75076"
x="499.31165"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:100%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan318"
sodipodi:role="line"
y="373.75076"
x="499.31165"
style="stroke-width:1.06666669pt">sp_main_gui()</tspan></text>
<path
sodipodi:nodetypes="cc"
id="path321"
d="m 367.3184,247.79143 -99.56063,73.91623"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutL)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path393"
d="m 443.49739,248.5457 99.56063,73.91622"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutL)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path400"
d="m 480.07836,401.24433 -99.56063,73.91622"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutL)"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
id="path401"
d="m 559.27433,400.49009 99.56062,73.91622"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#TriangleOutL)"
inkscape:connector-curvature="0" />
<rect
y="483.83582"
x="72.40773"
height="128.22203"
width="383.15768"
id="rect402"
style="color:#000000;visibility:visible;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
<text
id="text403"
y="527.58215"
x="103.88267"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:150%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan420"
sodipodi:role="line"
y="527.58215"
x="103.88267"
style="stroke-width:1.06666669pt">slideshow mode</tspan><tspan
id="tspan421"
sodipodi:role="line"
y="565.98218"
x="103.88267"
style="stroke-width:1.06666669pt">sp_slideshow_new(files)</tspan></text>
<rect
y="483.83582"
x="507.71597"
height="126.71353"
width="291.13947"
id="rect408"
style="color:#000000;visibility:visible;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
<text
id="text409"
y="527.58215"
x="536.29291"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:150%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan418"
sodipodi:role="line"
y="527.58215"
x="536.29291"
style="stroke-width:1.06666669pt">editor mode</tspan><tspan
id="tspan419"
sodipodi:role="line"
y="565.98218"
x="536.29291"
style="stroke-width:1.06666669pt">sp_file_open(files)</tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Drawing Area" />
</svg>

After

Width:  |  Height:  |  Size: 46 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 70 KiB

View file

@ -0,0 +1,785 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="06-current-desktop-view.svg"
height="480pt"
width="640pt"
inkscape:version="0.92.0 r15304"
sodipodi:version="0.32"
id="svg586"
version="1.1">
<defs
id="defs588">
<marker
style="overflow:visible;"
id="marker791"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path792"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker719"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path720"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker717"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleInL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
id="path718"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker714"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path715"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker712"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleInL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
id="path713"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker709"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path710"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker707"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleInL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
id="path708"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker704"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path705"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker702"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleInL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
id="path703"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="TriangleOutL"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path2817"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="TriangleInL"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleInL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
id="path2823"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="Arrow2L"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2L">
<path
d="M 4.363143,4.732916 -8.456553,0.01878889 4.3631437,-4.6953372 c -2.0480514,2.7832182 -2.0362505,6.5911436 -7e-7,9.4282532 z"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.73333335;stroke-linejoin:round"
id="path2863"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient2570">
<stop
id="stop2571"
offset="0.0000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop2572"
offset="0.58504134"
style="stop-color:#000000;stop-opacity:0.62745100;" />
<stop
id="stop2573"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
y2="114.57422"
x2="53.030737"
y1="20.687101"
x1="77.599106"
id="linearGradient1322"
xlink:href="#linearGradient1218"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="58.199241"
x2="33.266399"
y1="30.563196"
x1="59.491886"
id="linearGradient1318"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
gradientTransform="scale(1.004208,0.995809)"
y2="0.12454049"
x2="0.41986585"
y1="1.9347328"
x1="0.45376351"
id="linearGradient1307"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.006361,0.993679)"
y2="0.11846013"
x2="0.41548476"
y1="1.9667202"
x1="0.45009527"
id="linearGradient1306"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.002016,0.997989)"
y2="0.13959341"
x2="0.42603236"
y1="1.8676205"
x1="0.45839140"
id="linearGradient1305"
xlink:href="#linearGradient1222" />
<linearGradient
y2="80.482086"
x2="51.413385"
y1="119.11808"
x1="11.967844"
id="linearGradient1277"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="62.493129"
x2="90.28563"
y1="45.70058"
x1="118.66497"
id="linearGradient1272"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1270"
xlink:href="#linearGradient1222" />
<linearGradient
y2="120.74315"
x2="94.698939"
y1="120.74315"
x1="17.696665"
id="linearGradient1231"
xlink:href="#linearGradient1323"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="28.120696"
x2="130.70353"
y1="170.27164"
x1="27.318817"
id="linearGradient1221"
xlink:href="#linearGradient1222"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
id="stop1219"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1321"
offset="0.073255815"
style="stop-color:#323232;stop-opacity:1.0000000;" />
<stop
id="stop1320"
offset="0.65260679"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1220"
offset="1"
style="stop-color:#fff;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
id="stop1223"
offset="0.0000000"
style="stop-color:#0081ac;stop-opacity:1.0000000;" />
<stop
id="stop1722"
offset="0.50000000"
style="stop-color:#006d91;stop-opacity:0.62745100;" />
<stop
id="stop1224"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
id="stop1274"
offset="0.00000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop1275"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
id="stop1324"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.77685952;" />
<stop
id="stop1325"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
</linearGradient>
<radialGradient
fy="93.75"
fx="303.7037"
r="248.40302"
cy="281.25"
cx="296.2963"
id="radialGradient829"
xlink:href="#linearGradient826"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
id="stop827"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.95294118;" />
<stop
id="stop830"
offset="0.36585677"
style="stop-color:#000000;stop-opacity:0.76078433;" />
<stop
id="stop847"
offset="0.47107276"
style="stop-color:#000000;stop-opacity:0.52941179;" />
<stop
id="stop828"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
y2="-1.7333326"
x2="0.50000000"
y1="0.66667551"
x1="0.50000000"
id="linearGradient907"
xlink:href="#linearGradient909" />
<linearGradient
id="linearGradient909">
<stop
id="stop910"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
<stop
id="stop913"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.17000000;" />
</linearGradient>
<linearGradient
id="linearGradient1309"
xlink:href="#linearGradient1222"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="1365.4825"
x2="64.30938"
y1="1365.4825"
x1="-0.0028122679"
id="linearGradient1308"
xlink:href="#linearGradient2570"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient38209"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38211"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38213"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38215"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38217"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38219"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38221"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
inkscape:grid-bbox="true"
inkscape:grid-points="true"
gridtolerance="50.000000pt"
inkscape:guide-points="true"
showgrid="true"
inkscape:current-layer="layer2"
inkscape:guide-bbox="false"
showguides="true"
inkscape:window-y="105"
inkscape:window-x="190"
inkscape:window-height="845"
inkscape:window-width="984"
inkscape:cy="320"
inkscape:cx="426.66667"
inkscape:zoom="0.978125"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:window-maximized="0">
<inkscape:grid
id="GridFromPre046Settings"
type="xygrid"
originx="0"
originy="0"
spacingx="7.1111111"
spacingy="7.1111111"
color="#3f3fff"
empcolor="#3f3fff"
opacity="0.15"
empopacity="0.38"
empspacing="5" />
</sodipodi:namedview>
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
style="display:block"
inkscape:label="Background"
id="layer1"
inkscape:groupmode="layer">
<rect
y="1.8947807e-15"
x="0"
height="120"
width="853.33331"
id="topbluebox"
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt" />
<path
sodipodi:nodetypes="cc"
id="path654"
d="M -0.03652902,117.55657 850.68323,117.34163"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
transform="translate(689.36448,-10.40511)"
id="g1085">
<g
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)"
id="g1394">
<ellipse
style="opacity:0.69398911;fill:url(#radialGradient38209);stroke-width:0.84729707;stroke-dashoffset:0"
id="path898"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
id="ball1"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
style="fill:url(#linearGradient1221)"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
id="g1310">
<path
id="path1278"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
style="fill:url(#linearGradient38211);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1283"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
style="fill:url(#linearGradient38213);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1286"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
style="fill:url(#linearGradient38215);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1295"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
style="fill:url(#linearGradient38217);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1300"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
style="fill:url(#linearGradient38219);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1304"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
style="fill:url(#linearGradient38221);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
id="path1217"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
id="path1269"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1271"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1276"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccczz"
id="path1317"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:label="Title"
id="layer2"
inkscape:groupmode="layer">
<text
id="text48"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:100%;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
y="74.666664"
x="48">
<tspan
x="48"
y="74.666664"
sodipodi:role="line"
id="tspan1"
style="stroke-width:3.20000017pt">Views and Desktops</tspan>
</text>
<rect
rx="25.859905"
ry="25.859905"
y="373.33334"
x="34.35228"
height="83.326271"
width="100.56628"
id="rect153"
style="color:#000000;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
<text
id="text803"
y="420.35898"
x="44.791668"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.20000076px;line-height:100%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan804"
sodipodi:role="line"
y="420.35898"
x="44.791668"
style="stroke-width:1.06666669pt">Desktop</tspan></text>
<rect
rx="25.859905"
ry="25.859905"
y="140.89519"
x="34.35228"
height="83.326271"
width="100.56628"
id="rect2"
style="color:#000000;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
<text
id="text3"
y="189.463"
x="62.172916"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.20000076px;line-height:100%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
x="62.172916"
y="189.463"
sodipodi:role="line"
id="tspan5"
style="stroke-width:1.06666669pt">View</tspan></text>
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.33333337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;marker-end:url(#TriangleOutL)"
d="M 80.253968,224.50794 80,373.33333"
id="path6"
inkscape:connector-curvature="0" />
<text
id="text80"
y="186.42291"
x="199.75626"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.20000076px;line-height:120.00000477%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
x="199.75626"
y="186.42291"
sodipodi:role="line"
id="tspan82"
style="stroke-width:1.06666669pt">SPView</tspan><tspan
x="199.75626"
y="209.46292"
sodipodi:role="line"
id="tspan83"
style="stroke-width:1.06666669pt"> - Base class for SVG views</tspan><tspan
x="199.75626"
y="232.50291"
sodipodi:role="line"
id="tspan84"
style="stroke-width:1.06666669pt"> - Has a pointer to a doc (SPDocument)</tspan><tspan
x="199.75626"
y="255.54292"
sodipodi:role="line"
id="tspan85"
style="stroke-width:1.06666669pt"> - Contains message stack and message context</tspan><tspan
x="199.75626"
y="278.58292"
sodipodi:role="line"
id="tspan86"
style="stroke-width:1.06666669pt"> - Handles status messages</tspan><tspan
x="199.75626"
y="301.62292"
sodipodi:role="line"
id="tspan87"
style="stroke-width:1.06666669pt"> - Handles redrawing screen</tspan><tspan
x="199.75626"
y="324.66293"
sodipodi:role="line"
id="tspan88"
style="stroke-width:1.06666669pt"> - Emits signals on view changes</tspan><tspan
x="199.75626"
y="347.70291"
sodipodi:role="line"
id="tspan89"
style="stroke-width:1.06666669pt"> - Provides sp_desktop_widget_new()</tspan></text>
<text
id="text90"
y="420.87918"
x="199.05313"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.20000076px;line-height:120.00000477%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
x="199.05313"
y="420.87918"
sodipodi:role="line"
id="tspan106"
style="stroke-width:1.06666669pt">SPDesktop</tspan><tspan
x="199.05313"
y="443.91919"
sodipodi:role="line"
id="tspan107"
style="stroke-width:1.06666669pt"> - Subclass of SPView</tspan><tspan
x="199.05313"
y="466.9592"
sodipodi:role="line"
id="tspan108"
style="stroke-width:1.06666669pt"> - Implements an &quot;Editable view&quot;</tspan><tspan
x="199.05313"
y="489.99918"
sodipodi:role="line"
id="tspan109"
style="stroke-width:1.06666669pt"> - Holds pointer to Inkscape::Application</tspan><tspan
x="199.05313"
y="513.03918"
sodipodi:role="line"
id="tspan110"
style="stroke-width:1.06666669pt"> - Contains scrollbar, ruler, canvas, guides, etc.</tspan><tspan
x="199.05313"
y="536.07916"
sodipodi:role="line"
id="tspan111"
style="stroke-width:1.06666669pt"> - Defines scroll limits, zoom min/max, fullscreen</tspan><tspan
x="199.05313"
y="559.1192"
sodipodi:role="line"
id="tspan112"
style="stroke-width:1.06666669pt"> - Manages event contexts, coordinate systems, zooming, etc.</tspan></text>
</g>
<g
inkscape:label="Drawing Area"
id="layer3"
inkscape:groupmode="layer" />
</svg>

After

Width:  |  Height:  |  Size: 47 KiB

View file

@ -0,0 +1,729 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg586"
sodipodi:version="0.32"
inkscape:version="0.92.0 r15304"
width="640pt"
height="480pt"
sodipodi:docname="07-current-problems.svg"
version="1.1">
<defs
id="defs588">
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker791"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path792"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker719"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path720"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker717"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path718"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker714"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path715"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker712"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path713"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker709"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path710"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker707"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path708"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker704"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path705"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker702"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path703"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="TriangleOutL"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path2817"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInL"
orient="auto"
refY="0.0"
refX="0.0"
id="TriangleInL"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path2823"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2L"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2L"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path2863"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.73333335;stroke-linejoin:round"
d="M 4.363143,4.732916 -8.456553,0.01878889 4.3631437,-4.6953372 c -2.0480514,2.7832182 -2.0362505,6.5911436 -7e-7,9.4282532 z"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient2570">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2571" />
<stop
style="stop-color:#000000;stop-opacity:0.62745100;"
offset="0.58504134"
id="stop2572" />
<stop
style="stop-color:#ffffff;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop2573" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1218"
id="linearGradient1322"
x1="77.599106"
y1="20.687101"
x2="53.030737"
y2="114.57422"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1318"
x1="59.491886"
y1="30.563196"
x2="33.266399"
y2="58.199241"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1307"
x1="0.45376351"
y1="1.9347328"
x2="0.41986585"
y2="0.12454049"
gradientTransform="scale(1.004208,0.995809)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1306"
x1="0.45009527"
y1="1.9667202"
x2="0.41548476"
y2="0.11846013"
gradientTransform="scale(1.006361,0.993679)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1305"
x1="0.45839140"
y1="1.8676205"
x2="0.42603236"
y2="0.13959341"
gradientTransform="scale(1.002016,0.997989)" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1277"
x1="11.967844"
y1="119.11808"
x2="51.413385"
y2="80.482086"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1272"
x1="118.66497"
y1="45.70058"
x2="90.28563"
y2="62.493129"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1270" />
<linearGradient
xlink:href="#linearGradient1323"
id="linearGradient1231"
x1="17.696665"
y1="120.74315"
x2="94.698939"
y2="120.74315"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1221"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1219" />
<stop
style="stop-color:#323232;stop-opacity:1.0000000;"
offset="0.073255815"
id="stop1321" />
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.65260679"
id="stop1320" />
<stop
style="stop-color:#fff;stop-opacity:1;"
offset="1"
id="stop1220" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
style="stop-color:#0081ac;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop1223" />
<stop
style="stop-color:#006d91;stop-opacity:0.62745100;"
offset="0.50000000"
id="stop1722" />
<stop
style="stop-color:#000000;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop1224" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1274" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1275" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
style="stop-color:#000000;stop-opacity:0.77685952;"
offset="0.00000000"
id="stop1324" />
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1325" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient826"
id="radialGradient829"
cx="296.2963"
cy="281.25"
r="248.40302"
fx="303.7037"
fy="93.75"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
style="stop-color:#000000;stop-opacity:0.95294118;"
offset="0.00000000"
id="stop827" />
<stop
style="stop-color:#000000;stop-opacity:0.76078433;"
offset="0.36585677"
id="stop830" />
<stop
style="stop-color:#000000;stop-opacity:0.52941179;"
offset="0.47107276"
id="stop847" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop828" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient909"
id="linearGradient907"
x1="0.50000000"
y1="0.66667551"
x2="0.50000000"
y2="-1.7333326" />
<linearGradient
id="linearGradient909">
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="0.00000000"
id="stop910" />
<stop
style="stop-color:#000000;stop-opacity:0.17000000;"
offset="1.0000000"
id="stop913" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1309"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient2570"
id="linearGradient1308"
x1="-0.0028122679"
y1="1365.4825"
x2="64.30938"
y2="1365.4825"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient38495"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38497"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38499"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38501"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38503"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38505"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38507"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.978125"
inkscape:cx="426.66667"
inkscape:cy="320"
inkscape:window-width="984"
inkscape:window-height="845"
inkscape:window-x="190"
inkscape:window-y="105"
showguides="true"
inkscape:guide-bbox="false"
inkscape:current-layer="layer2"
showgrid="true"
inkscape:guide-points="true"
gridtolerance="50.000000pt"
inkscape:grid-points="true"
inkscape:grid-bbox="true"
inkscape:window-maximized="0">
<inkscape:grid
id="GridFromPre046Settings"
type="xygrid"
originx="0"
originy="0"
spacingx="7.1111111"
spacingy="7.1111111"
color="#3f3fff"
empcolor="#3f3fff"
opacity="0.15"
empopacity="0.38"
empspacing="5" />
</sodipodi:namedview>
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Background"
style="display:block">
<rect
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt"
id="topbluebox"
width="853.33331"
height="120"
x="0"
y="1.8947807e-15" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M -0.03652902,117.55657 850.68323,117.34163"
id="path654"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<g
id="g1085"
transform="translate(689.36448,-10.40511)">
<g
id="g1394"
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)">
<ellipse
id="path898"
style="opacity:0.69398911;fill:url(#radialGradient38495);stroke-width:0.84729707;stroke-dashoffset:0"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
id="ball1"
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
id="g1310"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
style="fill:url(#linearGradient1221)">
<path
style="fill:url(#linearGradient38497);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
id="path1278"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38499);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
id="path1283"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38501);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
id="path1286"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38503);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
id="path1295"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38505);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
id="path1300"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38507);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
id="path1304"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
id="path1217"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
id="path1269"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
id="path1271"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
id="path1276"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
id="path1317"
sodipodi:nodetypes="ccccccccccczz"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Title">
<text
x="48"
y="74.666664"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:100%;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text48">
<tspan
x="48"
y="74.666664"
sodipodi:role="line"
id="tspan1"
style="stroke-width:3.20000017pt">Problems</tspan>
</text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.20000076px;line-height:120.00000477%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="39.053123"
y="188.08769"
id="text80"><tspan
id="tspan16"
sodipodi:role="line"
y="188.08769"
x="39.053123"
style="stroke-width:1.06666669pt">* Inkscape seems to want to have &quot;run modes&quot;</tspan><tspan
id="tspan17"
sodipodi:role="line"
y="211.1277"
x="39.053123"
style="stroke-width:1.06666669pt"> + editor, viewer, cmdline, more...?</tspan><tspan
id="tspan18"
sodipodi:role="line"
y="234.16769"
x="39.053123"
style="stroke-width:1.06666669pt"> + If we needed a new mode, it would be hard to fit in except as hacks</tspan><tspan
id="tspan19"
sodipodi:role="line"
y="257.2077"
x="39.053123"
style="stroke-width:1.06666669pt"> + Currently, these modes implemented as exceptions, but it's buggy</tspan><tspan
id="tspan20"
sodipodi:role="line"
y="280.24771"
x="39.053123"
style="stroke-width:1.06666669pt"> - popping up warning dialogs in cmdline mode</tspan><tspan
id="tspan21"
sodipodi:role="line"
y="303.28769"
x="39.053123"
style="stroke-width:1.06666669pt"> - inconsistent URI / UTF handling</tspan><tspan
id="tspan22"
sodipodi:role="line"
y="326.3277"
x="39.053123"
style="stroke-width:1.06666669pt"> - duplication of code for different modes may lead to divergences</tspan><tspan
id="tspan23"
sodipodi:role="line"
y="349.36771"
x="39.053123"
style="stroke-width:1.06666669pt" /><tspan
id="tspan24"
sodipodi:role="line"
y="372.40771"
x="39.053123"
style="stroke-width:1.06666669pt">* main() has too much code in it (&gt;750 lines)</tspan><tspan
id="tspan25"
sodipodi:role="line"
y="395.44772"
x="39.053123"
style="stroke-width:1.06666669pt"> + cmdline handling code needs broken out separately</tspan><tspan
id="tspan26"
sodipodi:role="line"
y="418.4877"
x="39.053123"
style="stroke-width:1.06666669pt" /><tspan
id="tspan27"
sodipodi:role="line"
y="441.52771"
x="39.053123"
style="stroke-width:1.06666669pt">* winmain() is not well integrated (Q's listed in makefiles)</tspan><tspan
id="tspan28"
sodipodi:role="line"
y="464.56772"
x="39.053123"
style="stroke-width:1.06666669pt" /><tspan
id="tspan29"
sodipodi:role="line"
y="487.60773"
x="39.053123"
style="stroke-width:1.06666669pt">* Current architecture is C / Gtk+; we need C++ / Gtkmm</tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Drawing Area" />
</svg>

After

Width:  |  Height:  |  Size: 44 KiB

View file

@ -0,0 +1,576 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg586"
sodipodi:version="0.32"
inkscape:version="0.92.0 r15304"
width="640pt"
height="480pt"
sodipodi:docname="08-inkscape-gtkmm.svg"
version="1.1">
<defs
id="defs588">
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="TriangleOutL"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path2817"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInL"
orient="auto"
refY="0.0"
refX="0.0"
id="TriangleInL"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path2823"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2L"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow2L"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path2863"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.73333335;stroke-linejoin:round"
d="M 4.363143,4.732916 -8.456553,0.01878889 4.3631437,-4.6953372 c -2.0480514,2.7832182 -2.0362505,6.5911436 -7e-7,9.4282532 z"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient2570">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2571" />
<stop
style="stop-color:#000000;stop-opacity:0.62745100;"
offset="0.58504134"
id="stop2572" />
<stop
style="stop-color:#ffffff;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop2573" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1218"
id="linearGradient1322"
x1="77.599106"
y1="20.687101"
x2="53.030737"
y2="114.57422"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1318"
x1="59.491886"
y1="30.563196"
x2="33.266399"
y2="58.199241"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1307"
x1="0.45376351"
y1="1.9347328"
x2="0.41986585"
y2="0.12454049"
gradientTransform="scale(1.004208,0.995809)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1306"
x1="0.45009527"
y1="1.9667202"
x2="0.41548476"
y2="0.11846013"
gradientTransform="scale(1.006361,0.993679)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1305"
x1="0.45839140"
y1="1.8676205"
x2="0.42603236"
y2="0.13959341"
gradientTransform="scale(1.002016,0.997989)" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1277"
x1="11.967844"
y1="119.11808"
x2="51.413385"
y2="80.482086"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1272"
x1="118.66497"
y1="45.70058"
x2="90.28563"
y2="62.493129"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1270" />
<linearGradient
xlink:href="#linearGradient1323"
id="linearGradient1231"
x1="17.696665"
y1="120.74315"
x2="94.698939"
y2="120.74315"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1221"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1219" />
<stop
style="stop-color:#323232;stop-opacity:1.0000000;"
offset="0.073255815"
id="stop1321" />
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.65260679"
id="stop1320" />
<stop
style="stop-color:#fff;stop-opacity:1;"
offset="1"
id="stop1220" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
style="stop-color:#0081ac;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop1223" />
<stop
style="stop-color:#006d91;stop-opacity:0.62745100;"
offset="0.50000000"
id="stop1722" />
<stop
style="stop-color:#000000;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop1224" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1274" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1275" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
style="stop-color:#000000;stop-opacity:0.77685952;"
offset="0.00000000"
id="stop1324" />
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1325" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient826"
id="radialGradient829"
cx="296.2963"
cy="281.25"
r="248.40302"
fx="303.7037"
fy="93.75"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
style="stop-color:#000000;stop-opacity:0.95294118;"
offset="0.00000000"
id="stop827" />
<stop
style="stop-color:#000000;stop-opacity:0.76078433;"
offset="0.36585677"
id="stop830" />
<stop
style="stop-color:#000000;stop-opacity:0.52941179;"
offset="0.47107276"
id="stop847" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop828" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient909"
id="linearGradient907"
x1="0.50000000"
y1="0.66667551"
x2="0.50000000"
y2="-1.7333326" />
<linearGradient
id="linearGradient909">
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="0.00000000"
id="stop910" />
<stop
style="stop-color:#000000;stop-opacity:0.17000000;"
offset="1.0000000"
id="stop913" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1309"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient2570"
id="linearGradient1308"
x1="-0.0028122679"
y1="1365.4825"
x2="64.30938"
y2="1365.4825"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient38856"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38858"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38860"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38862"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38864"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38866"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient38868"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.9390625"
inkscape:cx="426.66667"
inkscape:cy="320"
inkscape:window-width="973"
inkscape:window-height="820"
inkscape:window-x="293"
inkscape:window-y="105"
showguides="true"
inkscape:guide-bbox="true"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Background"
style="display:block">
<rect
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt"
id="topbluebox"
width="853.33331"
height="120"
x="0"
y="1.8947807e-15" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M -0.03652902,117.55657 850.68323,117.34163"
id="path654"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<g
id="g1085"
transform="translate(689.36448,-10.40511)">
<g
id="g1394"
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)">
<ellipse
id="path898"
style="opacity:0.69398911;fill:url(#radialGradient38856);stroke-width:0.84729707;stroke-dashoffset:0"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
id="ball1"
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
id="g1310"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
style="fill:url(#linearGradient1221)">
<path
style="fill:url(#linearGradient38858);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
id="path1278"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38860);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
id="path1283"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38862);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
id="path1286"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38864);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
id="path1295"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38866);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
id="path1300"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient38868);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
id="path1304"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
id="path1217"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
id="path1269"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
id="path1271"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
id="path1276"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
id="path1317"
sodipodi:nodetypes="ccccccccccczz"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Title">
<text
x="48"
y="74.666664"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:100%;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text48">
<tspan
id="tspan1"
sodipodi:role="line"
y="74.666664"
x="48"
style="stroke-width:3.20000017pt">inkscape_gtkmm Architecture</tspan>
</text>
<text
id="text3025"
y="168.88889"
x="57.142857"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:139.99999762%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan68"
sodipodi:role="line"
y="168.88889"
x="57.142857"
style="stroke-width:1.06666669pt">* Very much a work-in-progress</tspan><tspan
id="tspan69"
sodipodi:role="line"
y="204.72888"
x="57.142857"
style="stroke-width:1.06666669pt"> + top level architecture still incomplete</tspan><tspan
id="tspan70"
sodipodi:role="line"
y="240.56888"
x="57.142857"
style="stroke-width:1.06666669pt" /><tspan
id="tspan71"
sodipodi:role="line"
y="276.40887"
x="57.142857"
style="stroke-width:1.06666669pt">* Inkscape::Application</tspan><tspan
id="tspan72"
sodipodi:role="line"
y="312.24887"
x="57.142857"
style="stroke-width:1.06666669pt"> + Modelled after current Inkscape::Application struct</tspan><tspan
id="tspan73"
sodipodi:role="line"
y="348.0889"
x="57.142857"
style="stroke-width:1.06666669pt"> + Inkscape::ApplicationImpl allows 'interface hiding'</tspan><tspan
id="tspan74"
sodipodi:role="line"
y="383.92889"
x="57.142857"
style="stroke-width:1.06666669pt"> - Helps keep *.h include hierarchy trim and clean</tspan><tspan
id="tspan75"
sodipodi:role="line"
y="419.76889"
x="57.142857"
style="stroke-width:1.06666669pt"> - Subclasses Gtk::Window</tspan><tspan
id="tspan76"
sodipodi:role="line"
y="455.60889"
x="57.142857"
style="stroke-width:1.06666669pt"> !! problem, only one Window per application</tspan><tspan
id="tspan77"
sodipodi:role="line"
y="491.44888"
x="57.142857"
style="stroke-width:1.06666669pt"> - No code for creating/managing documents</tspan><tspan
id="tspan78"
sodipodi:role="line"
y="527.28888"
x="57.142857"
style="stroke-width:1.06666669pt" /><tspan
id="tspan79"
sodipodi:role="line"
y="563.12891"
x="57.142857"
style="stroke-width:1.06666669pt" /></text>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Drawing Area" />
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

View file

@ -0,0 +1,591 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="09-future-capabilities.svg"
height="480pt"
width="640pt"
inkscape:version="0.92.0 r15304"
sodipodi:version="0.32"
id="svg586"
version="1.1">
<defs
id="defs588">
<marker
style="overflow:visible;"
id="TriangleOutL"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path2817"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="TriangleInL"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleInL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M -4.9237333,0 2.4576,-4.2666667 v 8.5333334 z"
id="path2823"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="Arrow2L"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2L">
<path
d="M 4.363143,4.732916 -8.456553,0.01878889 4.3631437,-4.6953372 c -2.0480514,2.7832182 -2.0362505,6.5911436 -7e-7,9.4282532 z"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.73333335;stroke-linejoin:round"
id="path2863"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient2570">
<stop
id="stop2571"
offset="0.0000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop2572"
offset="0.58504134"
style="stop-color:#000000;stop-opacity:0.62745100;" />
<stop
id="stop2573"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
y2="114.57422"
x2="53.030737"
y1="20.687101"
x1="77.599106"
id="linearGradient1322"
xlink:href="#linearGradient1218"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="58.199241"
x2="33.266399"
y1="30.563196"
x1="59.491886"
id="linearGradient1318"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
gradientTransform="scale(1.004208,0.995809)"
y2="0.12454049"
x2="0.41986585"
y1="1.9347328"
x1="0.45376351"
id="linearGradient1307"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.006361,0.993679)"
y2="0.11846013"
x2="0.41548476"
y1="1.9667202"
x1="0.45009527"
id="linearGradient1306"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.002016,0.997989)"
y2="0.13959341"
x2="0.42603236"
y1="1.8676205"
x1="0.45839140"
id="linearGradient1305"
xlink:href="#linearGradient1222" />
<linearGradient
y2="80.482086"
x2="51.413385"
y1="119.11808"
x1="11.967844"
id="linearGradient1277"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="62.493129"
x2="90.28563"
y1="45.70058"
x1="118.66497"
id="linearGradient1272"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1270"
xlink:href="#linearGradient1222" />
<linearGradient
y2="120.74315"
x2="94.698939"
y1="120.74315"
x1="17.696665"
id="linearGradient1231"
xlink:href="#linearGradient1323"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="28.120696"
x2="130.70353"
y1="170.27164"
x1="27.318817"
id="linearGradient1221"
xlink:href="#linearGradient1222"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
id="stop1219"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1321"
offset="0.073255815"
style="stop-color:#323232;stop-opacity:1.0000000;" />
<stop
id="stop1320"
offset="0.65260679"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1220"
offset="1"
style="stop-color:#fff;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
id="stop1223"
offset="0.0000000"
style="stop-color:#0081ac;stop-opacity:1.0000000;" />
<stop
id="stop1722"
offset="0.50000000"
style="stop-color:#006d91;stop-opacity:0.62745100;" />
<stop
id="stop1224"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
id="stop1274"
offset="0.00000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop1275"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
id="stop1324"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.77685952;" />
<stop
id="stop1325"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
</linearGradient>
<radialGradient
fy="93.75"
fx="303.7037"
r="248.40302"
cy="281.25"
cx="296.2963"
id="radialGradient829"
xlink:href="#linearGradient826"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
id="stop827"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.95294118;" />
<stop
id="stop830"
offset="0.36585677"
style="stop-color:#000000;stop-opacity:0.76078433;" />
<stop
id="stop847"
offset="0.47107276"
style="stop-color:#000000;stop-opacity:0.52941179;" />
<stop
id="stop828"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
y2="-1.7333326"
x2="0.50000000"
y1="0.66667551"
x1="0.50000000"
id="linearGradient907"
xlink:href="#linearGradient909" />
<linearGradient
id="linearGradient909">
<stop
id="stop910"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
<stop
id="stop913"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.17000000;" />
</linearGradient>
<linearGradient
id="linearGradient1309"
xlink:href="#linearGradient1222"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="1365.4825"
x2="64.30938"
y1="1365.4825"
x1="-0.0028122679"
id="linearGradient1308"
xlink:href="#linearGradient2570"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient39108"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39110"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39112"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39114"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39116"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39118"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39120"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
inkscape:current-layer="layer2"
inkscape:guide-bbox="true"
showguides="true"
inkscape:window-y="105"
inkscape:window-x="293"
inkscape:window-height="820"
inkscape:window-width="973"
inkscape:cy="320"
inkscape:cx="426.66667"
inkscape:zoom="0.9390625"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
style="display:block"
inkscape:label="Background"
id="layer1"
inkscape:groupmode="layer">
<rect
y="1.8947807e-15"
x="0"
height="120"
width="853.33331"
id="topbluebox"
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt" />
<path
sodipodi:nodetypes="cc"
id="path654"
d="M -0.03652902,117.55657 850.68323,117.34163"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
transform="translate(689.36448,-10.40511)"
id="g1085">
<g
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)"
id="g1394">
<ellipse
style="opacity:0.69398911;fill:url(#radialGradient39108);stroke-width:0.84729707;stroke-dashoffset:0"
id="path898"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
id="ball1"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
style="fill:url(#linearGradient1221)"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
id="g1310">
<path
id="path1278"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
style="fill:url(#linearGradient39110);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1283"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
style="fill:url(#linearGradient39112);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1286"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
style="fill:url(#linearGradient39114);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1295"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
style="fill:url(#linearGradient39116);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1300"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
style="fill:url(#linearGradient39118);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1304"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
style="fill:url(#linearGradient39120);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
id="path1217"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
id="path1269"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1271"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1276"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccczz"
id="path1317"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:label="Title"
id="layer2"
inkscape:groupmode="layer">
<text
id="text48"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:100%;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
y="74.666664"
x="48">
<tspan
id="tspan2"
sodipodi:role="line"
y="74.666664"
x="48"
style="stroke-width:3.20000017pt">Future Capabilities Desired</tspan>
</text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:139.99999762%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="57.142857"
y="168.88889"
id="text3025"><tspan
id="tspan92"
sodipodi:role="line"
y="168.88889"
x="57.142857"
style="stroke-width:1.06666669pt">* Make it easier to have multiple run-modes</tspan><tspan
id="tspan93"
sodipodi:role="line"
y="204.72888"
x="57.142857"
style="stroke-width:1.06666669pt"> + Commandline mode (--no-gui)</tspan><tspan
id="tspan94"
sodipodi:role="line"
y="240.56888"
x="57.142857"
style="stroke-width:1.06666669pt"> + Presentation mode (inkview *.svg)</tspan><tspan
id="tspan95"
sodipodi:role="line"
y="276.40887"
x="57.142857"
style="stroke-width:1.06666669pt"> + Old Gtk+ interface (--old-gui)</tspan><tspan
id="tspan96"
sodipodi:role="line"
y="312.24887"
x="57.142857"
style="stroke-width:1.06666669pt"> + New Gtkmm interface (--new-gui)</tspan><tspan
id="tspan97"
sodipodi:role="line"
y="348.0889"
x="57.142857"
style="stroke-width:1.06666669pt"> + Whiteboard interface (inkboard)</tspan><tspan
id="tspan98"
sodipodi:role="line"
y="383.92889"
x="57.142857"
style="stroke-width:1.06666669pt"> + Gimp-style interface?</tspan><tspan
id="tspan99"
sodipodi:role="line"
y="419.76889"
x="57.142857"
style="stroke-width:1.06666669pt"> + GUI testing mode?</tspan><tspan
id="tspan100"
sodipodi:role="line"
y="455.60889"
x="57.142857"
style="stroke-width:1.06666669pt"> + Animation playing mode?</tspan><tspan
id="tspan101"
sodipodi:role="line"
y="491.44888"
x="57.142857"
style="stroke-width:1.06666669pt"> + More...?</tspan><tspan
id="tspan102"
sodipodi:role="line"
y="527.28888"
x="57.142857"
style="stroke-width:1.06666669pt" /><tspan
id="tspan103"
sodipodi:role="line"
y="563.12891"
x="57.142857"
style="stroke-width:1.06666669pt">* Inkscape::Application should be run-mode neutral</tspan><tspan
id="tspan104"
sodipodi:role="line"
y="598.96887"
x="57.142857"
style="stroke-width:1.06666669pt"> + Provide high level services / registries for all run modes</tspan><tspan
id="tspan105"
sodipodi:role="line"
y="634.8089"
x="57.142857"
style="stroke-width:1.06666669pt" /><tspan
id="tspan106"
sodipodi:role="line"
y="670.64886"
x="57.142857"
style="stroke-width:1.06666669pt" /></text>
</g>
<g
inkscape:label="Drawing Area"
id="layer3"
inkscape:groupmode="layer" />
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

View file

@ -0,0 +1,609 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="10-future-main.svg"
height="480pt"
width="640pt"
inkscape:version="0.92.0 r15304"
sodipodi:version="0.32"
id="svg586"
version="1.1">
<defs
id="defs588">
<marker
style="overflow:visible;"
id="marker396"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path397"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker394"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path395"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker391"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path392"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker319"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path320"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="TriangleOutL"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path224"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient2570">
<stop
id="stop2571"
offset="0.0000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop2572"
offset="0.58504134"
style="stop-color:#000000;stop-opacity:0.62745100;" />
<stop
id="stop2573"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
y2="114.57422"
x2="53.030737"
y1="20.687101"
x1="77.599106"
id="linearGradient1322"
xlink:href="#linearGradient1218"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="58.199241"
x2="33.266399"
y1="30.563196"
x1="59.491886"
id="linearGradient1318"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
gradientTransform="scale(1.004208,0.995809)"
y2="0.12454049"
x2="0.41986585"
y1="1.9347328"
x1="0.45376351"
id="linearGradient1307"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.006361,0.993679)"
y2="0.11846013"
x2="0.41548476"
y1="1.9667202"
x1="0.45009527"
id="linearGradient1306"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.002016,0.997989)"
y2="0.13959341"
x2="0.42603236"
y1="1.8676205"
x1="0.45839140"
id="linearGradient1305"
xlink:href="#linearGradient1222" />
<linearGradient
y2="80.482086"
x2="51.413385"
y1="119.11808"
x1="11.967844"
id="linearGradient1277"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="62.493129"
x2="90.28563"
y1="45.70058"
x1="118.66497"
id="linearGradient1272"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1270"
xlink:href="#linearGradient1222" />
<linearGradient
y2="120.74315"
x2="94.698939"
y1="120.74315"
x1="17.696665"
id="linearGradient1231"
xlink:href="#linearGradient1323"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="28.120696"
x2="130.70353"
y1="170.27164"
x1="27.318817"
id="linearGradient1221"
xlink:href="#linearGradient1222"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
id="stop1219"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1321"
offset="0.073255815"
style="stop-color:#323232;stop-opacity:1.0000000;" />
<stop
id="stop1320"
offset="0.65260679"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1220"
offset="1"
style="stop-color:#fff;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
id="stop1223"
offset="0.0000000"
style="stop-color:#0081ac;stop-opacity:1.0000000;" />
<stop
id="stop1722"
offset="0.50000000"
style="stop-color:#006d91;stop-opacity:0.62745100;" />
<stop
id="stop1224"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
id="stop1274"
offset="0.00000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop1275"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
id="stop1324"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.77685952;" />
<stop
id="stop1325"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
</linearGradient>
<radialGradient
fy="93.75"
fx="303.7037"
r="248.40302"
cy="281.25"
cx="296.2963"
id="radialGradient829"
xlink:href="#linearGradient826"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
id="stop827"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.95294118;" />
<stop
id="stop830"
offset="0.36585677"
style="stop-color:#000000;stop-opacity:0.76078433;" />
<stop
id="stop847"
offset="0.47107276"
style="stop-color:#000000;stop-opacity:0.52941179;" />
<stop
id="stop828"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
y2="-1.7333326"
x2="0.50000000"
y1="0.66667551"
x1="0.50000000"
id="linearGradient907"
xlink:href="#linearGradient909" />
<linearGradient
id="linearGradient909">
<stop
id="stop910"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
<stop
id="stop913"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.17000000;" />
</linearGradient>
<linearGradient
id="linearGradient1309"
xlink:href="#linearGradient1222"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="1365.4825"
x2="64.30938"
y1="1365.4825"
x1="-0.0028122679"
id="linearGradient1308"
xlink:href="#linearGradient2570"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient39364"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39366"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39368"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39370"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39372"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39374"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39376"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
inkscape:current-layer="layer2"
inkscape:guide-bbox="true"
showguides="true"
inkscape:window-y="71"
inkscape:window-x="133"
inkscape:window-height="821"
inkscape:window-width="968"
inkscape:cy="320"
inkscape:cx="426.66667"
inkscape:zoom="0.940625"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
style="display:block"
inkscape:label="Background"
id="layer1"
inkscape:groupmode="layer">
<rect
y="1.8947807e-15"
x="0"
height="120"
width="853.33331"
id="topbluebox"
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt" />
<path
sodipodi:nodetypes="cc"
id="path654"
d="M -0.03652902,117.55657 850.68323,117.34163"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
transform="translate(689.36448,-10.40511)"
id="g1085">
<g
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)"
id="g1394">
<ellipse
style="opacity:0.69398911;fill:url(#radialGradient39364);stroke-width:0.84729707;stroke-dashoffset:0"
id="path898"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
id="ball1"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
style="fill:url(#linearGradient1221)"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
id="g1310">
<path
id="path1278"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
style="fill:url(#linearGradient39366);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1283"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
style="fill:url(#linearGradient39368);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1286"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
style="fill:url(#linearGradient39370);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1295"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
style="fill:url(#linearGradient39372);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1300"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
style="fill:url(#linearGradient39374);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1304"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
style="fill:url(#linearGradient39376);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
id="path1217"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
id="path1269"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1271"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1276"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccczz"
id="path1317"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:label="Title"
id="layer2"
inkscape:groupmode="layer">
<text
id="text48"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:100%;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
y="74.666664"
x="48">
<tspan
id="tspan1"
sodipodi:role="line"
y="74.666664"
x="48"
style="stroke-width:3.20000017pt">Future main()</tspan>
</text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:120.00000477%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="68.004684"
y="204.63853"
id="text74"><tspan
id="tspan46"
sodipodi:role="line"
y="204.63853"
x="68.004684"
style="stroke-width:1.06666669pt">int main(int argc, char *argv[])</tspan><tspan
id="tspan47"
sodipodi:role="line"
y="235.35854"
x="68.004684"
style="stroke-width:1.06666669pt">{</tspan><tspan
id="tspan48"
sodipodi:role="line"
y="266.07855"
x="68.004684"
style="stroke-width:1.06666669pt"> Inkscape::Application app(argc, argv);</tspan><tspan
id="tspan49"
sodipodi:role="line"
y="296.79855"
x="68.004684"
style="stroke-width:1.06666669pt" /><tspan
id="tspan50"
sodipodi:role="line"
y="327.51855"
x="68.004684"
style="stroke-width:1.06666669pt"> return app.run();</tspan><tspan
id="tspan51"
sodipodi:role="line"
y="358.23856"
x="68.004684"
style="stroke-width:1.06666669pt">}</tspan><tspan
id="tspan52"
sodipodi:role="line"
y="388.95856"
x="68.004684"
style="stroke-width:1.06666669pt" /><tspan
id="tspan53"
sodipodi:role="line"
y="419.67856"
x="68.004684"
style="stroke-width:1.06666669pt" /><tspan
id="tspan54"
sodipodi:role="line"
y="450.39856"
x="68.004684"
style="stroke-width:1.06666669pt">* All logic moved inside Inkscape::Application</tspan><tspan
id="tspan55"
sodipodi:role="line"
y="481.11856"
x="68.004684"
style="stroke-width:1.06666669pt"> + popt, homedir path detection, prefs, extensions, etc.</tspan><tspan
id="tspan56"
sodipodi:role="line"
y="511.83856"
x="68.004684"
style="stroke-width:1.06666669pt"> + Run mode handling</tspan><tspan
id="tspan57"
sodipodi:role="line"
y="542.55853"
x="68.004684"
style="stroke-width:1.06666669pt" /><tspan
id="tspan58"
sodipodi:role="line"
y="573.27856"
x="68.004684"
style="stroke-width:1.06666669pt">* Could also include a definition of WinMain here if needed</tspan></text>
</g>
<g
inkscape:label="Drawing Area"
id="layer3"
inkscape:groupmode="layer" />
</svg>

After

Width:  |  Height:  |  Size: 40 KiB

View file

@ -0,0 +1,614 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg586"
sodipodi:version="0.32"
inkscape:version="0.92.0 r15304"
width="640pt"
height="480pt"
sodipodi:docname="11-future-ink-app.svg"
version="1.1">
<defs
id="defs588">
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker396"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path397"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker394"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path395"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker391"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path392"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="marker319"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path320"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0.0"
refX="0.0"
id="TriangleOutL"
style="overflow:visible;">
<path
sodipodi:nodetypes="cccc"
id="path224"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient2570">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2571" />
<stop
style="stop-color:#000000;stop-opacity:0.62745100;"
offset="0.58504134"
id="stop2572" />
<stop
style="stop-color:#ffffff;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop2573" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1218"
id="linearGradient1322"
x1="77.599106"
y1="20.687101"
x2="53.030737"
y2="114.57422"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1318"
x1="59.491886"
y1="30.563196"
x2="33.266399"
y2="58.199241"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1307"
x1="0.45376351"
y1="1.9347328"
x2="0.41986585"
y2="0.12454049"
gradientTransform="scale(1.004208,0.995809)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1306"
x1="0.45009527"
y1="1.9667202"
x2="0.41548476"
y2="0.11846013"
gradientTransform="scale(1.006361,0.993679)" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1305"
x1="0.45839140"
y1="1.8676205"
x2="0.42603236"
y2="0.13959341"
gradientTransform="scale(1.002016,0.997989)" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1277"
x1="11.967844"
y1="119.11808"
x2="51.413385"
y2="80.482086"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1273"
id="linearGradient1272"
x1="118.66497"
y1="45.70058"
x2="90.28563"
y2="62.493129"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1270" />
<linearGradient
xlink:href="#linearGradient1323"
id="linearGradient1231"
x1="17.696665"
y1="120.74315"
x2="94.698939"
y2="120.74315"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1221"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1219" />
<stop
style="stop-color:#323232;stop-opacity:1.0000000;"
offset="0.073255815"
id="stop1321" />
<stop
style="stop-color:#000000;stop-opacity:1.0000000;"
offset="0.65260679"
id="stop1320" />
<stop
style="stop-color:#fff;stop-opacity:1;"
offset="1"
id="stop1220" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
style="stop-color:#0081ac;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop1223" />
<stop
style="stop-color:#006d91;stop-opacity:0.62745100;"
offset="0.50000000"
id="stop1722" />
<stop
style="stop-color:#000000;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop1224" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.00000000"
id="stop1274" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1275" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
style="stop-color:#000000;stop-opacity:0.77685952;"
offset="0.00000000"
id="stop1324" />
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop1325" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient826"
id="radialGradient829"
cx="296.2963"
cy="281.25"
r="248.40302"
fx="303.7037"
fy="93.75"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
style="stop-color:#000000;stop-opacity:0.95294118;"
offset="0.00000000"
id="stop827" />
<stop
style="stop-color:#000000;stop-opacity:0.76078433;"
offset="0.36585677"
id="stop830" />
<stop
style="stop-color:#000000;stop-opacity:0.52941179;"
offset="0.47107276"
id="stop847" />
<stop
style="stop-color:#ffffff;stop-opacity:0.00000000;"
offset="1.0000000"
id="stop828" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient909"
id="linearGradient907"
x1="0.50000000"
y1="0.66667551"
x2="0.50000000"
y2="-1.7333326" />
<linearGradient
id="linearGradient909">
<stop
style="stop-color:#000000;stop-opacity:0.00000000;"
offset="0.00000000"
id="stop910" />
<stop
style="stop-color:#000000;stop-opacity:0.17000000;"
offset="1.0000000"
id="stop913" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient1222"
id="linearGradient1309"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
xlink:href="#linearGradient2570"
id="linearGradient1308"
x1="-0.0028122679"
y1="1365.4825"
x2="64.30938"
y2="1365.4825"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient39622"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39624"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39626"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39628"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39630"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39632"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient39634"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.940625"
inkscape:cx="426.66667"
inkscape:cy="320"
inkscape:window-width="968"
inkscape:window-height="821"
inkscape:window-x="291"
inkscape:window-y="25"
showguides="true"
inkscape:guide-bbox="true"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Background"
style="display:block">
<rect
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt"
id="topbluebox"
width="853.33331"
height="120"
x="0"
y="1.8947807e-15" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M -0.03652902,117.55657 850.68323,117.34163"
id="path654"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0" />
<g
id="g1085"
transform="translate(689.36448,-10.40511)">
<g
id="g1394"
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)">
<ellipse
id="path898"
style="opacity:0.69398911;fill:url(#radialGradient39622);stroke-width:0.84729707;stroke-dashoffset:0"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
id="ball1"
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
id="g1310"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
style="fill:url(#linearGradient1221)">
<path
style="fill:url(#linearGradient39624);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
id="path1278"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient39626);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
id="path1283"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient39628);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
id="path1286"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient39630);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
id="path1295"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient39632);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
id="path1300"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient39634);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
id="path1304"
inkscape:connector-curvature="0" />
</g>
<path
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
id="path1217"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
id="path1269"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
id="path1271"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
id="path1276"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
id="path1317"
sodipodi:nodetypes="ccccccccccczz"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Title">
<text
x="48"
y="74.666664"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:100%;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text48">
<tspan
id="tspan1"
sodipodi:role="line"
y="74.666664"
x="48"
style="stroke-width:3.20000017pt">Future Inkscape::Application</tspan>
</text>
<text
id="text74"
y="204.63853"
x="68.004684"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:120.00000477%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
id="tspan15"
sodipodi:role="line"
y="204.63853"
x="68.004684"
style="stroke-width:1.06666669pt">Inkscape::Application </tspan><tspan
id="tspan16"
sodipodi:role="line"
y="235.35854"
x="68.004684"
style="stroke-width:1.06666669pt"> + Option handling</tspan><tspan
id="tspan17"
sodipodi:role="line"
y="266.07855"
x="68.004684"
style="stroke-width:1.06666669pt"> - Select run mode from $arg[0] and/or opts given</tspan><tspan
id="tspan18"
sodipodi:role="line"
y="296.79855"
x="68.004684"
style="stroke-width:1.06666669pt"> + Paths (homedir, config file dir, share dir, etc.)</tspan><tspan
id="tspan19"
sodipodi:role="line"
y="327.51855"
x="68.004684"
style="stroke-width:1.06666669pt"> + Preferences</tspan><tspan
id="tspan20"
sodipodi:role="line"
y="358.23856"
x="68.004684"
style="stroke-width:1.06666669pt"> + Extensions registry</tspan><tspan
id="tspan21"
sodipodi:role="line"
y="388.95856"
x="68.004684"
style="stroke-width:1.06666669pt"> + Primary Run Mode object creation/maintenance</tspan><tspan
id="tspan22"
sodipodi:role="line"
y="419.67856"
x="68.004684"
style="stroke-width:1.06666669pt"> Inkscape::Application::RunMode* runmode;</tspan><tspan
id="tspan23"
sodipodi:role="line"
y="450.39856"
x="68.004684"
style="stroke-width:1.06666669pt" /><tspan
id="tspan24"
sodipodi:role="line"
y="481.11856"
x="68.004684"
style="stroke-width:1.06666669pt">Inkscape::Application::RunMode</tspan><tspan
id="tspan25"
sodipodi:role="line"
y="511.83856"
x="68.004684"
style="stroke-width:1.06666669pt"> + Each run mode will subclass this base class</tspan><tspan
id="tspan26"
sodipodi:role="line"
y="542.55853"
x="68.004684"
style="stroke-width:1.06666669pt"> + Provides an 'implementation hiding' ability similar</tspan><tspan
id="tspan27"
sodipodi:role="line"
y="573.27856"
x="68.004684"
style="stroke-width:1.06666669pt"> to Inkscape::ApplicationImpl in inkscape_gtkmm</tspan><tspan
id="tspan28"
sodipodi:role="line"
y="603.99854"
x="68.004684"
style="stroke-width:1.06666669pt" /></text>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Drawing Area" />
</svg>

After

Width:  |  Height:  |  Size: 41 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 59 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 83 KiB

View file

@ -0,0 +1,619 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="14-evolving.svg"
height="480pt"
width="640pt"
inkscape:version="0.92.0 r15304"
sodipodi:version="0.32"
id="svg586"
version="1.1">
<defs
id="defs588">
<marker
style="overflow:visible;"
id="marker396"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path397"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker394"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path395"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker391"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path392"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="marker319"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path320"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible;"
id="TriangleOutL"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"
d="M 4.9237333,0 -2.4576,4.2666667 v -8.5333334 z"
id="path224"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
id="linearGradient2570">
<stop
id="stop2571"
offset="0.0000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop2572"
offset="0.58504134"
style="stop-color:#000000;stop-opacity:0.62745100;" />
<stop
id="stop2573"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
y2="114.57422"
x2="53.030737"
y1="20.687101"
x1="77.599106"
id="linearGradient1322"
xlink:href="#linearGradient1218"
gradientTransform="matrix(1.3228549,0,0,1.2809931,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="58.199241"
x2="33.266399"
y1="30.563196"
x1="59.491886"
id="linearGradient1318"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.7409899,0,0,0.97333594,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
gradientTransform="scale(1.004208,0.995809)"
y2="0.12454049"
x2="0.41986585"
y1="1.9347328"
x1="0.45376351"
id="linearGradient1307"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.006361,0.993679)"
y2="0.11846013"
x2="0.41548476"
y1="1.9667202"
x1="0.45009527"
id="linearGradient1306"
xlink:href="#linearGradient1222" />
<linearGradient
gradientTransform="scale(1.002016,0.997989)"
y2="0.13959341"
x2="0.42603236"
y1="1.8676205"
x1="0.45839140"
id="linearGradient1305"
xlink:href="#linearGradient1222" />
<linearGradient
y2="80.482086"
x2="51.413385"
y1="119.11808"
x1="11.967844"
id="linearGradient1277"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.8036348,0,0,1.2393329,-37.611189,-4.4599008)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="62.493129"
x2="90.28563"
y1="45.70058"
x1="118.66497"
id="linearGradient1272"
xlink:href="#linearGradient1273"
gradientTransform="matrix(1.4554449,0,0,1.1642956,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1270"
xlink:href="#linearGradient1222" />
<linearGradient
y2="120.74315"
x2="94.698939"
y1="120.74315"
x1="17.696665"
id="linearGradient1231"
xlink:href="#linearGradient1323"
gradientTransform="matrix(1.8150579,0,0,0.9336165,-21.540736,7.7941685)"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="28.120696"
x2="130.70353"
y1="170.27164"
x1="27.318817"
id="linearGradient1221"
xlink:href="#linearGradient1222"
gradientTransform="scale(1.0211162,0.97932047)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient1218">
<stop
id="stop1219"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1321"
offset="0.073255815"
style="stop-color:#323232;stop-opacity:1.0000000;" />
<stop
id="stop1320"
offset="0.65260679"
style="stop-color:#000000;stop-opacity:1.0000000;" />
<stop
id="stop1220"
offset="1"
style="stop-color:#fff;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient1222">
<stop
id="stop1223"
offset="0.0000000"
style="stop-color:#0081ac;stop-opacity:1.0000000;" />
<stop
id="stop1722"
offset="0.50000000"
style="stop-color:#006d91;stop-opacity:0.62745100;" />
<stop
id="stop1224"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient1273">
<stop
id="stop1274"
offset="0.00000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop1275"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
id="linearGradient1323">
<stop
id="stop1324"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.77685952;" />
<stop
id="stop1325"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
</linearGradient>
<radialGradient
fy="93.75"
fx="303.7037"
r="248.40302"
cy="281.25"
cx="296.2963"
id="radialGradient829"
xlink:href="#linearGradient826"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.29936853,0,0,0.15858773,4.3548661,98.117152)" />
<linearGradient
id="linearGradient826">
<stop
id="stop827"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.95294118;" />
<stop
id="stop830"
offset="0.36585677"
style="stop-color:#000000;stop-opacity:0.76078433;" />
<stop
id="stop847"
offset="0.47107276"
style="stop-color:#000000;stop-opacity:0.52941179;" />
<stop
id="stop828"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:0.00000000;" />
</linearGradient>
<linearGradient
y2="-1.7333326"
x2="0.50000000"
y1="0.66667551"
x1="0.50000000"
id="linearGradient907"
xlink:href="#linearGradient909" />
<linearGradient
id="linearGradient909">
<stop
id="stop910"
offset="0.00000000"
style="stop-color:#000000;stop-opacity:0.00000000;" />
<stop
id="stop913"
offset="1.0000000"
style="stop-color:#000000;stop-opacity:0.17000000;" />
</linearGradient>
<linearGradient
id="linearGradient1309"
xlink:href="#linearGradient1222"
gradientTransform="scale(2.8444445,0.4)"
x1="0"
y1="4.7369516e-15"
x2="300"
y2="4.7369516e-15"
gradientUnits="userSpaceOnUse" />
<linearGradient
y2="1365.4825"
x2="64.30938"
y1="1365.4825"
x1="-0.0028122679"
id="linearGradient1308"
xlink:href="#linearGradient2570"
gradientTransform="scale(13.227991,0.0860129)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient826"
id="radialGradient40804"
cx="296.2963"
cy="281.25"
fx="303.7037"
fy="93.75"
r="248.40302"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4203424,0,0,0.08699077,-33.810677,100.89451)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient40806"
x1="33.344169"
y1="164.17808"
x2="131.82116"
y2="28.775105"
gradientTransform="scale(1.0839555,1.0496536)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient40808"
x1="31.731446"
y1="165.85049"
x2="131.57971"
y2="28.562063"
gradientTransform="scale(1.0848907,1.0487488)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient40810"
x1="35.171777"
y1="162.0032"
x2="131.8238"
y2="29.109513"
gradientTransform="scale(1.0846262,1.0490045)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient40812"
x1="37.676606"
y1="159.47478"
x2="132.33793"
y2="29.318235"
gradientTransform="scale(1.0823063,1.051253)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient40814"
x1="29.920773"
y1="167.66146"
x2="131.16846"
y2="28.448861"
gradientTransform="scale(1.0869998,1.0467139)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1222"
id="linearGradient40816"
x1="27.318817"
y1="170.27164"
x2="130.70353"
y2="28.120696"
gradientTransform="scale(1.0891906,1.0446085)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
inkscape:current-layer="layer2"
inkscape:guide-bbox="true"
showguides="true"
inkscape:window-y="25"
inkscape:window-x="291"
inkscape:window-height="821"
inkscape:window-width="968"
inkscape:cy="320"
inkscape:cx="426.66667"
inkscape:zoom="0.940625"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata33">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
style="display:block"
inkscape:label="Background"
id="layer1"
inkscape:groupmode="layer">
<rect
y="1.8947807e-15"
x="0"
height="120"
width="853.33331"
id="topbluebox"
style="font-size:12px;fill:url(#linearGradient1309);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.20000017pt" />
<path
sodipodi:nodetypes="cc"
id="path654"
d="M -0.03652902,117.55657 850.68323,117.34163"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient1308);stroke-width:5.31674433;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
<g
transform="translate(689.36448,-10.40511)"
id="g1085">
<g
transform="matrix(0.875802,0,0,0.869278,1.1184885,-8.4967275)"
id="g1394">
<ellipse
style="opacity:0.69398911;fill:url(#radialGradient40804);stroke-width:0.84729707;stroke-dashoffset:0"
id="path898"
cx="92.292046"
cy="126.99174"
rx="126.10272"
ry="26.097233" />
<ellipse
style="fill:url(#radialGradient829);stroke-width:0.96546245;stroke-dashoffset:0"
id="ball1"
cx="94.165428"
cy="145.69347"
rx="89.810562"
ry="47.576321" />
</g>
<g
style="fill:url(#linearGradient1221)"
transform="matrix(1.822197,0,0,1.662749,-192.00875,13.084299)"
id="g1310">
<path
id="path1278"
d="m 148.55614,11.815593 c -2.18769,1e-6 -4.39029,0.823628 -6.06667,2.5 l -29.76666,29.8 c -1.64308,1.643032 -2.50068,3.78929 -2.53334,5.933333 -4.6e-4,0.03598 0,0.09736 0,0.133333 h 0.0667 c 0.57027,2.16974 15.28934,4.922713 16.93333,6.566667 2.48272,2.482738 -9.51602,4.317248 -7.03333,6.8 2.48271,2.482709 15.01704,4.783915 17.5,7.266669 2.48273,2.48272 -5.08275,5.11728 -2.6,7.6 2.48272,2.482753 10.81047,-0.609259 9.3,5.866667 3.35273,3.352736 10.34963,1.752736 15.03333,-1.6 2.48272,-2.482721 -4.74941,-2.250614 -2.26666,-4.733334 2.48272,-2.482752 8.75277,-2.494421 14.03333,-8.433335 -2.12548,-3.305654 -9.08274,-4.717259 -6.6,-7.2 2.48272,-2.482715 7.28509,-1.236886 17.7,-5.966667 5.08413,-2.309024 4.68613,-4.040355 4.66667,-6.166667 -4.1e-4,-0.04475 0,-0.08825 0,-0.133333 h -0.0333 c -0.0326,-2.144041 -0.85698,-4.290298 -2.5,-5.933333 l -29.8,-29.8 c -1.67637,-1.67637 -3.84565,-2.5 -6.03334,-2.5 z m -0.26667,3.866666 c 0.97256,0.02533 1.75986,0.768324 3.3,1.766667 l 14.06667,10.433333 c 0.15408,0.09991 0.29855,0.192996 0.43333,0.3 0.1348,0.10699 0.28452,0.220015 0.4,0.333334 0.11548,0.113111 0.20364,0.248218 0.3,0.366666 0.0961,0.118429 0.18984,0.244093 0.26667,0.366667 0.077,0.122774 0.14229,0.240765 0.2,0.366667 0.0577,0.126131 0.0949,0.238188 0.13333,0.366666 0.0386,0.128282 0.0808,0.270352 0.1,0.4 0.0193,0.12988 0.0333,0.269763 0.0333,0.4 l -8.33333,-4.033333 -0.83334,6.3 -4.6,-2.166667 -7.06666,4.733334 -2.73334,-9.333334 -3.46666,8.166667 -9.76667,0.966667 0.1,-4.333334 c 0,-1.042224 5.64516,-8.329604 9.06666,-10.066666 l 6.26667,-4.5 c 0.92408,-0.599006 1.54979,-0.848535 2.13333,-0.833334 z m -12.93333,42.6 c 4.43676,1.15063 9.37288,2.639674 13.33333,2.666667 l 0.16667,1.8 c -3.39138,-0.349579 -10.57471,-2.002379 -12.26667,-2.866667 z m 46.23333,7.9 c -0.67728,-0.02171 -1.31822,0.0462 -1.8,0.166667 -0.90833,0.226965 -5.321,0.331531 -4.96666,3.166667 3.89845,1.416876 9.92489,2.502007 10.63333,-0.333334 0.53176,-2.12593 -1.83484,-2.93489 -3.86667,-3 z m -50.96666,5.766669 c -0.61333,-0.07148 -1.21336,0.0042 -1.8,0.3 -2.34598,1.183349 -3.92502,3.81264 -1.73334,4.9 2.19191,1.08736 3.74516,-0.150741 5.66667,-1.5 1.92173,-1.349045 1.87228,-1.612875 1.73333,-2.133333 -0.26601,0.07094 -2.02669,-1.352235 -3.86666,-1.566667 z m 42.86666,0.466667 c -1.77199,0.708629 -1.75118,3.170389 -0.33333,4.233333 1.41748,1.063157 3.19156,0.375499 3.9,-0.333333 0.70902,-0.70863 -0.023,-3.19136 -3.56667,-3.9 z"
style="fill:url(#linearGradient40806);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1283"
d="m 147.16667,11.433333 c -3.48238,0.364902 -5.88303,3.345755 -8.33158,5.570373 -8.94544,9.133798 -18.09349,18.101949 -26.95799,27.294024 -1.44334,1.84378 -2.03035,4.015468 -2.31043,6.30227 5.03542,3.678658 11.71157,3.699536 17.06666,6.766667 -1.50817,2.381747 -5.17846,2.289571 -6.84097,4.663825 -1.44519,0.973702 0.60698,2.569614 1.6838,2.93719 4.47582,2.259905 9.5207,3.127075 13.9674,5.505719 2.30619,0.164974 2.15073,2.483836 0.6201,3.623175 -1.21232,1.221254 -3.08705,3.249751 -1.23288,4.771441 2.26675,1.575369 5.27199,1.144095 7.80255,2.065316 1.77826,0.975122 0.51639,2.738136 1.73334,3.966667 3.05603,2.396513 7.28787,1.973693 10.69445,0.606201 1.75151,-0.515126 3.34201,-1.653286 4.87221,-2.539534 1.47613,-1.720326 -0.82595,-2.9513 -2.13333,-3.666667 -0.85913,-1.425274 2.00009,-1.997097 2.97462,-2.675578 3.73665,-1.514529 7.36553,-3.267329 10.23683,-6.143331 1.79011,-1.105032 -0.83882,-2.676851 -1.67812,-3.547758 -1.55141,-1.15048 -3.58938,-1.860548 -4.56666,-3.633333 2.52043,-2.7807 6.7319,-2.262194 9.98204,-3.687561 3.90317,-0.992642 7.61596,-2.729652 11.05532,-4.741974 2.26951,-1.69135 1.67257,-4.636557 1.22998,-7.021773 -1.61839,-5.025589 -6.41885,-8.01283 -9.81146,-11.814386 -7.61983,-7.514247 -15.1255,-15.17228 -22.81612,-22.597384 -2.05244,-1.578655 -4.64151,-2.423668 -7.23976,-2.003589 z M 149.5,16.766667 c 5.52064,4.046284 11.05387,8.077891 16.56667,12.133333 0.11539,1.103552 -2.90244,-1.172627 -4.0558,-1.481882 -1.41219,-0.420198 -3.8964,-2.894916 -3.5025,0.03341 -0.60562,1.192982 0.31151,5.203671 -1.4377,4.28052 -1.58183,-0.849857 -3.68447,-2.113891 -5.18058,-0.378679 -1.61892,1.082213 -3.23783,2.164425 -4.85676,3.246637 -0.9783,-3.377623 -1.95211,-6.756554 -2.93333,-10.133333 -1.34602,3.127884 -2.66477,6.267483 -4,9.4 -2.92222,0.288888 -5.84445,0.577778 -8.76667,0.866667 -0.20184,-2.166309 0.27133,-4.341771 1.77562,-5.878158 3.25057,-5.211552 8.66632,-8.395371 13.54451,-11.865011 0.95273,-0.564092 1.80847,-0.493262 2.84654,-0.223498 z m -8.63333,43.566666 c 2.34366,0.607254 4.78296,0.727797 7.16666,1.133334 -0.90625,1.084587 -3.14277,-0.32439 -4.56523,-0.371058 -1.8583,-0.406252 -3.7163,-0.80007 -5.4681,-1.562276 0.95555,0.266667 1.91111,0.533334 2.86667,0.8 z m 38.86666,5.4 c -2.15488,0.501536 -5.22675,0.793815 -5.5,3.566667 0.70833,1.029809 2.96093,1.412478 4.40801,1.688268 2.27503,0.363118 5.38493,1.181831 6.97878,-0.937576 1.36135,-1.898234 -0.67459,-4.313995 -2.78769,-4.178768 -1.02575,-0.350017 -2.04343,-0.268702 -3.0991,-0.138591 z m -51.03333,5.9 c -1.57612,1.085018 -3.71575,2.720281 -3.03333,4.9 1.61184,2.339234 4.94529,1.683368 6.78753,-0.0057 1.2184,-0.692559 3.25469,-2.021692 2.31247,-3.560997 -1.93436,-0.840999 -3.87915,-2.117169 -6.06667,-1.333334 z m 44.36667,0.333334 c -1.34895,0.891833 -1.89168,2.759628 -0.95675,4.109348 0.71622,1.795233 3.11379,1.982508 4.57991,1.004604 1.95986,-0.600235 1.10016,-3.109938 -0.33003,-3.844913 -0.72045,-0.899439 -2.36482,-1.335642 -3.29313,-1.269039 z"
style="fill:url(#linearGradient40808);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1286"
d="m 146.23333,12.866667 c -3.88385,1.702193 -6.61189,5.324961 -9.67052,8.210746 -7.86956,8.018198 -15.90416,15.90198 -23.69161,23.983409 -1.11331,1.428597 -1.72615,3.060044 -2.00453,4.839178 4.36,3.072638 10.04495,3.23545 14.7573,5.603266 1.5625,0.15548 3.26141,1.73801 1.81635,3.072207 -1.86501,1.91956 -5.15011,2.084779 -6.70699,4.291194 4.05269,2.923397 9.10625,3.602288 13.58014,5.613093 1.52915,1.119169 4.28812,1.21833 4.3532,3.553573 -0.41298,2.06712 -2.47344,3.267809 -3.36667,5.133334 1.94434,2.744072 5.94438,1.261888 8.50547,3.040805 1.3908,0.857738 1.00828,2.693049 1.62108,3.831047 3.2048,2.344549 7.71164,1.319869 10.94656,-0.558135 1.04365,-0.353733 3.89943,-1.626855 1.76272,-2.556043 -1.55651,-0.349067 -2.86028,-2.213166 -1.35103,-3.402938 3.84858,-2.931245 9.10998,-3.601158 12.55258,-7.214396 1.79927,-1.361045 -1.31628,-2.560541 -2.24828,-3.336495 -1.41778,-1.044797 -3.86698,-2.048091 -3.55577,-4.137179 2.35965,-3.274836 6.88107,-2.833411 10.31383,-4.263585 3.90311,-0.957377 7.67689,-2.630842 11.10878,-4.611597 2.18816,-1.940094 1.07405,-5.046756 0.32835,-7.371909 -3.93266,-5.513287 -9.35396,-9.75581 -13.9708,-14.686024 -5.91778,-5.783657 -11.65452,-11.813723 -17.68454,-17.444607 -2.14828,-1.370565 -4.63208,-2.556154 -7.20805,-1.62333 z m 2.3,2.233333 c 5.45973,2.578599 9.80753,6.890051 14.73244,10.347527 1.85084,1.664819 5.00363,2.778901 4.9009,5.71914 -1.78479,0.428996 -3.34725,-1.396857 -5.04898,-1.86837 -1.54021,-0.520034 -4.1213,-2.963549 -3.68846,0.16232 -0.54825,1.127161 0.22527,4.775461 -1.23798,4.170178 -1.53672,-0.653008 -3.2567,-1.905943 -4.87859,-1.758173 -2.31413,1.577535 -4.63724,3.142054 -6.94599,4.727378 -0.87266,-2.83558 -1.68407,-5.690403 -2.53334,-8.533333 -1.12707,2.260756 -1.98302,4.959333 -3.26666,6.966666 -3.47777,0.344565 -6.95563,0.688221 -10.43334,1.033334 0.0287,-2.531437 -0.43925,-5.398577 1.54821,-7.372648 3.13073,-5.303181 8.62883,-8.494145 13.35179,-12.127352 1.15867,-0.426692 2.35212,-1.253526 3.5,-1.466667 z m -13.76666,42.4 c 4.77393,1.272573 9.58904,2.318786 14.5,2.9 0.93608,1.872033 -0.34236,3.482335 -2.33168,2.565935 -3.62332,-0.734316 -7.25018,-1.727438 -10.80166,-2.699268 -0.26564,-0.514085 -3.09159,-3.378118 -1.36666,-2.766667 z m 45.16666,9.433333 c -1.51493,0.422114 -3.72691,0.290818 -4.26666,2.133334 2.90995,0.556827 6.05202,2.002088 8.9,0.466666 0.978,-1.977585 -1.92783,-2.538134 -3.31385,-2.645499 -0.43983,0.01517 -0.87966,0.03034 -1.31949,0.0455 z m -50.9,5.866667 c -1.16024,0.90047 -3.46737,3.083937 -1.02728,3.858837 2.25255,0.543858 3.96147,-1.380385 5.62728,-2.558837 -1.18522,-1.161836 -2.98479,-1.601218 -4.6,-1.3 z m 44.03334,0.733333 c -1.04902,2.027564 1.90687,4.021482 3.28133,2.230908 0.70415,-1.13156 -2.36473,-3.118333 -3.28133,-2.230908 z"
style="fill:url(#linearGradient40810);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1295"
d="m 146.66667,13.4 c -6.33172,3.543401 -10.68888,9.547281 -15.90063,14.447274 -5.8861,6.073656 -12.00588,11.974663 -17.74737,18.155152 -0.7305,1.178656 -2.18908,3.828459 -0.0714,4.248788 4.9013,2.576465 10.86092,2.972757 15.3194,6.215453 1.00861,2.475215 -2.05916,3.484953 -3.70454,4.477414 -1.7373,0.545523 -3.75405,2.175563 -0.84454,2.774326 4.83335,2.60598 10.58594,3.28132 15.01575,6.64826 1.43136,2.33294 -1.26292,4.394234 -2.23809,6.238069 0.0119,1.908953 2.8242,1.486185 4.14874,2.002826 2.29679,0.177914 4.75661,1.464231 4.98406,3.992952 0.7695,2.00242 3.5144,2.068656 5.37195,2.066153 2.47607,-0.312856 4.61313,-1.6278 6.86667,-2.6 -0.11425,-1.550102 -2.69456,-1.700315 -2.36667,-3.6 1.99363,-3.193298 6.06476,-3.869656 9.11608,-5.707796 1.73236,-0.750835 3.28599,-1.893245 4.45059,-3.392204 -1.92497,-2.280272 -5.74204,-3.012313 -6.11314,-6.406102 0.39022,-1.188208 2.2736,-2.314015 3.60639,-2.891301 5.6785,-2.143002 11.88985,-2.970298 17.10185,-6.270592 2.74324,-1.108432 1.83527,-4.538836 1.0317,-6.686009 -2.29624,-3.22589 -5.40132,-6.000174 -8.00828,-9.052576 -2.68656,-2.760044 -5.48876,-5.408427 -8.21852,-8.126754 1.12365,1.634362 -0.99109,2.422313 -2.21269,1.401868 -2.03118,-0.886068 -4.05629,-1.760173 -6.12064,-2.568534 C 160.05314,30.54272 159.67649,32.269964 159.3,34 c -2.55377,0.684822 -5.03322,-2.683187 -7.35336,-0.501311 -1.91379,1.060257 -3.40719,2.847058 -5.45058,3.513153 -1.46281,-0.265507 -1.26699,-3.243895 -2.01992,-4.618246 -0.44179,-3.083731 -1.2118,-2.404985 -2.14312,0.123134 -0.85365,1.59882 -1.21984,3.834303 -3.53335,3.298267 -3.08878,0.306225 -6.17762,0.611598 -9.26633,0.918336 0.0202,-3.177717 -0.28551,-6.766 2.22768,-9.171123 3.51639,-4.960964 8.70856,-8.341185 13.55479,-11.782731 1.62219,-0.752906 3.63701,-1.872712 5.13828,-0.273654 3.97373,2.727514 8.02021,5.285521 11.74591,8.327508 -3.19568,-3.018643 -6.19482,-6.317986 -9.51099,-9.164539 -1.87897,-0.938934 -3.8675,-2.092901 -6.02238,-1.268794 z m -11.83334,43.5 c 5.00075,0.984495 9.99566,2.003225 15,2.966667 0.20732,1.45664 0.46427,3.886308 -1.67313,3.831478 -4.16789,-0.795987 -8.38205,-1.956384 -12.49353,-3.031478 -0.61549,-0.980519 -2.50897,-2.472939 -1.9,-3.466667 0.35063,-0.05103 0.72399,-0.354699 1.06666,-0.3 z m 42.8,11.166667 c -1.73875,1.086025 2.33789,1.138186 3.27372,1.439238 1.30579,0.375237 4.48185,-0.551342 2.02628,-1.672572 -1.83243,-0.401834 -3.50784,-0.360679 -5.3,0.233334 z M 128.86667,73.8 c -2.17346,1.397366 -0.18414,3.053084 1.5865,1.699463 2.04828,-0.249261 2.08866,-2.343116 -0.17211,-2.051831 -0.54677,-0.07524 -0.99718,-0.0549 -1.41439,0.352368 z m 44.76666,1.133333 c 2.4133,2.30436 1.83777,-1.778179 0,-0.492892 0,0.102368 0,0.430964 0,0.492892 z"
style="fill:url(#linearGradient40812);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1300"
d="m 146.4,11 c -2.85517,0.532698 -4.88261,2.920832 -7.04143,4.696624 -9.46036,9.318687 -18.69953,18.903094 -28.02524,28.336709 -1.28513,2.140689 -2.02923,4.453081 -2.46666,6.9 4.02374,2.003945 8.08967,3.86007 12.47179,4.935568 1.05804,0.665393 4.69014,0.890135 3.49487,2.397766 -2.29866,1.221998 -5.17006,2.048868 -6.16666,4.733333 1.94556,3.411999 6.27529,3.61226 9.48467,5.236915 2.69399,1.065471 5.388,2.130945 8.08199,3.196418 0.0835,2.815831 -0.6308,1.873266 -2.05017,0.611648 -2.17089,-1.1027 -5.39205,-2.114404 -7.09766,0.274746 -1.55046,0.944625 -2.75719,3.349765 -1.57432,4.866099 2.21286,2.398176 6.00771,1.27668 8.06067,-0.779037 0.17795,-0.191378 -0.29693,2.877758 1.42073,3.193938 2.34275,1.346613 5.33929,0.970157 7.67409,2.299273 0.45283,1.979683 1.2508,4.221333 3.5739,4.531638 3.66844,1.48315 7.80683,0.39212 11.09794,-1.541311 1.39792,-0.760174 4.07797,-1.323747 3.46357,-3.423687 -0.0478,-1.38074 -3.42818,-2.212653 -1.53541,-3.499973 4.53006,-2.016167 9.17312,-4.142848 12.66666,-7.733334 0.85723,-2.253596 -2.25712,-3.193724 -3.46666,-4.566666 -1.4517,-1.221069 -3.87877,-2.524433 -0.81856,-3.364818 5.62839,-2.111859 11.87228,-2.940184 17.03456,-6.263438 2.72995,-0.86584 3.85371,-3.957742 3.06767,-6.564064 -0.0255,-2.62475 -1.76154,-4.797622 -3.22224,-6.835657 C 179.45289,36.856816 173.58197,31.828345 168.24204,26.291461 163.60188,21.818095 159.14228,17.065484 154.39198,12.762657 151.99166,11.220691 149.22884,10.717147 146.4,11 Z m 3.36667,6.733333 c 4.24058,2.976224 8.38139,6.129328 12.6,9.166667 -1.29937,-0.797366 -2.67486,-1.290978 -4.2,-1.4 -0.21287,1.824575 -0.47054,3.643999 -0.7,5.466667 -1.97534,-0.587625 -4.21204,-1.778592 -5.97773,-0.09263 -1.30676,0.402533 -3.52226,3.290581 -4.25972,2.135968 -0.99915,-3.447628 -1.99405,-6.896491 -2.99589,-10.343339 -1.52265,3.539479 -3.02044,7.089652 -4.53333,10.633333 -2.56667,0.255555 -5.13333,0.511111 -7.7,0.766667 -0.0148,-3.662276 2.83591,-6.395601 5.07235,-8.959274 3.30461,-2.837611 6.75708,-5.60858 10.52338,-7.756865 0.7316,-0.360909 1.44586,0.250944 2.17094,0.382806 z m 26.36666,48.333334 C 174.87994,66.86218 172.84987,68.441375 174.2,70 c 2.62772,1.71982 5.90645,1.835937 8.93343,1.934762 2.25075,-0.06272 4.4688,-2.726652 2.93663,-4.770688 -1.42803,-2.456455 -4.67977,-1.908377 -7.06627,-1.883005 -0.95681,0.261868 -1.91364,0.523732 -2.87046,0.785598 z m -3.3,5.433333 c -1.27562,1.033534 -1.85687,2.841465 -1.35231,4.508785 0.43077,1.899535 2.6256,2.385569 4.29198,1.849858 2.50838,0.201444 3.52565,-3.378484 1.43654,-4.628378 -1.24197,-1.050288 -2.64377,-2.095016 -4.37621,-1.730265 z"
style="fill:url(#linearGradient40814);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
<path
id="path1304"
d="m 146,10.2 c -5.57009,2.353735 -9.31153,7.276932 -13.56394,11.364379 -7.26121,7.360863 -14.57305,14.685571 -21.80273,22.068954 -0.92375,2.588329 -1.83526,5.181133 -2.76666,7.766667 5.12606,2.235525 10.28103,4.361596 15.6,6.1 -0.32712,1.554459 -2.93579,1.371077 -3.74338,2.860476 -1.43416,0.914482 -2.37188,3.411157 -0.36803,4.245199 3.1673,2.975582 7.51398,4.048213 11.44474,5.660992 -3.09041,-0.89746 -5.13867,2.363507 -6.33333,4.666666 -0.72155,2.880448 2.58866,4.694489 5.06851,4.276737 1.54135,0.553684 3.66,-2.522746 3.86807,-0.13866 2.29497,2.607941 6.70581,1.993255 9.10076,4.436609 0.7749,2.147771 2.55461,3.943898 4.94541,3.965707 2.15881,0.621481 4.27216,0.328386 6.35476,-0.418515 2.43249,-0.54992 4.74804,-1.764623 6.87594,-2.976017 1.61013,-1.140622 1.25617,-3.709454 -0.21345,-4.812527 -0.21701,-1.714746 2.45466,-1.738353 3.54015,-2.659077 2.92458,-1.339302 5.49291,-3.216603 7.95985,-5.240923 -1.09048,1.568168 -1.50221,3.637034 -0.89348,5.420276 1.02957,2.431889 4.09705,1.779572 6.16014,1.64639 C 179.29546,77.451445 180.09314,74.273508 178,72.9 c -3.03927,-1.879702 -0.42819,-1.002977 1.49692,-0.460891 2.38484,0.141742 5.36949,0.891675 6.99369,-1.418947 1.80089,-1.737129 0.66941,-4.475043 -1.05728,-5.820162 -2.14881,-1.14371 -4.72742,-0.810973 -7.057,-0.699886 -2.09119,0.370608 -3.67839,1.613047 -4.97633,3.233219 -1.58756,1.272788 1.82748,3.61782 -0.0532,3.147933 -1.36163,0.234395 0.30799,-2.483632 -1.32358,-3.36862 -1.06348,-1.560896 -2.85826,-2.534055 -4.1899,-3.879313 6.43141,-3.110773 13.94477,-3.952924 19.7,-8.433333 2.10991,-2.5028 1.15052,-5.815831 0.53333,-8.666667 C 184.23156,39.549156 177.84192,34.54079 172.35319,28.898191 166.50884,23.205036 160.69939,17.462459 154.83333,11.8 152.27799,10.77259 149.66457,10.063772 146.88646,10.206305 146.60075,10.233991 146.27214,10.101959 146,10.2 Z m 7.6,11.266667 c 1.51374,1.165288 3.04586,2.309495 4.56667,3.466666 -1.39718,1.06872 -0.90296,3.127104 -1.4,4.633334 -2.08576,-0.566112 -4.35694,-0.641822 -6.05767,0.905733 -1.05102,0.888519 -3.01815,1.872214 -3.17799,-0.196242 -0.93874,-3.234383 -1.83,-6.48501 -2.79768,-9.709491 1.63294,-0.494373 3.30094,-3.132711 4.90134,-1.63781 1.32178,0.845937 2.64355,1.691873 3.96533,2.53781 z m -14.36667,10.966666 c -1.96666,0.2 -3.93333,0.4 -5.9,0.6 0.75323,-3.751583 3.85837,-6.37712 6.49928,-8.892012 1.44608,-1.049755 2.80293,-2.240606 4.30072,-3.207988 -1.63333,3.833334 -3.26666,7.666667 -4.9,11.5 z"
style="fill:url(#linearGradient40816);fill-opacity:0.07438019;fill-rule:evenodd;stroke-width:1.06666669pt"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc"
id="path1217"
d="m 80.606138,21.093974 c -3.986404,2e-6 -7.999981,1.500815 -11.054664,4.555494 L 15.31073,79.950952 c -2.994002,2.993929 -4.556718,6.904836 -4.616235,10.811705 -8.35e-4,0.06557 0,0.177392 0,0.24296 h 0.12148 c 1.039149,3.953694 27.860205,8.970154 30.855878,11.965763 4.524006,4.52404 -17.340071,7.86688 -12.816122,12.39094 4.523986,4.52399 27.364021,8.71724 31.888455,13.2413 4.524026,4.52402 -9.261778,9.3247 -4.737714,13.8487 4.524006,4.52407 19.69882,-1.11018 16.946437,10.69023 6.109347,6.10935 18.859073,3.19383 27.393701,-2.91552 4.52401,-4.524 -8.654358,-4.10106 -4.130314,-8.62506 4.524004,-4.52406 15.949294,-4.54533 25.571504,-15.3672 -3.87306,-6.02355 -16.55055,-8.59578 -12.0265,-13.11982 4.524,-4.524 13.27486,-2.25385 32.25288,-10.87245 9.26429,-4.207497 8.53905,-7.362324 8.50359,-11.236883 -7.4e-4,-0.08153 0,-0.160805 0,-0.24296 h -0.0608 c -0.0595,-3.906866 -1.56157,-7.817769 -4.55549,-10.811705 L 91.600063,25.649468 C 88.5454,22.594793 84.592543,21.093974 80.606138,21.093974 Z M 56.553132,105.76542 c 8.084647,2.09667 17.079247,4.81 24.295966,4.85919 l 0.3037,3.27996 c -6.179767,-0.63701 -19.269208,-3.64874 -22.352289,-5.22364 z m 84.246258,14.39535 c -1.23415,-0.0395 -2.40206,0.0842 -3.27996,0.3037 -1.65516,0.41359 -9.69592,0.60412 -9.05025,5.7703 7.10376,2.58184 18.08512,4.55915 19.37604,-0.6074 0.96897,-3.87387 -3.34345,-5.34795 -7.04583,-5.4666 z m -92.871326,10.50801 c -1.117595,-0.13024 -2.210972,0.008 -3.279956,0.54666 -4.274826,2.15631 -7.152149,6.94739 -3.158474,8.92877 3.99408,1.98139 6.824425,-0.27467 10.325785,-2.7333 3.501767,-2.45822 3.411658,-2.93897 3.158475,-3.88735 -0.484734,0.12928 -3.693025,-2.46403 -7.04583,-2.85478 z m 78.111516,0.85036 c -3.22891,1.29126 -3.19098,5.77708 -0.60739,7.71397 2.58293,1.93728 5.81565,0.68424 7.10657,-0.6074 1.29198,-1.29126 -0.042,-5.81528 -6.49918,-7.10657 z"
style="fill:url(#linearGradient1322);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
id="path1269"
d="m 11.977124,84.576671 c -0.883927,1.953959 -1.36513,4.04141 -1.397018,6.134731 -8.33e-4,0.06556 0,0.177399 0,0.24296 h 0.12148 c 0.994358,3.78327 25.07956,8.512878 29.823299,11.540588 2.091809,-1.24429 3.465756,-2.547484 2.065157,-3.948099 C 39.594368,95.551236 12.773315,90.53478 11.734165,86.581087 h -0.12148 c 0,-0.06558 -8.33e-4,-0.177399 0,-0.242958 0.0091,-0.601939 0.284168,-1.162709 0.364439,-1.761458 z M 150.34262,92.47286 c -1.0612,1.680115 -3.10061,3.387829 -7.41026,5.345111 -18.97801,8.618589 -27.72886,6.348449 -32.25287,10.872439 -1.37053,1.37052 -0.88153,2.54264 0.18222,3.70513 4.78924,-3.38639 13.4115,-2.19944 31.03808,-10.20429 8.00504,-3.635614 8.46503,-6.511246 8.44283,-9.71839 z m -92.871299,8.86803 2.247377,2.9155 c 3.08308,1.57491 16.17252,4.58665 22.352289,5.22364 l -0.303699,-3.27996 c -7.216719,-0.0492 -16.21132,-2.7625 -24.295967,-4.85918 z M 30.685018,111.4237 c -2.022925,1.2244 -3.320206,2.51079 -1.943676,3.88736 4.523988,4.52399 27.364021,8.71723 31.888455,13.2413 0.198962,0.19895 0.17245,0.40741 0.3037,0.6074 1.405197,-1.67236 2.355425,-3.35413 0.728879,-4.98067 -4.359755,-4.3594 -25.379991,-8.41841 -30.977358,-12.75539 z m 100.220842,10.75097 c -1.55381,0.80713 -2.80902,1.9449 -2.55108,4.00882 7.10375,2.58184 18.08511,4.55915 19.37603,-0.60738 0.25122,-1.00435 0.11312,-1.85114 -0.24296,-2.55108 -3.06888,2.47706 -10.66085,1.09402 -16.58199,-0.85036 z m -11.17612,2.18664 c -8.90094,7.91694 -18.52655,8.74738 -22.595255,12.81612 -1.63664,1.63663 -0.713263,2.53048 0.6074,3.34069 5.191475,-3.47749 15.190165,-4.50342 23.931535,-14.33463 -0.44804,-0.69679 -1.30027,-1.20938 -1.94368,-1.82218 z m 5.0414,8.01767 c -1.86829,1.81567 -1.62997,5.17107 0.54666,6.80287 2.58292,1.93727 5.81565,0.68422 7.10656,-0.6074 0.66392,-0.66356 0.57592,-2.15087 -0.48592,-3.6444 -1.57518,0.81115 -3.6457,1.33536 -5.58806,-0.12148 -0.82081,-0.61535 -1.29544,-1.48388 -1.57924,-2.42959 z m -71.612353,0.24296 c -0.216533,0.15768 -0.17254,0.18708 -0.42518,0.36444 -3.501359,2.45861 -6.331704,4.7147 -10.325785,2.73329 -0.835138,-0.41433 -1.173493,-1.0297 -1.457758,-1.63998 -1.775949,2.19005 -2.210285,4.70572 0.425179,6.01325 3.994085,1.98138 6.824427,-0.27468 10.325787,-2.73329 3.50177,-2.45823 3.411658,-2.93899 3.158475,-3.88735 -0.166315,0.0444 -0.997334,-0.45265 -1.700718,-0.85036 z m 3.462175,4.79845 c -1.405193,1.67235 -2.355439,3.35411 -0.728879,4.98066 4.524009,4.52407 19.69882,-1.11019 16.946437,10.69022 6.109348,6.10935 18.859078,3.19384 27.39371,-2.91551 1.66654,-1.66656 0.69997,-2.58291 -0.668148,-3.40144 -8.458362,5.3473 -19.957869,7.67884 -25.692984,1.94368 2.752384,-11.8004 -12.422431,-6.16613 -16.946436,-10.69021 -0.198964,-0.19896 -0.172449,-0.40742 -0.3037,-0.6074 z"
style="fill:url(#linearGradient1231);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1271"
d="m 107.57531,47.365247 32.87711,35.325423 c 0,0 9.7932,10.492701 2.09856,14.68978 -7.69466,4.19708 -31.12834,10.4927 -31.12834,10.4927 L 68.830422,46.540402 Z"
style="fill:url(#linearGradient1272);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccc"
id="path1276"
d="M 56.944037,42.006087 26.165461,77.3315 c 0,0 -11.891721,10.4927 -4.197076,14.689777 7.694644,4.197078 58.409343,21.335153 94.084505,15.039533 L 75.13138,45.853409 Z"
style="fill:url(#linearGradient1277);fill-opacity:0.75;fill-rule:evenodd;stroke-width:1.49509335pt"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="ccccccccccczz"
id="path1317"
d="m 82.042498,27.12255 c 4.504479,0.03329 23.422692,18.434639 28.837322,22.230809 5.41464,3.796171 4.14478,6.285951 4.14478,6.523269 L 99.839631,48.527099 98.321133,60.006943 89.939024,56.058848 77.062155,64.683915 72.081482,47.67674 65.76453,62.558018 47.967732,64.319476 48.149952,56.423287 74.438456,30.540688 c 1.907291,-1.877842 3.182156,-3.451427 7.604042,-3.418138 z"
style="fill:url(#linearGradient1318);fill-rule:evenodd;stroke-width:1.30175579pt"
inkscape:connector-curvature="0" />
</g>
</g>
<g
inkscape:label="Title"
id="layer2"
inkscape:groupmode="layer">
<text
id="text48"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:51.20000076px;line-height:100%;font-family:Arial;writing-mode:lr-tb;text-anchor:start;display:block;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.20000017pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
y="74.666664"
x="48">
<tspan
id="tspan1"
sodipodi:role="line"
y="74.666664"
x="48"
style="stroke-width:3.20000017pt">Evolving inkscape_gtkmm</tspan>
</text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:25.60000038px;line-height:120.00000477%;font-family:Sans;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="58.404686"
y="181.17188"
id="text74"><tspan
id="tspan9"
sodipodi:role="line"
y="181.17188"
x="58.404686"
style="stroke-width:1.06666669pt">* Expand Inkscape::Application</tspan><tspan
id="tspan10"
sodipodi:role="line"
y="211.89188"
x="58.404686"
style="stroke-width:1.06666669pt"> + High level services (GC, args, paths)</tspan><tspan
id="tspan11"
sodipodi:role="line"
y="242.61188"
x="58.404686"
style="stroke-width:1.06666669pt"> + Registries (extensions, prefs, etc.)</tspan><tspan
id="tspan12"
sodipodi:role="line"
y="273.33188"
x="58.404686"
style="stroke-width:1.06666669pt" /><tspan
id="tspan13"
sodipodi:role="line"
y="304.05188"
x="58.404686"
style="stroke-width:1.06666669pt">* Create new Inkscape::Application::RunMode</tspan><tspan
id="tspan14"
sodipodi:role="line"
y="334.77188"
x="58.404686"
style="stroke-width:1.06666669pt"> + Abstract base class</tspan><tspan
id="tspan15"
sodipodi:role="line"
y="365.49188"
x="58.404686"
style="stroke-width:1.06666669pt" /><tspan
id="tspan16"
sodipodi:role="line"
y="396.21188"
x="58.404686"
style="stroke-width:1.06666669pt">* Refactor Inkscape::Application::ApplicationImpl</tspan><tspan
id="tspan17"
sodipodi:role="line"
y="426.93188"
x="58.404686"
style="stroke-width:1.06666669pt"> + Rename it to Inkscape::Application::Editor</tspan><tspan
id="tspan18"
sodipodi:role="line"
y="457.65189"
x="58.404686"
style="stroke-width:1.06666669pt"> + Make it subclass I::A::RunMode</tspan><tspan
id="tspan19"
sodipodi:role="line"
y="488.37189"
x="58.404686"
style="stroke-width:1.06666669pt"> + Move items from SPDesktop into here</tspan><tspan
id="tspan20"
sodipodi:role="line"
y="519.09192"
x="58.404686"
style="stroke-width:1.06666669pt" /><tspan
id="tspan21"
sodipodi:role="line"
y="549.81189"
x="58.404686"
style="stroke-width:1.06666669pt">* Create new Inkscape::Application::Cmdline</tspan><tspan
id="tspan22"
sodipodi:role="line"
y="580.53192"
x="58.404686"
style="stroke-width:1.06666669pt"> + Make it subclass I::A::RunMode</tspan><tspan
id="tspan23"
sodipodi:role="line"
y="611.25189"
x="58.404686"
style="stroke-width:1.06666669pt"> + Move stuff from main.cpp into here</tspan></text>
</g>
<g
inkscape:label="Drawing Area"
id="layer3"
inkscape:groupmode="layer" />
</svg>

After

Width:  |  Height:  |  Size: 41 KiB

BIN
doc/PDF Feature Matrix.ods Normal file

Binary file not shown.

568
doc/PDF Feature Matrix.svg Normal file
View file

@ -0,0 +1,568 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="816"
height="1056"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.92.0 r15304"
sodipodi:docname="PDF Feature Matrix.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.0"
sodipodi:modified="true">
<defs
id="defs4">
<linearGradient
id="linearGradient9302">
<stop
id="stop9304"
offset="0"
style="stop-color:red;stop-opacity:1;" />
<stop
style="stop-color:#7f7f00;stop-opacity:0;"
offset="0.5"
id="stop9308" />
<stop
id="stop9306"
offset="1"
style="stop-color:lime;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient5722">
<stop
style="stop-color:red;stop-opacity:1;"
offset="0"
id="stop5724" />
<stop
style="stop-color:lime;stop-opacity:1;"
offset="1"
id="stop5726" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5722"
id="linearGradient5728"
x1="337.36264"
y1="80.384155"
x2="467.03296"
y2="80.384155"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0666667,0,0,1.0666667,51.2,192)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5722"
id="linearGradient5734"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.94889067,0,0,0.83895573,272.70379,210.30432)"
x1="337.36264"
y1="80.384155"
x2="467.03296"
y2="80.384155" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5722"
id="radialGradient8399"
cx="81.318687"
cy="227.63692"
fx="81.318687"
fy="227.63692"
r="60.439564"
gradientTransform="matrix(1.0666667,0,0,0.82424213,51.2,247.18475)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5722"
id="radialGradient8409"
cx="245.05495"
cy="227.63692"
fx="245.05495"
fy="227.63692"
r="64.598351"
gradientTransform="matrix(1.0666667,0,0,0.78541333,51.2,256.02368)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient9302"
id="linearGradient8413"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0666667,0,0,1.0666667,54.716491,346.72523)"
x1="337.36264"
y1="80.384155"
x2="467.03296"
y2="80.384155" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5722"
id="linearGradient10205"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0666667,0,0,1.0666667,54.716491,346.72523)"
x1="56.043961"
y1="184.77975"
x2="138.46153"
y2="254.01053" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5722"
id="linearGradient10209"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0666667,0,0,1.0666667,54.716491,346.72523)"
x1="230.00603"
y1="200.08302"
x2="258.77368"
y2="229.91617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5722"
id="linearGradient10211"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0666667,0,0,1.0666667,54.716491,346.72523)"
x1="230.00603"
y1="200.08302"
x2="258.77368"
y2="229.91617" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5722"
id="linearGradient4993"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0666667,0,0,1.0666667,54.716491,346.72523)"
x1="56.043961"
y1="184.77975"
x2="138.46153"
y2="254.01053" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.69246595"
inkscape:cx="440.14605"
inkscape:cy="524.81516"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1280"
inkscape:window-height="949"
inkscape:window-x="0"
inkscape:window-y="25"
width="765px"
height="990px"
showgrid="false"
inkscape:window-maximized="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:14.71767521;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
d="m 244.22204,228.71274 h 77.43187 v 66.19174 h -77.43187 z"
id="rect2160"
inkscape:connector-curvature="0" />
<path
id="path3059"
d="m 274.90754,260.53475 h 77.43187 v 66.19174 h -77.43187 z"
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:14.71767521;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path3061"
d="m 81.212465,224.33827 h 86.195655 v 73.68337 H 81.212465 Z"
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:0.50196078;fill-rule:nonzero;stroke:none;stroke-width:27.62665558;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:0.50196078;fill-rule:nonzero;stroke:none;stroke-width:27.62665558;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
d="m 115.37098,259.76191 h 86.19564 v 73.68337 h -86.19564 z"
id="path3063"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient5728);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:27.62666702;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
id="rect4835"
width="128.93773"
height="99.633698"
x="411.0535"
y="227.92625" />
<rect
y="238.56108"
x="592.82385"
height="78.364021"
width="114.70103"
id="rect5730"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5734);stroke-width:23.10879707;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
<rect
y="384.99582"
x="73.471062"
height="99.633698"
width="128.93773"
id="rect7506"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8399);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:27.62666702;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient8409);stroke-width:23.10879707;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
id="rect7508"
width="114.70103"
height="78.364021"
x="255.24144"
y="395.63071" />
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:27.62666702;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
id="rect9310"
width="164.10257"
height="22.271063"
x="399.33188"
y="423.67715" />
<rect
y="382.65152"
x="414.56995"
height="99.633698"
width="128.93773"
id="rect8411"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8413);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:27.62666702;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient10209);stroke-width:17.06666756;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
d="m 261.34031,527.05124 h 77.43187 v 66.19177 h -77.43187 z"
id="path10197"
inkscape:connector-curvature="0" />
<path
id="path10199"
d="m 292.02581,558.87327 h 77.43188 V 625.065 h -77.43188 z"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient10211);stroke-width:17.06666756;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
id="path10201"
d="m 98.330731,522.67679 h 86.195659 v 73.68337 H 98.330731 Z"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient10205);fill-opacity:0.5;fill-rule:nonzero;stroke:none;stroke-width:27.62666702;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient4993);fill-opacity:0.5;fill-rule:nonzero;stroke:none;stroke-width:27.62666702;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
d="M 132.48924,558.10043 H 218.6849 V 631.7838 H 132.48924 Z"
id="path10203"
inkscape:connector-curvature="0" />
<image
sodipodi:absref="/home/nicolas/dev/bzr/inkscape/0.92-stable/doc/../share/tutorials/oldguitar.jpg"
xlink:href="../share/tutorials/oldguitar.jpg"
width="90.654945"
height="126.05669"
id="image12884"
x="611.9754"
y="372.06854" />
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="298.526"
y="213.86032"
id="text12887"><tspan
sodipodi:role="line"
id="tspan12889"
x="298.526"
y="213.86032"
style="stroke-width:1.06666672">stroke-opacity (solid)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="127.39048"
y="215.03249"
id="text12891"><tspan
sodipodi:role="line"
id="tspan12893"
x="127.39048"
y="215.03249"
style="stroke-width:1.06666672">fill-opacity (solid)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="474.35019"
y="217.3768"
id="text12895"><tspan
sodipodi:role="line"
x="474.35019"
y="217.3768"
id="tspan12899"
style="stroke-width:1.06666672">linearGradient (fill)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="650.17438"
y="218.54898"
id="text12903"><tspan
sodipodi:role="line"
id="tspan12905"
x="650.17438"
y="218.54898"
style="stroke-width:1.06666672">linearGradient (stroke)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="136.76778"
y="377.96289"
id="text12907"><tspan
sodipodi:role="line"
id="tspan12909"
x="136.76778"
y="377.96289"
style="stroke-width:1.06666672">radialGradient (fill)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="309.07547"
y="374.44641"
id="text12911"><tspan
sodipodi:role="line"
id="tspan12913"
x="309.07547"
y="374.44641"
style="stroke-width:1.06666672">radialGradient (stroke)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="470.83368"
y="373.27423"
id="text12915"><tspan
sodipodi:role="line"
id="tspan12917"
x="470.83368"
y="373.27423"
style="stroke-width:1.06666672">stop-opacity</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="653.6908"
y="362.72479"
id="text12919"><tspan
sodipodi:role="line"
id="tspan12921"
x="653.6908"
y="362.72479"
style="stroke-width:1.06666672">image</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="130.90697"
y="512.76141"
id="text12923"><tspan
sodipodi:role="line"
id="tspan12925"
x="130.90697"
y="512.76141"
style="stroke-width:1.06666672">fill-opacity (gradient)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="302.04251"
y="510.41708"
id="text12927"><tspan
sodipodi:role="line"
id="tspan12929"
x="302.04251"
y="510.41708"
style="stroke-width:1.06666672">stroke-opacity (gradient)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36.12400436px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="480.3414"
y="589.09479"
id="text13816"><tspan
sodipodi:role="line"
id="tspan13818"
x="480.3414"
y="589.09479"
style="stroke-width:1.06666672">text</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot13820"
style="font-size:36.12400818px;stroke-width:3.01033378"><flowRegion
id="flowRegion13822"
style="stroke-width:3.01033378"><rect
id="rect13824"
width="251.41251"
height="119.09013"
x="590.67609"
y="551.11725"
style="stroke-width:9.06210995" /></flowRegion><flowPara
id="flowPara13826"
style="stroke-width:3.01033378">flowText</flowPara></flowRoot> <rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
id="rect13828"
width="100.80586"
height="78.534798"
x="134.84541"
y="712.38049" />
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
id="rect13830"
width="107.83883"
height="77.36264"
x="84.442497"
y="678.38776" />
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="138.45567"
y="664.9314"
id="text15602"><tspan
sodipodi:role="line"
id="tspan15604"
x="138.45567"
y="664.9314"
style="stroke-width:1.06666672">opacity (path)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="308.86444"
y="667.0647"
id="text15606"><tspan
sodipodi:role="line"
id="tspan15608"
x="308.86444"
y="667.0647"
style="stroke-width:1.06666672">opacity (image)*</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="489.58829"
y="663.97015"
id="text15610"><tspan
sodipodi:role="line"
id="tspan15612"
x="489.58829"
y="663.97015"
style="stroke-width:1.06666672">opacity (fill+stroke)</tspan></text>
<text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="666.58466"
y="659.28156"
id="text15614"><tspan
sodipodi:role="line"
id="tspan15616"
x="666.58466"
y="659.28156"
style="stroke-width:1.06666672">opacity (group)</tspan></text>
<image
sodipodi:absref="/home/nicolas/dev/bzr/inkscape/0.92-stable/doc/../share/tutorials/oldguitar.jpg"
xlink:href="../share/tutorials/oldguitar.jpg"
width="90.654945"
height="126.05669"
id="image15622"
x="293.14755"
y="719.02826" />
<image
sodipodi:absref="/home/nicolas/dev/bzr/inkscape/0.92-stable/doc/../share/tutorials/oldguitar.jpg"
xlink:href="../share/tutorials/oldguitar.jpg"
style="opacity:0.5"
y="685.03552"
x="259.15488"
id="image15618"
height="126.05669"
width="90.654945" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:32;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
d="m 539.99119,753.64055 c 0,26.85188 -22.84307,48.64471 -50.98901,48.64471 -28.14592,0 -50.989,-21.79283 -50.989,-48.64471 0,-26.85186 22.84308,-48.64469 50.989,-48.64469 28.14594,0 50.98901,21.79283 50.98901,48.64469 z"
id="path2323"
inkscape:connector-curvature="0" />
<g
id="g4989"
style="opacity:0.5"
transform="translate(51.2,192)">
<rect
y="526.62439"
x="586.08051"
height="79.409546"
width="104.32235"
id="rect4987"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:32;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:32;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
id="rect3215"
width="104.32235"
height="79.409546"
x="546.22711"
y="493.80389" />
</g>
<rect
style="color:#000000;font-family:'Bitstream Vera Sans';text-align:start;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:32;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
id="rect5013"
width="114.67231"
height="66.236717"
x="120.19363"
y="851.8985" />
<flowRoot
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.88000011px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.57333332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
id="flowRoot5015"><flowRegion
id="flowRegion5017"
style="stroke-width:0.57333332px"><use
x="0"
y="0"
xlink:href="#rect5013"
id="use5019"
transform="matrix(1.860465,0,0,1.860465,-143.2108,-713.9307)"
width="765"
height="990"
style="stroke-width:0.57333332px" /></flowRegion><flowPara
id="flowPara5025"
style="stroke-width:0.57333332px">*inkscape's rendering is slightly incorrect due to issues with alpha premultiplication. The important thing is that the upper left image should only be partly opaque, while the lower right image should be fully opaque.</flowPara></flowRoot> <text
xml:space="preserve"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:normal;font-family:'Bitstream Vera Sans';text-indent:0;text-align:center;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:middle;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
x="650.17438"
y="62.815639"
id="text2364"><tspan
sodipodi:role="line"
id="tspan2366"
x="650.17438"
y="62.815639"
style="stroke-width:1.06666672">stroke-dasharray</tspan></text>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.33333349;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:10.66666667, 5.33333333, 2.66666667, 5.33333333;stroke-dashoffset:0;stroke-opacity:1"
d="M 569.17359,77.853229 H 734.76537"
id="path4316"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.33333349;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:10.66666667, 5.33333333, 2.66666667, 5.33333333;stroke-dashoffset:0;stroke-opacity:1"
d="M 569.17359,90.653229 H 734.76537"
id="path4318"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.33333349;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:10.66666667, 5.33333333, 2.66666667, 5.33333333;stroke-dashoffset:0;stroke-opacity:1"
d="M 569.17359,103.45323 H 734.76537"
id="path4320"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.33333349;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:5.33333333, 21.33333333;stroke-dashoffset:0;stroke-opacity:1"
d="M 569.17359,133.31989 H 734.76537"
id="path4322"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.33333349;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:5.33333333, 21.33333333;stroke-dashoffset:0;stroke-opacity:1"
d="M 569.17359,146.11989 H 734.76537"
id="path4324"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.33333349;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:5.33333333, 21.33333333;stroke-dashoffset:0;stroke-opacity:1"
d="M 569.17359,158.91989 H 734.76537"
id="path4326"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 37 KiB

77
doc/README.document Normal file
View file

@ -0,0 +1,77 @@
31.03.2000
Well, we end with 2 basic objects:
SPDocument - the base of all nongraphical wizardry.
Although you can well do all things via repr tree, Document will have some
neat features:
Undo stack managing: start_undo_step, end_undo_step
Selection grabbing - we can select via reprs, which is otherwise impossible
NB! SPDocument is SPRepr ref holder NB!
SPDesktop - the base of all graphical wizardry
What follows, is outdated...
Document hierarchy
This is currently in active rewrite. Structure should be something like:
SPApp - main application thing, probably GnomeMDI in future
SPDesktop - one view to one document
SPDocument - SPItem tree rootmost element
SPItem tree refers to xml backbone (currently reprs) and Canvas trees.
Backbone does not know anything about other items/classes/objects. There
can be more than one canvas tree (desktop) associated with document.
There is (and should be more) event interconnection between different
objects.
Editing can be done to all three levels, but should end up with modifying
reprs. No other change will be saved.
1. Non-interactive modifications (for example changing object color)
These should be done directly to backbone. Probably I'll implement a separate
wrapper thing (sp-app-repr-interface.h or similar) to minimize the need
to include lot of headers for such modules. These will be also probably the
first interface to plugins.
Such modifications will instantly propagate to all items and views and will
be preserved when saving, duplicating & so on.
2. Interactive modifications to SPItems
These are a bit faster (no need of coding/decoding, allocing, freeing xml
attributes). Changes will display instantly to all views, but WILL NOT
propagate back to xml. The right way to use such things is:
When button pressed, grab mouse pointer
Do modifications to SPItem
When button released, write modifications to SPRepr
3. Interactive modifications to GnomeCanvasItems
These affect only the current display (desktop) and DO NOT propagate back
neither to SPItems, nor SPReprs. Use with same caution, as the class above.
Undo/Redo, when implemented, will be probably extracted from xml
There are several more things, like
SPSelection - a per desktop selection (selection.h)
Handful of canvas groups for grid, guidelines & so on (desktop.h)
Intermediate holders of currently modified data (all contexts)
SPNodepath (nodepath.h)
---------------------
Document == SPRoot
Provides convenience constructors
Selection { /* opaque */ }
Per desktop structure, pointing to selected items
Desktop {
Selection selection
Document document
}
macro ACTIVE_DESKTOP ;) gives current active desktop ;-)
There will be probably several macros to deduce affected desktop from
UI events (menus & so on)

826
doc/architecture.svg Normal file
View file

@ -0,0 +1,826 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg1"
sodipodi:version="0.32"
width="210mm"
height="297mm"
sodipodi:docname="architecture.svg"
inkscape:version="0.92.0 r15304"
xlink:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1">
<metadata
id="metadata35627">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3">
<marker
id="mArrow"
markerWidth="8"
markerHeight="10"
refX="0"
refY="0"
orient="auto">
<path
d="M 10.666667,4.2666667 C 10.666667,4.2666667 0,0 0,0 0,0 10.666667,-4.2666667 10.666667,-4.2666667"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="arrowMarkerPath"
sodipodi:nodetypes="cs"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
showborder="false"
showgrid="true"
snaptogrid="true"
inkscape:zoom="0.60132576"
inkscape:cx="396.85039"
inkscape:cy="361.70079"
inkscape:window-width="1261"
inkscape:window-height="894"
inkscape:window-x="15"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="svg1">
<inkscape:grid
id="GridFromPre046Settings"
type="xygrid"
originx="0"
originy="0"
spacingx="10.07874"
spacingy="10.07874"
color="#3f3fff"
empcolor="#3f3fff"
opacity="0.15"
empopacity="0.38"
empspacing="5" />
</sodipodi:namedview>
<path
style="font-size:12px;fill:#ff0000;fill-opacity:0.655629;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.30476589pt"
d="m 982.67707,451.65333 v 122.8352 h -28.34666 l 9.4496,18.89707 h -37.79627 l 9.4496,-18.89707 H 614.17361 l 9.44853,18.89707 h -37.7952 l 9.44853,-18.89707 -377.95306,-10e-4 9.44853,18.89813 h -37.7952 l 9.4496,-18.89813 -179.527786,-0.002 1.06e-4,-122.832 z"
id="path290"
sodipodi:nodetypes="ccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="font-size:12px;fill:#a80000;fill-opacity:0.655629;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.29627947pt"
d="m 396.85035,574.48779 v 28.34773 l -18.89814,-9.4496 v 37.7952 l 18.89814,-9.44853 v 47.24266 l 198.4256,0.001 -9.4496,18.89813 h 37.7952 l -9.44854,-18.89813 h 179.52747 v -37.7952 l 18.89813,9.44853 v -37.7952 l -18.89813,9.44854 v -37.79414 l -179.52747,-10e-4 9.44854,18.89813 h -37.7952 l 9.4496,-18.89813 z"
id="path814"
sodipodi:nodetypes="ccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<text
style="font-style:normal;font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;stroke-width:1.06666669pt"
x="406.29922"
y="590.91705"
id="text230">
<tspan
x="406.29922"
y="590.91705"
sodipodi:role="line"
id="tspan305"
style="stroke-width:1.06666669pt">Module subsystem</tspan>
<tspan
x="406.29922"
y="603.71704"
sodipodi:role="line"
id="tspan307"
style="stroke-width:1.06666669pt">(src/modules/*)</tspan>
<tspan
x="406.29922"
y="616.51703"
sodipodi:role="line"
id="tspan309"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';stroke-width:1.06666669pt"
x="415.74805"
y="625.47028"
id="text566">
<tspan
x="415.74805"
y="625.47028"
sodipodi:role="line"
id="tspan587"
style="stroke-width:1.06666669pt">SPModules (aka plugins) handle filtering, input and export of</tspan>
<tspan
x="415.74805"
y="636.13696"
sodipodi:role="line"
id="tspan589"
style="stroke-width:1.06666669pt">SPModuleDocs (wrapped SPDocuments) and to eventually</tspan>
<tspan
x="415.74805"
y="646.80359"
sodipodi:role="line"
id="tspan591"
style="stroke-width:1.06666669pt">encompass more functionality like e.g. providing tool</tspan>
<tspan
x="415.74805"
y="657.47028"
sodipodi:role="line"
id="tspan593"
style="stroke-width:1.06666669pt">implementations.</tspan>
</text>
<path
style="font-size:12px;fill:#a85500;fill-opacity:0.655629;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.30476589pt"
d="m 396.85013,574.48853 v 28.3456 l -18.89706,-9.44853 v 37.7952 l 18.89706,-9.44853 v 103.93706 l 18.89814,-9.44853 v 37.7952 l -18.89814,-9.44853 V 820.1568 H 217.32267 l 9.44853,18.89813 H 188.976 L 198.4256,820.1568 18.897813,820.1548 18.8976,574.48866 h 179.528 l -9.4496,18.89707 h 37.7952 l -9.44853,-18.89707 z"
id="path810"
sodipodi:nodetypes="ccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="font-size:12px;fill:#0055a9;fill-opacity:0.655629;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.29627947pt"
d="m 396.85013,1009.1339 v 28.3477 l -18.89706,-9.4507 v 37.7963 l 18.89706,-9.4485 v 28.3466 h 396.85014 v -75.5914 H 519.68533 l 9.44854,18.8981 h -37.7952 l 9.44853,-18.8981 z"
id="path806"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="font-size:12px;fill:#00a7a8;fill-opacity:0.655629;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.30476589pt"
d="M 793.70027,895.74827 V 1009.1339 H 519.68533 l 9.44854,18.8981 h -37.7952 l 9.44853,-18.8981 H 217.32267 l 9.44853,18.8981 H 188.976 l 9.4496,-18.8981 H 18.897813 L 18.8976,895.75047 h 179.528 l -9.4496,18.89706 h 37.7952 l -9.44853,-18.89706 h 387.4016 l -9.44854,18.89706 h 37.7952 l -9.44853,-18.89706 z"
id="path804"
sodipodi:nodetypes="ccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<path
style="font-size:12px;fill:#5400a8;fill-opacity:0.655629;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.29627947pt"
d="m 396.85013,1084.7253 v -28.3477 l -18.89706,9.4496 v -37.7952 l 18.89706,9.4485 v -28.3466 H 217.32267 l 9.44853,18.8981 H 188.976 l 9.4496,-18.8981 H 18.897813 l -2.13e-4,75.5914 z"
id="path802"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<text
style="font-style:normal;font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="32.301373"
y="1026.1064"
id="text15">
<tspan
x="32.301373"
y="1026.1064"
sodipodi:role="line"
id="tspan835"
style="stroke-width:1.06666669pt">New Renderer</tspan>
<tspan
x="32.301373"
y="1038.9065"
sodipodi:role="line"
id="tspan837"
style="stroke-width:1.06666669pt">(src/libnr/*)</tspan>
<tspan
x="32.301373"
y="1051.7064"
sodipodi:role="line"
id="tspan839"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="406.4422"
y="1044.6467"
id="text25">
<tspan
x="406.4422"
y="1044.6467"
sodipodi:role="line"
id="tspan797"
style="stroke-width:1.06666669pt">New Renderer Typesetting (src/libnr/libnrtype/*)</tspan>
<tspan
x="406.4422"
y="1057.4468"
sodipodi:role="line"
id="tspan799"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="27.821459"
y="918.27454"
id="text28">
<tspan
x="27.821459"
y="918.27454"
sodipodi:role="line"
id="tspan821"
style="stroke-width:1.06666669pt">Display Glue</tspan>
<tspan
x="27.821459"
y="931.07452"
sodipodi:role="line"
id="tspan823"
style="stroke-width:1.06666669pt">(src/display/*)</tspan>
<tspan
x="27.821459"
y="943.87451"
sodipodi:role="line"
id="tspan825"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="29.362036"
y="593.8811"
id="text189">
<tspan
x="29.362036"
y="593.8811"
sodipodi:role="line"
id="tspan815"
style="stroke-width:1.06666669pt">View subsystem</tspan>
<tspan
x="29.362036"
y="606.68109"
sodipodi:role="line"
id="tspan817"
style="stroke-width:1.06666669pt">(src/view.*, src/desktop*.*, src/svg-view.* and others)</tspan>
<tspan
x="29.362036"
y="619.48108"
sodipodi:role="line"
id="tspan819"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="37.347359"
y="652.9516"
id="text685">
<tspan
x="37.347359"
y="652.9516"
sodipodi:role="line"
id="tspan642"
style="stroke-width:1.06666669pt">SPView is an abstract class representing a &quot;view&quot; of an SPDocument. It</tspan>
<tspan
x="37.347359"
y="663.61829"
sodipodi:role="line"
id="tspan644"
style="stroke-width:1.06666669pt">has a companion SPViewWidget class for the associated display widget.</tspan>
<tspan
x="37.347359"
y="674.28491"
sodipodi:role="line"
id="tspan646"
style="stroke-width:1.06666669pt" />
<tspan
x="37.347359"
y="684.9516"
sodipodi:role="line"
id="tspan648"
style="stroke-width:1.06666669pt">SPDesktop is an editable SPView, and SPSVGView is a display-only view</tspan>
<tspan
x="37.347359"
y="695.61829"
sodipodi:role="line"
id="tspan650"
style="stroke-width:1.06666669pt">(e.g. the about box). Both maintain an SPCanvas and provide an</tspan>
<tspan
x="37.347359"
y="706.28491"
sodipodi:role="line"
id="tspan652"
style="stroke-width:1.06666669pt">SPCanvasArena for SPObjects to display on. They have associated</tspan>
<tspan
x="37.347359"
y="716.9516"
sodipodi:role="line"
id="tspan654"
style="stroke-width:1.06666669pt">SPViewWidget subclasses: SPDesktopWidget and SPSVGViewWidget.</tspan>
<tspan
x="37.347359"
y="727.61829"
sodipodi:role="line"
id="tspan656"
style="stroke-width:1.06666669pt">SPDesktop is also responsible for maintaining the current selection in</tspan>
<tspan
x="37.347359"
y="738.28491"
sodipodi:role="line"
id="tspan658"
style="stroke-width:1.06666669pt">an SPSelection.</tspan>
<tspan
x="37.347359"
y="748.9516"
sodipodi:role="line"
id="tspan660"
style="stroke-width:1.06666669pt" />
<tspan
x="37.347359"
y="759.61829"
sodipodi:role="line"
id="tspan662"
style="stroke-width:1.06666669pt">SPDesktopWidget isn't just a bare canvas; it includes the scrollbars and</tspan>
<tspan
x="37.347359"
y="770.28491"
sodipodi:role="line"
id="tspan664"
style="stroke-width:1.06666669pt">other decorations.</tspan>
<tspan
x="37.347359"
y="780.9516"
sodipodi:role="line"
id="tspan666"
style="stroke-width:1.06666669pt" />
<tspan
x="37.347359"
y="791.61829"
sodipodi:role="line"
id="tspan668"
style="stroke-width:1.06666669pt">SPEventContexts handle tool state and interaction.</tspan>
<tspan
x="37.347359"
y="802.28491"
sodipodi:role="line"
id="tspan670"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="37.836384"
y="948.54315"
id="text730">
<tspan
x="37.836384"
y="948.54315"
sodipodi:role="line"
id="tspan737"
style="stroke-width:1.06666669pt">This subsystem provides a lightweight arena abstraction.</tspan>
<tspan
x="37.836384"
y="959.20984"
sodipodi:role="line"
id="tspan739"
style="stroke-width:1.06666669pt" />
<tspan
x="37.836384"
y="969.87646"
sodipodi:role="line"
id="tspan741"
style="stroke-width:1.06666669pt">NRArena - a collection of lightweight renderable NRArenaItems.</tspan>
<tspan
x="37.836384"
y="980.54315"
sodipodi:role="line"
id="tspan743"
style="stroke-width:1.06666669pt" />
<tspan
x="37.836384"
y="991.20984"
sodipodi:role="line"
id="tspan745"
style="stroke-width:1.06666669pt">SPCanvasArena - an SPCanvasItem that renders the contents of an</tspan>
<tspan
x="37.836384"
y="1001.8765"
sodipodi:role="line"
id="tspan747"
style="stroke-width:1.06666669pt">NRArena.</tspan>
<tspan
x="37.836384"
y="1012.5432"
sodipodi:role="line"
id="tspan749"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="37.691109"
y="1055.1531"
id="text755">
<tspan
x="37.691109"
y="1055.1531"
sodipodi:role="line"
id="tspan768"
style="stroke-width:1.06666669pt">The new rendering subsystem mostly replaces libart. It renders</tspan>
<tspan
x="37.691109"
y="1065.8197"
sodipodi:role="line"
id="tspan770"
style="stroke-width:1.06666669pt">filled/stroked bezier curves and polygons into NRPixBlocks (image</tspan>
<tspan
x="37.691109"
y="1076.4865"
sodipodi:role="line"
id="tspan772"
style="stroke-width:1.06666669pt">buffers)</tspan>
<tspan
x="37.691109"
y="1087.1531"
sodipodi:role="line"
id="tspan774"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666669pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="419.53137"
y="1064.4839"
id="text780">
<tspan
x="419.53137"
y="1064.4839"
sodipodi:role="line"
id="tspan791"
style="stroke-width:1.06666669pt">Adaptor routines for using Xft, Win32, Gnome, and Freetype 2 to manage</tspan>
<tspan
x="419.53137"
y="1075.1505"
sodipodi:role="line"
id="tspan793"
style="stroke-width:1.06666669pt">font metrics and outlines.</tspan>
<tspan
x="419.53137"
y="1085.8173"
sodipodi:role="line"
id="tspan795"
style="stroke-width:1.06666669pt" />
</text>
<path
style="font-size:12px;fill:#00a800;fill-opacity:0.655629;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.30476589pt"
d="m 396.85038,820.1568 v 75.5904 H 217.32292 l 9.44853,18.89813 h -37.7952 l 9.4496,-18.89813 -179.52736,-0.002 -8.53e-4,-75.58827 H 198.42585 l -9.4496,18.89707 h 37.7952 l -9.44853,-18.89707 z"
id="path809"
sodipodi:nodetypes="ccccccccccccc"
inkscape:connector-curvature="0" />
<text
style="font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';stroke-width:1.06666669pt"
x="37.170525"
y="873.45007"
id="text22">
<tspan
x="37.170525"
y="873.45007"
sodipodi:role="line"
id="tspan456"
style="stroke-width:1.06666669pt">SPCanvas - handles input events</tspan>
<tspan
x="37.170525"
y="884.11676"
sodipodi:role="line"
id="tspan458"
style="stroke-width:1.06666669pt">SPCanvasItem - objects that can be displayed on SPCanvas</tspan>
<tspan
x="37.170525"
y="894.78339"
sodipodi:role="line"
id="tspan460"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';stroke-width:1.06666669pt"
x="29.741482"
y="842.68378"
id="text439">
<tspan
x="29.741482"
y="842.68378"
sodipodi:role="line"
id="tspan827"
style="stroke-width:1.06666669pt">SVG Canvas</tspan>
<tspan
x="29.741482"
y="855.48376"
sodipodi:role="line"
id="tspan829"
style="stroke-width:1.06666669pt">(src/helper/sp-canvas*)</tspan>
<tspan
x="29.741482"
y="868.28375"
sodipodi:role="line"
id="tspan831"
style="stroke-width:1.06666669pt" />
<tspan
x="29.741482"
y="881.0838"
sodipodi:role="line"
id="tspan833"
style="stroke-width:1.06666669pt" />
</text>
<path
style="font-size:12px;fill:#a85555;fill-opacity:0.655629;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.30476589pt"
d="m 793.70027,668.97635 v 56.69227 l 18.89813,-9.44853 v 37.7952 l -18.89813,-9.44854 10e-4,151.1808 H 623.6224 l 9.44853,18.89814 h -37.7952 l 9.44854,-18.89814 H 396.85038 l -5.3e-4,-151.17866 18.89767,9.4496 v -37.7952 l -18.89767,9.44853 v -56.69333 l 198.42588,-0.002 -9.4496,18.89707 h 37.7952 l -9.44853,-18.89707 z"
id="path808"
sodipodi:nodetypes="ccccccccccccccccccccc"
inkscape:connector-curvature="0" />
<text
style="font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';stroke-width:1.06666669pt"
x="412.71274"
y="691.50287"
id="text156">
<tspan
x="412.71274"
y="691.50287"
sodipodi:role="line"
id="tspan841"
style="stroke-width:1.06666669pt">SVG document model</tspan>
<tspan
x="412.71274"
y="704.30286"
sodipodi:role="line"
id="tspan843"
style="stroke-width:1.06666669pt">(src/sp-*.h and others)</tspan>
<tspan
x="412.71274"
y="717.10284"
sodipodi:role="line"
id="tspan845"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';stroke-width:1.06666669pt"
x="425.19684"
y="723.18781"
id="text468">
<tspan
x="425.19684"
y="723.18781"
sodipodi:role="line"
id="tspan521"
style="stroke-width:1.06666669pt">Enforces validity constraints on the SPRepr document.</tspan>
<tspan
x="425.19684"
y="733.85449"
sodipodi:role="line"
id="tspan523"
style="stroke-width:1.06666669pt" />
<tspan
x="425.19684"
y="744.52112"
sodipodi:role="line"
id="tspan525"
style="stroke-width:1.06666669pt">SPDocument - an SVG document containing SPObjects.</tspan>
<tspan
x="425.19684"
y="755.18781"
sodipodi:role="line"
id="tspan527"
style="stroke-width:1.06666669pt" />
<tspan
x="425.19684"
y="765.85449"
sodipodi:role="line"
id="tspan529"
style="stroke-width:1.06666669pt">SPObjects - handles short term changes &amp; propagates</tspan>
<tspan
x="425.19684"
y="776.52112"
sodipodi:role="line"
id="tspan531"
style="stroke-width:1.06666669pt">longer term ones to the SPRepr</tspan>
<tspan
x="425.19684"
y="787.18781"
sodipodi:role="line"
id="tspan533"
style="stroke-width:1.06666669pt" />
<tspan
x="425.19684"
y="797.85449"
sodipodi:role="line"
id="tspan535"
style="stroke-width:1.06666669pt">SPItems - SPObjects that can be rendered. They have hide() and show()</tspan>
<tspan
x="425.19684"
y="808.52112"
sodipodi:role="line"
id="tspan537"
style="stroke-width:1.06666669pt">methods for creating an associated NRArenaItem in a given NRArena.</tspan>
<tspan
x="425.19684"
y="819.18781"
sodipodi:role="line"
id="tspan539"
style="stroke-width:1.06666669pt" />
</text>
<path
style="font-size:12px;fill:#a80055;fill-opacity:0.655629;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.29627947pt"
d="m 793.70027,574.48853 v 37.79734 l 18.89706,-9.4496 v 37.7952 l -18.89706,-9.4496 v 94.48853 l 18.89813,-9.4496 v 37.7952 l -18.89813,-9.44853 V 895.7472 H 982.67733 V 574.48853 h -28.34666 l 9.44853,18.89707 H 925.984 l 9.4496,-18.89707 z"
id="path813"
sodipodi:nodetypes="ccccccccccccccccc"
inkscape:connector-curvature="0" />
<text
style="font-style:normal;font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;stroke-width:1.06666669pt"
x="821.74103"
y="597.55847"
id="text163">
<tspan
x="821.74103"
y="597.55847"
sodipodi:role="line"
id="tspan341"
style="stroke-width:1.06666669pt">XML doc model</tspan>
<tspan
x="821.74103"
y="610.35846"
sodipodi:role="line"
id="tspan343"
style="stroke-width:1.06666669pt">(src/xml/*)</tspan>
<tspan
x="821.74103"
y="623.15845"
sodipodi:role="line"
id="tspan345"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;stroke-width:1.06666669pt"
x="834.27472"
y="636.00671"
id="text541">
<tspan
x="834.27472"
y="636.00671"
sodipodi:role="line"
id="tspan362"
style="stroke-width:1.06666669pt">SPRepr - node in an XML</tspan>
<tspan
x="834.27472"
y="646.6734"
sodipodi:role="line"
id="tspan364"
style="stroke-width:1.06666669pt">document (elements,</tspan>
<tspan
x="834.27472"
y="657.34003"
sodipodi:role="line"
id="tspan366"
style="stroke-width:1.06666669pt">attributes, and text nodes).</tspan>
<tspan
x="834.27472"
y="668.00671"
sodipodi:role="line"
id="tspan368"
style="stroke-width:1.06666669pt">Transactions are logged</tspan>
<tspan
x="834.27472"
y="678.6734"
sodipodi:role="line"
id="tspan370"
style="stroke-width:1.06666669pt">for replaying/undoing</tspan>
<tspan
x="834.27472"
y="689.34003"
sodipodi:role="line"
id="tspan372"
style="stroke-width:1.06666669pt">changes.</tspan>
</text>
<text
style="font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';stroke-width:1.06666669pt"
x="802.54327"
y="923.96442"
id="text270">
<tspan
x="802.54327"
y="923.96442"
sodipodi:role="line"
id="tspan714"
style="stroke-width:1.06666669pt">Cruft subsystem - (src/svg/*)</tspan>
<tspan
x="802.54327"
y="936.7644"
sodipodi:role="line"
id="tspan716"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';stroke-width:1.06666669pt"
x="828.10785"
y="948.66235"
id="text723">
<tspan
x="828.10785"
y="948.66235"
sodipodi:role="line"
id="tspan708"
style="stroke-width:1.06666669pt">Assorted stuff left over from</tspan>
<tspan
sodipodi:role="line"
id="tspan794"
x="828.10785"
y="959.32904"
style="stroke-width:1.06666669pt">when Sodipodi forked from</tspan>
<tspan
sodipodi:role="line"
id="tspan796"
x="828.10785"
y="969.99567"
style="stroke-width:1.06666669pt">Gill which doesn't have a better</tspan>
<tspan
sodipodi:role="line"
id="tspan800"
x="828.10785"
y="980.66235"
style="stroke-width:1.06666669pt">home.</tspan>
</text>
<text
style="font-style:normal;font-weight:bold;font-size:12.80000019px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;stroke-width:1.06666669pt"
x="27.533974"
y="477.37494"
id="text257">
<tspan
x="27.533974"
y="477.37494"
sodipodi:role="line"
id="tspan358"
style="stroke-width:1.06666669pt">Inkscape Graphical User Interface (src/widgets, src/dialogs)</tspan>
<tspan
x="27.533974"
y="490.17493"
sodipodi:role="line"
id="tspan360"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;stroke-width:1.06666669pt"
x="37.795277"
y="532.19989"
id="text676">
<tspan
x="37.795277"
y="532.19989"
sodipodi:role="line"
id="tspan318"
style="stroke-width:1.06666669pt">widgets/* - Utilities and custom widgets to assist in implementing</tspan>
<tspan
x="37.795277"
y="542.86658"
sodipodi:role="line"
id="tspan320"
style="stroke-width:1.06666669pt">the Inkscape GUI and to enforce a common look and feel style</tspan>
<tspan
x="37.795277"
y="553.5332"
sodipodi:role="line"
id="tspan322"
style="stroke-width:1.06666669pt">across the application.</tspan>
<tspan
x="37.795277"
y="564.19989"
sodipodi:role="line"
id="tspan324"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;stroke-width:1.06666669pt"
x="37.795277"
y="494.40463"
id="text326">
<tspan
x="37.795277"
y="494.40463"
sodipodi:role="line"
id="tspan335"
style="stroke-width:1.06666669pt">dialogs/* - Code for creating the various UI dialogs in the</tspan>
<tspan
x="37.795277"
y="505.07129"
sodipodi:role="line"
id="tspan337"
style="stroke-width:1.06666669pt">application.</tspan>
<tspan
x="37.795277"
y="515.73798"
sodipodi:role="line"
id="tspan339"
style="stroke-width:1.06666669pt" />
</text>
<text
style="font-style:normal;font-weight:normal;font-size:10.66666698px;line-height:100%;font-family:'Luxi Sans';writing-mode:lr-tb;text-anchor:start;stroke-width:1.06666669pt"
x="811.09766"
y="514.38989"
id="text347">
<tspan
x="811.09766"
y="514.38989"
sodipodi:role="line"
id="tspan374"
style="stroke-width:1.06666669pt">dialogs/xml-tree.* - Code for</tspan>
<tspan
x="811.09766"
y="525.05658"
sodipodi:role="line"
id="tspan376"
style="stroke-width:1.06666669pt">creating and maintaining an</tspan>
<tspan
x="811.09766"
y="535.72321"
sodipodi:role="line"
id="tspan378"
style="stroke-width:1.06666669pt">interface for editing XML trees.</tspan>
</text>
</svg>

After

Width:  |  Height:  |  Size: 29 KiB

490
doc/architecture.txt Normal file
View file

@ -0,0 +1,490 @@
Sodipodi internal architecture
1. Overview
The Sodipodi display and editing engine is built using the
"Model-View-Controller" (MVC) paradigm. Unlike "classic" MVC
programs, we have further split model into two distinct layers,
'backbone' and 'document'. This has proven to be extremely powerful
technique, giving us clear and fast implementation, functional
granularity and easy expandibility.
1.1. Agnostic XML backbone
The basis of the sodipodi document is its plain XML representation in
memory. This is a tree-shaped structure, in which each node is
represented by a lightweight typeless object (SPRepr). These objects
implement a minimal interface of both control (methods) and mutation
events (callbacks). We use the term 'agnostic' for describing that
part of model, to underline the typeless nature of SPRepr. More or
less, this is just an XML file representation in memory.
1.2. Typed SVG document
The most actively used part of the sodipodi document model is the SVG
object tree. This is constructed on top of the XML tree, and reacts to
all mutation events in the agnostic tree, thus always keeping its
internal state synchronized with the backbone. The opposite is not
true - the XML backbone is not aware of the SVG object tree, and thus
does not react to its modifications. If writeback to the backbone is
needed, it must be requested explicitly by the controller. The SVG
tree is constructed of SPObject subclasses - in general there is one
subclass for each SVG element type, plus abstract base classes.
1.3. NRArena view
NRarena is an abstract display engine that allows construction of
'display caches' from NRArenaItem subclasses. These are lightweight,
having only some basic object types, and used for most of the display
needs of Sodipodi. Both the editing window, and the bitmap export
code create special NRArena instances, and ask the SVG document to
show itself to the given NRArena. There is a ::show virtual method,
implemented by all visible object classes, that adds an NRArenaItem
node to the display tree. The completed display cache is used for fast
screen updates and stripe based bitmap exports. During the NRArena
lifetime SVG objects keep all of the display cache elements constantly
updated, thus ensuring the display is always up to date.
1.4. Controllers
Like the model suggests, controllers can be implemented acting on
different layers. Which one is best depends on the type of action
that the given controller performs. Usually very generic and
single-shot operating controllers act on the SPRepr layer, while those
providing visual feedback or tied to a certain object type act on the
SPObject layer.
2. Detailed view
2.1. SPRepr
The most basic SVG (XML) document backbone is implemented as an
in-memory tree of SPRepr objects, each object corresponding to a
single node in the XML file. Currently there are only two types of
SPReprs - normal element nodes and text nodes. More types may be
added in the future, but the structure will probably always remain
much simpler (and faster) than DOM.
SPRepr may have:
- attributes (keyword/value) pairs
- content (text)
- child nodes
Attribute values are textual, and no checks are performed in that
layer to ensure document validity. Also, CSS style strings are
unparsed in that layer. The SPRepr tree is built during document
loading or creation. As it is textual and always synchronized with the
display, unfiltered saving involves just dumping it into a file.
The basic API acting on SPRepr level is really spartan.
SPRepr *sp_repr_new (const unsigned char *name)
SPRepr *sp_repr_new_text (const unsigned char *content)
SPRepr *sp_repr_ref (SPRepr *repr)
SPRepr *sp_repr_unref (SPRepr *repr)
SPRepr *sp_repr_duplicate (SPRepr *repr)
int sp_repr_set_content (SPRepr *repr, const unsigned char *content)
int sp_repr_set_attr (SPRepr *repr, const unsigned char *key, const unsigned char *value)
int sp_repr_add_child (SPRepr *repr, SPRepr *child, SPRepr *ref)
int sp_repr_remove_child (SPRepr *repr, SPRepr *child)
int sp_repr_change_order (SPRepr *repr, SPRepr *child, SPRepr *ref)
In addition there are some accessor methods and lot of convenience ones.
Each SPRepr can have one or many event vectors associated with it.
Event vector is a block of callback pointers for different kind of
mutation events.
void sp_repr_add_listener (SPRepr *repr, const SPReprEventVector *vector, void *data)
void sp_repr_remove_listener_by_data (SPRepr *repr, void *data)
struct _SPReprEventVector {
void (* destroy) (SPRepr *repr, gpointer data);
gboolean (* add_child) (SPRepr *repr, SPRepr *child, SPRepr *ref, gpointer data);
void (* child_added) (SPRepr *repr, SPRepr *child, SPRepr *ref, gpointer data);
gboolean (* remove_child) (SPRepr *repr, SPRepr *child, SPRepr *ref, gpointer data);
void (* child_removed) (SPRepr *repr, SPRepr *child, SPRepr *ref, gpointer data);
gboolean (* change_attr) (SPRepr *repr, const guchar *key, const guchar *oldval, const guchar *newval, gpointer data);
void (* attr_changed) (SPRepr *repr, const guchar *key, const guchar *oldval, const guchar *newval, gpointer data);
gboolean (* change_content) (SPRepr *repr, const guchar *oldcontent, const guchar *newcontent, gpointer data);
void (* content_changed) (SPRepr *repr, const guchar *oldcontent, const guchar *newcontent, gpointer data);
gboolean (* change_order) (SPRepr *repr, SPRepr *child, SPRepr *oldref, SPRepr *newref, gpointer data);
void (* order_changed) (SPRepr *repr, SPRepr *child, SPRepr *oldref, SPRepr *newref, gpointer data);
}
All events, except destroys (which are unconditional), have pre- and
post- event callbacks. The pre-event callback's return value is used to
signal whether the given modification is allowed. If it is FALSE the
operation will be cancelled and the invoking method will also return
FALSE. Using callbacks in block is much more convenient than adding
them one-by-one, as the listening code usually wants to install several
handlers at once, and the same set of handlers for many different
nodes. NULL pointers are allowed in event vector.
Although the most important functionality of the SPRepr tree is to
serve as a document backbone, it has other functions besides
that. SPReprs are also used to store preferences, the copy buffer and
the undo stack.
2.2. SPObject
SPObject is an abstract base class of all of the document nodes at the
SVG document level. Each SPObject subclass implements a certain SVG
element node type, or is an abstract base class for different node
types. The SPObject layer is bound to the SPRepr layer, closely
following the SPRepr mutations via callbacks. During creation,
SPObject parses and interprets all textual attributes and CSS style
strings of the SPRepr, and later updates the internal state whenever
it receives a signal about a change. The opposite is not true - there
are methods manipulating SPObjects directly and such changes do not
propagate to the SPRepr layer. This is important for implementation of
the undo stack, animations and other features.
SPObjects are bound to the higher-level container SPDocument, which
provides document level functionality such as the undo stack,
dictionary and so on.
SPObjects are implemented using the Gtk object system (GObjects in gtk
2 version), which provides an extremely powerful and flexible OO
framework in pure C.
SPObject class hierarchy
SPObject ABSTRACT
SPObjectGroup ABSTRACT
SPNamedView <sodipodi:namedview>
SPClipPath <clipPath>
SPGuide <sodipodi:guide>
SPPaintServer ABSTRACT
SPGradient ABSTRACT
SPLinearGradient <linearGradient>
SPRadialGradient <radialGradient>
SPPattern <pattern>
SPDefs <defs>
SPItem ABSTRACT
SPGroup <g>
SPRoot <svg>
SPAnchor <a>
SPImage <image>
SPPath ABSTARCT
SPShape <path>
SPLine <line>
SPPolyLine <polyline>
SPPolygon <polygon>
SPStar <sodipodi:star>
SPRect <rect>
SPSpiral <sodipodi:spiral>
SPGenericEllipse ABSTRACT
SPCircle <circle>
SPEllipse <ellipse>
SPArc <sodipodi:arc>
SPChars ABSTRACT
SPString TEXT NODE
SPDefs <defs>
SPText <text>
SPTSpan <tspan>
SPObject internals
struct _SPObject {
GtkObject object;
unsigned int hrefcount;
SPDocument *document;
SPObject *parent;
SPObject *next;
SPRepr *repr;
unsigned char *id;
SPStyle *style;
const unsigned char *title;
const unsigned char *description;
};
The basic refcounting is handled by the parent class
(GtkObject). Hrefcount is used for weak references, for example, to
determine whether any graphical element references a certain gradient
node. The parent and next fields are used to establish the tree
structure. Id is copy of the SPRepr 'id' attribute for normal nodes,
and is used as a unique index of all objects in the given document.
Virtual methods
/******** Disclaimer *******/
This will change a lot in the future
void ::build (SPObject *object, SPDocument *document, SPRepr *repr)
This has to be invoked immediately after creation of an SPObject. The
frontend method ensures that the new object is properly attached to
the document and repr; implementation then will parse all of the attributes,
generate the children objects and so on. Invoking ::build on the SPRoot
object results in creation of the whole document tree (this is, what
SPDocument does after the creation of the XML tree).
void ::release (SPObject *object)
This is the opposite of ::build. It has to be invoked as soon as the
object is removed from the tree, even if it is still alive according
to reference count. The frontend unregisters the object from the
document and releases the SPRepr bindings; implementations should free
state data and release all child objects. Invoking ::release on
SPRoot destroys the whole document tree.
void ::child_added (SPObject *object, SPRepr *child, SPRepr *ref)
void ::remove_child (SPObject *object, SPRepr *child)
void ::order_changed (SPObject *object, SPRepr *repr, SPRepr *oldref, SPRepr *newref)
These are invoked whenever the given mutation event happens in the XML
tree. ::remove_child is invoked BEFORE removal from the XML tree
happens, so grouping objects can safely release the child data. The
other two will be invoked AFTER the actual XML tree mutation. Only
grouping objects have to implement these.
void ::read_attr (SPObject *object, const unsigned char *key)
Signals object that the XML attribute is changed. The frontend checks
for 'id' attribute; implementations have to read the actual attribute
value and update the internal state.
void ::read_content (SPObject *object)
Signals object that the XML node content has changed. Only meaningful for
SPString implementing XML TEXT node.
void ::modified (SPObject *object, unsigned int flags)
Virtual method AND signal implementing asynchronous state change
notification. Whenever the object internal state changes, it requests
that ::modified will be scheduled from the idle loop. Flags are given
as hints as to what exactly changes. Read the relevant section for
more information.
SPRepr ::write (SPObject *object, SPRepr *repr, unsigned int flags)
Requests SPObject internal state to be written back to the SPRepr. If
the SP_OBJECT_WRITE_BUILD flag is set, SPRepr is created, if necessary.
This is used at various places, most notably to generate a plain SVG
document, and to complete certain GUI operations.
2.3. SPItem
SPItem is an abstract base class for all graphic (visible) SVG nodes. It
is a subclass of SPObject, with great deal of specific functionality.
SPItem internals
struct _SPItem {
SPObject object;
unsigned int sensitive : 1;
unsigned int stop_paint: 1;
double affine[6];
SPItemView *display;
SPClipPath *clip;
};
Affine is a 3x2 matrix describing transformation from the item to the
parent local coordinate systems. Each display in linked list has a link
to a single NRArenaItem that implements actual renderable image of
the item.
Virtual methods
/******** Disclaimer *******/
This will change a lot in the future
Only the most important are listed
void ::bbox (SPItem *item, ArtDRect *bbox, const double *transform)
Calculates item's logical bounding box. The logical bbox does not
take into account the stroke width, nor certain other visual
properties. Transformation is a 3x2 matrix describing coordinate
transform from the item's local coordinate system to the coordinate
system of the bounding box.
void ::print (SPItem *item, SPPrintContext *ctx)
Prints the item's visual representation, using the internal printing
frontend. In the future this may be turned into a more generic
exporting method.
char ::description (SPItem *item)
Gives a short description of the item suitable for use in a statusbar,
etc.
NRArenaItem ::show (SPItem *item, NRArena *arena)
Creates an NRArena display cache representation of the item. The
frontend places the generated item into a hierarchy; implementations
have to build a correct NRArenaItem and keep it up to date.
void (* hide) (SPitem *item, NRArena *arena)
The opposite of ::show.
void ::write_transform (SPItem *item, SPRepr *repr, double *transform)
Tries to remove the extra transformation by modifying other aspects of
the item representation. For example, by changing the rectangle width
and height, the scaling component of the transformation can be
dropped. This is used to make the SVG file more human-readable.
void ::menu (SPItem *item, SPDesktop *desktop, GtkMenu *menu)
Appends item specific lines into the menu. This is used to generate
the context menu, and will probably move into a separate module in
the future.
2.4 SPDocument
SPDocument serves as the container of both model trees (agnostic XML
and typed object tree), and implements all of the document-level
functionality used by the program.
SPDocument implements undo and redo stacks and an id-based object
dictionary. Thanks to unique id attributes, the latter can be used to
map from the XML tree back to the object tree. Documents are
themselves registered by the main program metaobject 'Sodipodi', which
does elementary bookkeeping.
SPDocument performs the basic operations needed for asynchronous
update notification (SPObject ::modified virtual method), and implements
the 'modified' signal, as well.
Many document level operations, like load, save, print, export and so on,
use SPDocument as their basic datatype.
2.4.1. Undo and Redo implementation
Using the split document model gives sodipodi a very simple and clean
undo implementation. Whenever mutation occurs in the XML tree,
SPObject invokes one of the five corresponding handlers of its
container document. This writes down a generic description of the
given action, and appends it to the recent action list, kept by the
document. There will be as many action records as there are mutation
events, which are all kept and processed together in the undo
stack. Two methods exist to indicate that the given action is completed:
void sp_document_done (SPDocument *document)
void sp_document_maybe_done (SPDocument *document, const unsigned char *key)
Both move the recent action list into the undo stack and clear the
list afterwards. While the first method does an unconditional push,
the second one first checks the key of the most recent stack entry. If
the keys are identical, the current action list is appended to the
existing stack entry, instead of pushing it onto its own. This
behaviour can be used to collect multi-step actions (like winding the
Gtk spinbutton) from the UI into a single undoable step.
For controls implemented by Sodipodi itself, implementing undo as a
single step is usually done in a more efficient way. Most controls have
the abstract model of grab, drag, release, and change user
action. During the grab phase, all modifications are done to the
SPObject directly - i.e. they do not change XML tree, and thus do not
generate undo actions either. Only at the release phase (normally
associated with releasing the mousebutton), changes are written back
to the XML tree, thus generating only a single set of undo actions.
2.5. SPView and SPviewWidget
SPView is an abstract base class of all UI document views. This
includes both the editing window and the SVG preview, but does not
include the non-UI RGBA buffer-based NRArenas nor the XML editor or
similar views. The SPView base class has very little functionality of
its own.
SPViewWidget is a GUI widget that contain a single SPView. It is also
an abstract base class with little functionality of its own.
2.6. SPDesktop
SPDesktop is a subclass of SPView, implementing an editable document
canvas. It is extensively used by many UI controls that need certain
visual representations of their own.
SPDesktop provides a certain set of SPCanvasItems, serving as GUI
layers of different control objects. The one containing the whole
document is the drawing layer. In addition to it, there are grid,
guide, sketch and control layers. The sketch layer is used for
temporary drawing objects, before the real objects in document are
created. The control layer contains editing knots, rubberband and
similar non-document UI objects.
Each SPDesktop is associated with a SPNamedView node of the document
tree. Currently, all desktops are created from a single main named
view, but in the future there may be support for different ones.
SPNamedView serves as an in-document container for desktop-related
data, like grid and guideline placement, snapping options and so on.
Associated with each SPDesktop are the two most important editing
related objects - SPSelection and SPEventContext.
Sodipodi keeps track of the active desktop and invokes notification
signals whenever it changes. UI elements can use these to update their
display to the selection of the currently active editing window.
2.7. SPSelection
This is a per-desktop object that keeps the list of selected objects
at the given desktop. Both SPItem and SPRepr lists can be retrieved
from the selection. Many actions operate on the selection, so it is
widely used throughout the Sodipodi code.
SPSelection also implements its own asynchronous notification signals,
that UI elements can listen to.
2.8. SPEventContext
SPEventContext is an abstract base class of all tools. As the name
indicates, event context implementations process UI events (mouse
movements and keypresses) and take actions (like creating or modifying
objects). There is one event context implementation for each tool,
plus few abstract base classes. Writing a new tool involves
subclassing SPEventContext.
3. Some thoughts
3.1. Why do we need a two-level model tree?
The need for a typed object tree is obvious if we want to utilize OO
programming - which we certainly want to do. Although implemented in pure C,
Sodipodi uses the gtk (glib in future versions) type and object system,
which gives us an extremely powerful set of OO functionality. As SVG is
designed with inheritance in mind, using object subclassing to represent
it is perfectly the right thing to do.
But there are also areas where typed object structure would make
things more complex. For example, to implement the copy buffer we had
to save the full state of copied objects. While this could be done
with the separate virtual method of SPObject, we can use a much easier
way and create the duplicate corresponding SPRepr. As our document
model already has to implement generation of full object
representation for SPRepr tree of nodes, generation of new objects
during paste happens automatically when the given SPRepr is inserted
into XML tree. The agnostic xml tree is also used for undo stack, as
described earlier.
The main benefit comes from the extreme simplicity of the XML tree
manipulation API. All operations can be done, using only around 10
methods, which makes code much more robust, and is perfect for
implementing compatibility sensitive things, like a plugin API.
The XML tree also makes implementing two SVG features - cloning and
animations - much easier by providing an invariant backbone.
22. Novemebr 2002
Lauris Kaplinski
<lauris@kaplinski.com>

BIN
doc/class-hierarchy.dia Normal file

Binary file not shown.

53
doc/coordinates.txt Normal file
View file

@ -0,0 +1,53 @@
Please note that the behavior documented here (from Sodipodi) should be considered a bug.
Inkscape should switch to the native SVG coordinate system.
-mental
Coordinate systems used by sodipodi
1. Desktop coordinates
Are the base coordinate system of all editing, UI etc.
i.e. the ones user is directly seeing (maybe some time
we'll make this configurable).
0,0 is at lower-left
X grows to the right
Y grows upwards
Only valid units are real-world ones (mm, cm...) - i.e.
there is no such unit as pixel etc.
If printed, 1 desktop mm should be 1mm on paper
2. Document coordinates
As we all know, SVG Y grows downwards. So document is
placed at 0,HEIGHT, mirrored vertically, where HEIGHT
is viewport height in desktop coordinates.
Moreover SVG coordinate space is scaled by 0.8, so
1mm in SVG space equals 1mm in desktop space.
The full matrix looks like:
[ 0.8 0.0 0.0 ]
[ 0.0 -0.8 HEIGHT ]
Where height equals SVG viewport height in real units
i.e. if viewport is 210mmx297mm HEIGHT is also 297mm.
Document coordinates are stored in desktop object,
as doc2dt[] matrix, and not directly accessible to
document itself. I.e. document renders it just as any
normal SVG viewer should do.
Technically SVG placement is achieved by specifying
doc2dt transform to drawing parent canvas group.
3. user coordinates
These are as specified by SVG spec.
1 px == 1 user unit
1 pt == 1.25 px
etc.
31/08/2002 Lauris Kaplinski <lauris@kaplinski.com>

411
doc/extension_system.txt Normal file
View file

@ -0,0 +1,411 @@
== Inkscape Extensions ==
=== Introduction ===
The extensions system in Inkscape is a way for adding functionality to
Inkscape, without affecting the core of the program itself. We want
Inkscape to follow a core-plus-modules approach similar to that adopted
by many successful open source projects such as the Linux kernel, Perl,
Apache, Gimp, and so on. There are many different types of extension
mechanisms, including file format conversion tools, filter scripts that
process SVG, user interface elements that can be added at runtime, and
so forth.
This proposal defines a design for handling this wide variety of
extensions in a flexible manner. This document provides a way to
understand the extensions system, and how extensions fit into this
overall system.
Much of the documentation that will be useful for users of the extension
system is not included in this document, it is autogenerated from the
source code and placed on the Inkscape webpage. While this is less
convenient, it is more correct, and maintained as the source code is
modified. Please look aton the Inkscape webpage also.
=== Terminology ===
*Extension* - An extension is something that extends the functionality
of Inkscape without being directly part of the core. This implies
that it should be easy to remove or add, and nothing in the core should
depend on it directly.
*Extension Type* - Establishes the functional interface that the
Extension provides, including the types of messages it handles and what
is contained in its data structures.
*Extension Implementation* - Defines how the extension is accessed;
i.e. through message passing, pipe/exec calls with commandline
arguments, direct function calls, etc.
*Plug-in* - An extension that is implemented through a loadable library.
This is a .so file on Unix-like systems or a .dll on Win32. The
libraries should not be loaded until they are used.
*Script* - A script is a type of extension that is implemented through
an external program that receives and sets SVG data through files and
pipes. This allows Inkscape to use programs that handle SVG but are
targeted differently, seamlessly inside of Inkscape.
*Language Binding* - A special type of plug-in that wraps a scripting
language interpreter such as Perl, Python, Lisp, etc. A user
interested in programmatic access to Inkscape's internals via one of
these languages can install (or create) the relevant Language Binding
Plug-in to achieve this.
*INX* - *'INkscape eXtension'* - The filename extension used for XML
metadata files that describe each Inkscape Extension.
*Internal Extension* - A part of the Inkscape codebase which uses the
extension system in order to make it more modular. This code is
compiled into Inkscape, but appears as an extension to all other code
in the codebase.
=== Requirements ===
* Uses a general language binding system so it's easy to add new
language binding support.
* Allows direct interaction with the document object model including
changing.
* Allows some limited interaction with the Inkscape UI such as
manipulating grids, overlays, etc.
* Allows direct interaction with file load/save/export/print
subsystem.
* Guaranteed to work properly with the undo system, even if the
extension is not written carefully.
* Well documented so is easy for people to learn how to make new
extensions.
* Each extension can be implemented, distributed, and managed
independently of the core project.
* Icons, buttons, and other UI elements for extensions fit seamlessly
into main application GUI.
* User can easily select which extensions to automatically load into
application at startup.
* Loading of extensions shall not seriously slow startup time or make
a major impact on memory footprint.
* Failure of a extension shall not leave the drawing in an
inconsistent state.
* Main application must gracefully recover from extension crashes or
other serious problems with extension execution.
* Dependencies for particular extensions must be clearly identified for user if missing.
=== Overview ===
Different kinds of extensions can be categorized in two ways. First,
but what the extension does: File format converters, printing, SVG
manipulation, symbol libraries, etc. Second, by how the extension is
implemented: command-line scripts, dynamically loaded libraries,
internal compiled-in code, etc.
The first kind of categorization is called the *Extension Type*. This
essentially establishes a calling interface and the set of messages the
extension must be able to receive and handle. For example, extensions
of type Print must have a way to handle 'print' message.
The second is the *Extension Implementation*. This defines the
mechanism Inkscape must use for passing messages to the extension. For
example, commandline scripts would have messages passed as commandline
arguments, whereas loadable plug-ins would have the messages passed to
the plug-in's message handler routine.
The categories of both Extension Types and Extension Implementations are
left open ended. This way, if someone comes up with new ideas for ways
to extend Inkscape that doesn't fit within the existing models, they can
add these mechanisms in a straightforward fashion.
For the purposes of this document, however, we focus on just the
following Types and Implementations:
Extension
"Input" - loading various file formats
"Output" - saving as various file formats
"Effect" - apply some sort of change to SVG elements in the doc
"Print" - prints using different drivers or modes
"Collection" - a group of objects that have thumbnails and images that
can be used inside a document. Libraries can be
searchable and may be presented in a hierarchical
structure
"Extension Implementations"
"Internal" - code that is internal to Inkscape which uses the
extension system for some functionality
"Script" - a cmdline program that takes an SVG document to its
STDIN and emits a modified SVG document to its STDOUT,
with control messages given as commandline parameters.
"Plug-in" - a loadable module with a message handler routine that
receives messages and that operates on the Inkscape API
functions directly.
=== Extension System Basics ===
Leaving the topic of Types and Implementations aside, we can make some
generalizations about how all Extensions work, and behaviors or
attributes that all Extensions share. This includes how they are
registered, how they handle preferences, how dependency resolution is
achieved, and versioning. These common behaviors are all established
via a base class that all Extension Types derive from.
=== Extension Base Class ===
The Extension base class holds the attribute data that all extensions
must have and establishes the base functionality that all extensions
share. All extensions have the following properties:
"ID" - A unique identifier for this extension that is used for referring
to the extension and naming its parameters in the configuration files.
"Name" - The textual name of the extension, it is used for user
interaction with the extension. It is used for users to identify the
extension.
"Parameters" - Each extension keeps a record of all of the parameters
that it has. The can be changed internally, through a GUI, or by other
extensions. Parameters can be found and adjusted using functions that
are within the base class.
=== Extension Registry ===
Inkscape maintains a data structure of all the registered extensions.
This registry can be queried against to retrieve lists of extensions
meeting various conditions (such as all Input extensions).
The Extension Registry contains all extensions whether or not they
failed their dependency checking on startup. This allows for additional
information to be displayed on the reasoning behind marking the
extension as disabled.
The registry can be reloaded from the Inkscape GUI while Inkscape is
running. This can be used to add new extensions into the system, or
help debug new extensions. When the registry is reloaded all extensions
are first unloaded, then they're specification files are re-read.
=== Handling Preferences ===
Individual extensions can have their own preferences which are used by
the extension. These are typically attributes of the operation that can
be modified by the user through a dialog. It is also possible to have
other extensions modify these values when they are using an extension.
For most extensions, these will be edited by a dialog that relates to
the preferences of the user.
The preferences themselves are defined in the inx file that describes
the extension. In this definition there is the name, the type, and the
default value. The types are: boolean, integer, float and string.
Other types can be developed using these as a basis. If there is no
custom value set the default value is used.
When a value is written to a preference for an extension, that value is
saved in the global preferences for Inkscape using the ID of the module
as the basis for the naming. At next use (including after restarting
the application) this value is used instead of the default. This allows
user preferences on a extension to remain persistent throughout uses of
Inkscape.
=== INX Files ===
The INX file is the description of the Inkscape Extension. It provides
all of the information that is used to identify the extension, and
determine what type of extension it is. This file is loaded on startup
of Inkscape, and the objects relating to the extension are created. All
extensions have an inx file, but many internal extensions compile this
file into the codebase (to reduce dependencies).
The INX file also contains information on the dependencies that are
required for the extension to operate. These dependencies can be
everything from required files, required libraries or other extensions
that help this one. The dependencies are checked as the file is loaded,
and an extension is marked as dead if they are not met. Also
dependencies can check different versions of particular objects to see
if they are met.
=== Extension Types ===
Each Extension is identified by it's 'Type'. This determines the type
of programmatic interface that it adheres to, enabling Inkscape to know
what functionality it can expect from the extension.
=== Input ===
An input extension provides a way to get data into Inkscape. This type
of extension creates a document given a filename. This is done by using
the 'open' method within the class. Also, there is a 'prefs' function
which will generate a GtkDialog. This dialog is then used to get any
settings that the incoming file and extension may use. This function is
executed, and the dialog returns, before the open method is called.
There are also several other settings stored in an Input extension.
This includes information on the type of file the input module can take
in including its filename extension and mime type. Also, there is a
space to store a tooltip for additional information on the file type in
the file dialog. Lastly, there is the key of which Output extension is
recommended for saving this filetype. This is useful, as there is no
other direct links between the Input and Output functions, and a user
expects to be able to open and save without using the 'Save As...'
dialog.
=== Output ===
An output extension controls how SVG documents are exported from
Inkscape. This type of extension creates a file given a document
object. This is done using the 'save' method within the class.
The method for how files are exported depends on what type of
Implementation is used. For Scripts, the file is first saved as a
temporary SVG file, and then processed by calling the commandline
programs to convert it. For Plug-ins, the document object is passed to
the extension with a 'save' message and a filename, and the extension
program performs the file save operation itself.
=== Effect ===
Effect extensions cause a modification of a loaded document. For
example, it might add a new shape to the drawing, or change all selected
objects to be purple with green dotted borders.
=== Print ===
The Print Extension Type is for extensions that interface with printing
subsystems. Examples would be Win32, postscript, and GNOME Print.
=== Collection ===
=== Creating Extensions ===
In this chapter, we discuss how to create an extension from scratch,
incorporate into Inkscape, and release it for the general Inkscape
community to use. This chapter can be read independently of the rest of
the document, using the rest as reference material.
=== Selecting an Extension Strategy ===
First of all, you will need to select the method you'll use for creating your extension.
Scripts are the simplest extensions to create, because they work through
STDIN/STDOUT, so you need to know very little about Inkscape internals
to make them work. However, their ability to interact with the Inkscape
internals is limited compared with other approaches. For file format
converters, this is usually fine. You can also create filters programs
that take the entire document to its STDIN, process it, and return a
modified copy to STDOUT. Some control of the extension is possible via
its commandline arguments.
One of the nice things about Scripts is that they can be written in any
language. It need not even be a scripting language - as long as it
handles STDIN and STDOUT and uses commandline arguments, you can write
it however you wish.
Plug-ins are more powerful than Scripts, but require more knowledge of
Inkscape internals, and must be written according to specific criteria.
Generally, since these are loaded as dynamic objects, they'll need to be
written in a language that can generate them, such as C or C++.
The best of both worlds can be available through Language Bindings,
which are Plug-ins that wrapper a script interpreter. This enables you
to call various Inkscape internal routines through your scripting
language's functions. If someone has created a Language Binding for
your language of choice, you're all set, otherwise you'll have to create
a Plug-in for it. Language Binding Plug-ins have a few more
requirements than ordinary Plug-ins, and require a greater amount of
knowledge of the Inkscape internals, so it can take quite some time to
do properly.
Internal Extensions are in a way the reverse of a normal Extension, in
that instead of providing a way to hook into Inkscape from the outside,
they provide hooks from inside Inkscape. These are used directly by
Inkscape, such as in the case of compiled-in printing modules. Most
users will never need to write this type of extension, they are pretty
much for Inkscape core developers only.
=== Writing Your Extension ===
This section provides some guidance and examples for implementing
different kinds of Extensions.
=== Writing Script Extensions ===
=== Writing Plug-in Extensions ===
=== Writing Language Binding Plug-in Extensions ===
=== Creating an INX File ===
Every extension must have a corresponding *.inx file. This is an XML
file that provides Inkscape with information about the module and allows
it to load the info without needing to access the module itself. The
*.inx file contains enough info for Inkscape to set up menu items and
know what kinds of functionality to expect from the extension.
=== Packaging Your Extension ===
=== Contributing Your Extension to the Inkscape Community ===
Once your extension is complete, you may wish to share it with the
community. There are of course no hard and fast rules for how to share
your work, but this section illustrates some approaches.
=== Listing Your Extension ===
First, you will need to put your extension someplace that others can
find and download it. If you have adequate webspace, you could simply
upload it to your web server. More typically, you will want to upload
it to a mirroring system like SourceForge (http://www.sourceforge.net),
CPAN (http://www.cpan.org), and the like. The Inkscape project may also
be willing to host your extension; contact the admins for more info.
It can also be helpful to list your extension with one of the various
software registries, such as Freshmeat (http://www.freshmeat.net). You
should also list it on the Inkscape Wiki site.
=== Announcing Your Extension ===
After posting your extension someplace from which it can be downloaded,
you should also announce its availability, by sending an email to
inkscape-announce@lists.sourceforge.net. You may also want to announce
it on other related sites; for instance, if you've written a plug-in to
allow operation of Imagemagick from within Inkscape, it could be a good
idea to announce it to the Imagemagick list.
=== Incorporating Your Extension in to Inkscape ===
Because the intent with the extension system is to break things *out*
from the core, most extensions should be packaged and distributed
independently of the main Inkscape distribution. However, for ease of
user installation, an extension-pack can be shipped along with the core
Inkscape package. Also, certain extensions may be so critical to
Inkscape operation (such as for printing) that they should be included
in the core.
If your extension seems like it should be incorporated into the Inkscape
core, contact the Inkscape developers about this, and discuss how best
to include it in the distribution with them.
=== Conclusion ===
It is anticipated that the incorporation of this extensions capability
will bring Inkscape added power and flexibility while avoiding bloating
the core with cool-but-rarely-used functionality. Further, it empowers
users and non-core Inkscape developers to extend the application with
their own new capabilities, without needing to gain special access and
acceptance by the project. Dynamic loading of functionality will also
allow Inkscape to remain 'lean and mean', loading up functionality on an
as-needed basis, and conserving memory by unloading functionality when
it is not needed.
The key point of this design specification is the architectural concept
of separately identifying an extension's interface type, or 'Extension
Type', from its implementation method, or 'Extension Implementation'.
This feature enables Inkscape to be extended in a variety of mechanisms,
including ways not yet foreseen.
=== History and references ===
Base design taken from Ted Gould's Extension System work.
This document originally authored by Bryce Harrington, July 2004

237
doc/extension_system.xml Normal file
View file

@ -0,0 +1,237 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<book lang="en_us">
<title>Inkscape Extensions</title>
<chapter>
<title>Introduction</title>
<para>The extensions system in Inkscape is a way for adding functionality to Inkscape, without affecting the core of the program itself. We want Inkscape to follow a core-plus-modules approach similar to that adopted by many successful open source projects such as the Linux kernel, Perl, Apache, Gimp, and so on. There are many different types of extension mechanisms, including file format conversion tools, filter scripts that process SVG, user interface elements that can be added at runtime, and so forth.</para>
<para>This proposal defines a design for handling this wide variety of extensions in a flexible manner. This document provides a way to understand the extensions system, and how extensions fit into this overall system.</para>
<para>Much of the documentation that will be useful for users of the extension system is not included in this document, it is autogenerated from the source code and placed on the Inkscape webpage. While this is less convenient, it is more correct, and maintained as the source code is modified. Please look aton the Inkscape webpage also.</para>
</chapter>
<chapter>
<title>Terminology</title>
<para><emphasis>Extension</emphasis> - An extension is something that extends the functionality of Inkscape without being directly part of the core. This implies that it should be easy to remove or add, and nothing in the core should depend on it directly.</para>
<para><emphasis>Extension Type</emphasis> - Establishes the functional interface that the Extension provides, including the types of messages it handles and what is contained in its data structures.</para>
<para><emphasis>Extension Implementation</emphasis> - Defines how the extension is accessed; i.e. through message passing, pipe/exec calls with commandline arguments, direct function calls, etc.</para>
<para><emphasis>Plug-in</emphasis> - An extension that is implemented through a loadable library. This is a .so file on Unix-like systems or a .dll on Win32. The libraries should not be loaded until they are used.</para>
<para><emphasis>Script</emphasis> - A script is a type of extension that is implemented through an external program that receives and sets SVG data through files and pipes. This allows Inkscape to use programs that handle SVG but are targeted differently, seamlessly inside of Inkscape.</para>
<para><emphasis>Language Binding</emphasis> - A special type of plug-in that wraps a scripting language interpreter such as Perl, Python, Lisp, etc. A user interested in programmatic access to Inkscape's internals via one of these languages can install (or create) the relevant Language Binding Plug-in to achieve this.</para>
<para><emphasis>INX</emphasis> - <emphasis>'INkscape eXtension'</emphasis> - The filename extension used for XML metadata files that describe each Inkscape Extension.</para>
<para><emphasis>Internal Extension</emphasis> - A part of the Inkscape codebase which uses the extension system in order to make it more modular. This code is compiled into Inkscape, but appears as an extension to all other code in the codebase.</para>
</chapter>
<chapter>
<title>Requirements</title>
<itemizedlist>
<listitem><para>Uses a general language binding system so it's easy to add new language binding support.</para></listitem>
<listitem><para>Allows direct interaction with the document object model including changing.</para></listitem>
<listitem><para>Allows some limited interaction with the Inkscape UI such as manipulating grids, overlays, etc.</para></listitem>
<listitem><para>Allows direct interaction with file load/save/export/print subsystem.</para></listitem>
<listitem><para>Guaranteed to work properly with the undo system, even if the extension is not written carefully.</para></listitem>
<listitem><para>Well documented so is easy for people to learn how to make new extensions.</para></listitem>
<listitem><para>Each extension can be implemented, distributed, and managed independently of the core project.</para></listitem>
<listitem><para>Icons, buttons, and other UI elements for extensions fit seamlessly into main application GUI.</para></listitem>
<listitem><para>User can easily select which extensions to automatically load into application at startup.</para></listitem>
<listitem><para>Loading of extensions shall not seriously slow startup time or make a major impact on memory footprint.</para></listitem>
<listitem><para>Failure of a extension shall not leave the drawing in an inconsistent state.</para></listitem>
<listitem><para>Main application must gracefully recover from extension crashes or other serious problems with extension execution.</para></listitem>
<listitem><para>Dependencies for particular extensions must be clearly identified for user if missing.</para></listitem>
</itemizedlist>
</chapter>
<chapter>
<title>Overview</title>
<para>Different kinds of extensions can be categorized in two ways. First, but what the extension does: File format converters, printing, SVG manipulation, symbol libraries, etc. Second, by how the extension is implemented: command-line scripts, dynamically loaded libraries, internal compiled-in code, etc.</para>
<para>The first kind of categorization is called the <emphasis>Extension Type</emphasis>. This essentially establishes a calling interface and the set of messages the extension must be able to receive and handle. For example, extensions of type Print must have a way to handle 'print' message.</para>
<para>The second is the <emphasis>Extension Implementation</emphasis>. This defines the mechanism Inkscape must use for passing messages to the extension. For example, commandline scripts would have messages passed as commandline arguments, whereas loadable plug-ins would have the messages passed to the plug-in's message handler routine.</para>
<para>The categories of both Extension Types and Extension Implementations are left open ended. This way, if someone comes up with new ideas for ways to extend Inkscape that doesn't fit within the existing models, they can add these mechanisms in a straightforward fashion.</para>
<para>For the purposes of this document, however, we focus on just the following Types and Implementations:</para>
<variablelist>
<varlistentry>
<term>Extension Types</term>
<listitem>
<variablelist>
<varlistentry>
<term>Input</term>
<listitem>
<para>loading various file formats</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Output</term>
<listitem>
<para>saving as various file formats</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Effect</term>
<listitem>
<para>apply some sort of change to SVG elements in the doc</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Print</term>
<listitem>
<para>prints using different drivers or modes</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Collection</term>
<listitem>
<para>a group of objects that have thumbnails and images that can be used inside a document. Libraries can be searchable and may be presented in a hierarchical structure</para>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
<term>Extension Implementations</term>
<listitem>
<variablelist>
<varlistentry>
<term>Internal</term>
<listitem>
<para>code that is internal to Inkscape which uses the extension system for some functionality</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Script</term>
<listitem>
<para>a cmdline program that takes an SVG document to its STDIN and emits a modified SVG document to its STDOUT, with control messages given as commandline parameters.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Plug-in</term>
<listitem>
<para>a loadable module with a message handler routine that receives messages and that operates on the Inkscape API functions directly.</para>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
</variablelist>
</chapter>
<chapter>
<title>Extension System Basics</title>
<para>Leaving the topic of Types and Implementations aside, we can make some generalizations about how all Extensions work, and behaviors or attributes that all Extensions share. This includes how they are registered, how they handle preferences, how dependency resolution is achieved, and versioning. These common behaviors are all established via a base class that all Extension Types derive from.</para>
<section>
<title>Extension Base Class</title>
<para>The Extension base class holds the attribute data that all extensions must have and establishes the base functionality that all extensions share. All extensions have the following properties:</para>
<variablelist>
<varlistentry>
<term>ID</term>
<para>A unique identifier for this extension that is used for referring to the extension and naming its parameters in the configuration files.</para>
</varlistentry>
<varlistentry>
<term>Name</term>
<para>The textual name of the extension, it is used for user interaction with the extension. It is used for users to identify the extension.</para>
</varlistentry>
<varlistentry>
<term>Parameters</term>
<para>Each extension keeps a record of all of the parameters that it has. The can be changed internally, through a GUI, or by other extensions. Parameters can be found and adjusted using functions that are within the base class.</para>
</varlistentry>
</variablelist>
</section>
<section>
<title>Extension Registry</title>
<para>Inkscape maintains a data structure of all the registered extensions. This registry can be queried against to retrieve lists of extensions meeting various conditions (such as all Input extensions).</para>
<para>The Extension Registry contains all extensions whether or not they failed their dependency checking on startup. This allows for additional information to be displayed on the reasoning behind marking the extension as disabled.</para>
<para>The registry can be reloaded from the Inkscape GUI while Inkscape is running. This can be used to add new extensions into the system, or help debug new extensions. When the registry is reloaded all extensions are first unloaded, then they're specification files are re-read.</para>
</section>
<section>
<title>Handling Preferences</title>
<para>Individual extensions can have their own preferences which are used by the extension. These are typically attributes of the operation that can be modified by the user through a dialog. It is also possible to have other extensions modify these values when they are using an extension. For most extensions, these will be edited by a dialog that relates to the preferences of the user.</para>
<para>The preferences themselves are defined in the inx file that describes the extension. In this definition there is the name, the type, and the default value. The types are: boolean, integer, float and string. Other types can be developed using these as a basis. If there is no custom value set the default value is used.</para>
<para>When a value is written to a preference for an extension, that value is saved in the global preferences for Inkscape using the ID of the module as the basis for the naming. At next use (including after restarting the application) this value is used instead of the default. This allows user preferences on a extension to remain persistent throughout uses of Inkscape.</para>
</section>
<section>
<title>INX Files</title>
<para>The INX file is the description of the Inkscape Extension. It provides all of the information that is used to identify the extension, and determine what type of extension it is. This file is loaded on startup of Inkscape, and the objects relating to the extension are created. All extensions have an inx file, but many internal extensions compile this file into the codebase (to reduce dependencies).</para>
<para>The INX file also contains information on the dependencies that are required for the extension to operate. These dependencies can be everything from required files, required libraries or other extensions that help this one. The dependencies are checked as the file is loaded, and an extension is marked as dead if they are not met. Also dependencies can check different versions of particular objects to see if they are met.</para>
</section>
</chapter>
<chapter>
<title>Extension Types</title>
<para>Each Extension is identified by it's 'Type'. This determines the type of programmatic interface that it adheres to, enabling Inkscape to know what functionality it can expect from the extension.</para>
<section>
<title>Input</title>
<para>An input extension provides a way to get data into Inkscape. This type of extension creates a document given a filename. This is done by using the 'open' method within the class. Also, there is a 'prefs' function which will generate a GtkDialog. This dialog is then used to get any settings that the incoming file and extension may use. This function is executed, and the dialog returns, before the open method is called.</para>
<para>There are also several other settings stored in an Input extension. This includes information on the type of file the input module can take in including its filename extension and mime type. Also, there is a space to store a tooltip for additional information on the file type in the file dialog. Lastly, there is the key of which Output extension is recommended for saving this filetype. This is useful, as there is no other direct links between the Input and Output functions, and a user expects to be able to open and save without using the 'Save As...' dialog.</para>
</section>
<section>
<title>Output</title>
<para>An output extension controls how SVG documents are exported from Inkscape. This type of extension creates a file given a document object. This is done using the 'save' method within the class.</para>
<para>The method for how files are exported depends on what type of Implementation is used. For Scripts, the file is first saved as a temporary SVG file, and then processed by calling the commandline programs to convert it. For Plug-ins, the document object is passed to the extension with a 'save' message and a filename, and the extension program performs the file save operation itself.</para>
</section>
<section>
<title>Effect</title>
<para>Effect extensions cause a modification of a loaded document. For example, it might add a new shape to the drawing, or change all selected objects to be purple with green dotted borders.</para>
</section>
<section>
<title>Print</title>
<para>The Print Extension Type is for extensions that interface with printing subsystems. Examples would be Win32, postscript, and GNOME Print.</para>
</section>
<section>
<title>Collection</title>
</section>
</chapter>
<chapter>
<title>Creating Extensions</title>
<para>In this chapter, we discuss how to create an extension from scratch, incorporate into Inkscape, and release it for the general Inkscape community to use. This chapter can be read independently of the rest of the document, using the rest as reference material.</para>
<section>
<title>Selecting an Extension Strategy</title>
<para>First of all, you will need to select the method you'll use for creating your extension.</para>
<para>Scripts are the simplest extensions to create, because they work through STDIN/STDOUT, so you need to know very little about Inkscape internals to make them work. However, their ability to interact with the Inkscape internals is limited compared with other approaches. For file format converters, this is usually fine. You can also create filters programs that take the entire document to its STDIN, process it, and return a modified copy to STDOUT. Some control of the extension is possible via its commandline arguments.</para>
<para>One of the nice things about Scripts is that they can be written in any language. It need not even be a scripting language - as long as it handles STDIN and STDOUT and uses commandline arguments, you can write it however you wish.</para>
<para>Plug-ins are more powerful than Scripts, but require more knowledge of Inkscape internals, and must be written according to specific criteria. Generally, since these are loaded as dynamic objects, they'll need to be written in a language that can generate them, such as C or C++.</para>
<para>The best of both worlds can be available through Language Bindings, which are Plug-ins that wrapper a script interpreter. This enables you to call various Inkscape internal routines through your scripting language's functions. If someone has created a Language Binding for your language of choice, you're all set, otherwise you'll have to create a Plug-in for it. Language Binding Plug-ins have a few more requirements than ordinary Plug-ins, and require a greater amount of knowledge of the Inkscape internals, so it can take quite some time to do properly.</para>
<para>Internal Extensions are in a way the reverse of a normal Extension, in that instead of providing a way to hook into Inkscape from the outside, they provide hooks from inside Inkscape. These are used directly by Inkscape, such as in the case of compiled-in printing modules. Most users will never need to write this type of extension, they are pretty much for Inkscape core developers only.</para>
</section>
<section>
<title>Writing Your Extension</title>
<para>This section provides some guidance and examples for implementing different kinds of Extensions.</para>
<section>
<title>Writing Script Extensions</title>
</section>
<section>
<title>Writing Plug-in Extensions</title>
</section>
<section>
<title>Writing Language Binding Plug-in Extensions</title>
</section>
</section>
<section>
<title>Creating an INX File</title>
<para>Every extension must have a corrosponding *.inx file. This is an XML file that provides Inkscape with information about the module and allows it to load the info without needing to access the module itself. The *.inx file contains enough info for Inkscape to set up menu items and know what kinds of functionality to expect from the extension.</para>
</section>
<section>
<title>Packaging Your Extension</title>
</section>
<section>
<title>Contributing Your Extensino to the Inkscape Community</title>
<para>Once your extension is complete, you may wish to share it with the community. There are of course no hard and fast rules for how to share your work, but this section illustrates some approaches.</para>
<section>
<title>Listing Your Extension</title>
<para>First, you will need to put your extension someplace that others can find and download it. If you have adequate webspace, you could simply upload it to your web server. More typically, you will want to upload it to a mirroring system like SourceForge (http://www.sourceforge.net), CPAN (http://www.cpan.org), and the like. The Inkscape project may also be willing to host your extension; contact the admins for more info.</para>
<para>It can also be helpful to list your extension with one of the various software registries, such as Freshmeat (http://www.freshmeat.net). You should also list it on the Inkscape Wiki site.</para>
</section>
<section>
<title>Announcing Your Extension</title>
<para>After posting your extension someplace from which it can be downloaded, you should also announce its availability, by sending an email to inkscape-announce@lists.sourceforge.net. You may also want to announce it on other related sites; for instance, if you've written a plug-in to allow operation of Imagemagick from within Inkscape, it could be a good idea to announce it to the Imagemagick list.</para>
</section>
<section>
<title>Incorporating Your Extension in to Inkscape</title>
<para>Because the intent with the extension system is to break things *out* from the core, most extensions should be packaged and distributed independently of the main Inkscape distribution. However, for ease of user installation, an extension-pack can be shipped along with the core Inkscape package. Also, certain extensions may be so critical to Inkscape operation (such as for printing) that they should be included in the core.</para>
<para>If your extension seems like it should be incorporated into the Inkscape core, contact the Inkscape developers about this, and discuss how best to include it in the distribution with them.</para>
</section>
</section>
</chapter>
<chapter>
<title>Conclusion</title>
<para>It is anticipated that the incorporation of this extensions capability will bring Inkscape added power and flexibility while avoiding bloating the core with cool-but-rarely-used functionality. Further, it empowers users and non-core Inkscape developers to extend the application with their own new capabilities, without needing to gain special access and acceptance by the project. Dynamic loading of functionality will also allow Inkscape to remain 'lean and mean', loading up functionality on an as-needed basis, and conserving memory by unloading functionality when it is not needed.</para>
<para>The key point of this design specification is the architectural concept of separately identifying an extension's interface type, or 'Extension Type', from its implementation method, or 'Extension Implementation'. This feature enables Inkscape to be extended in a variety of mechanisms, including ways not yet foreseen.</para>
</chapter>
<chapter>
<title>History and references</title>
<para>Base design taken from Ted Gould's Extension System work.</para>
<para>This document originally authored by Bryce Harrington, July 2004</para>
</chapter>
</book>

BIN
doc/inkscape-uml.dia Normal file

Binary file not shown.

View file

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="384.85571"
height="316.2381"
viewBox="0 0 384.85571 316.2381"
version="1.1"
id="svg6"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="arc-threshold.svg">
<metadata
id="metadata27">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs2">
<marker
style="overflow:visible"
id="Arrow1Mend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path920"
inkscape:connector-curvature="0" />
</marker>
<marker
style="overflow:visible"
id="marker1121"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1119"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.3719323"
inkscape:cx="206.22154"
inkscape:cy="168.80326"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="20"
fit-margin-left="20"
fit-margin-right="20"
fit-margin-bottom="20" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-28.526459,-37.270763)">
<path
style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:5;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:10, 20;stroke-dashoffset:0"
id="ellipse1209"
transform="rotate(62.960609)"
sodipodi:type="arc"
sodipodi:cx="262.41861"
sodipodi:cy="-57.27372"
sodipodi:rx="122.77849"
sodipodi:ry="181.92303"
sodipodi:start="3.1415927"
sodipodi:end="0"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 139.64012,-57.273728 A 122.77849,181.92303 0 0 1 262.41861,-239.19675 122.77849,181.92303 0 0 1 385.1971,-57.27372" />
<path
d="m 138.83803,-57.013718 a 122.77849,181.92303 0 0 1 7.40445,-62.221332 l 115.37404,62.22134 z"
sodipodi:arc-type="arc"
sodipodi:end="3.4906585"
sodipodi:start="3.1415927"
sodipodi:ry="181.92303"
sodipodi:rx="122.77849"
sodipodi:cy="-57.01371"
sodipodi:cx="261.61652"
sodipodi:type="arc"
transform="rotate(62.960609)"
id="path858"
style="fill:none;fill-rule:evenodd;stroke:#000080;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000080;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path860"
transform="rotate(62.960609)"
sodipodi:arc-type="arc"
d="m 146.24248,-119.23505 a 122.77849,181.92303 0 0 1 21.32026,-54.71654 l 94.05378,116.93788 z"
sodipodi:type="arc"
sodipodi:start="3.4906585"
sodipodi:end="3.8397244"
sodipodi:ry="181.92303"
sodipodi:rx="122.77849"
sodipodi:cy="-57.01371"
sodipodi:cx="261.61652" />
<path
sodipodi:cx="261.61652"
sodipodi:cy="-57.01371"
sodipodi:rx="122.77849"
sodipodi:ry="181.92303"
sodipodi:end="4.1887902"
sodipodi:start="3.8397244"
sodipodi:type="arc"
d="m 167.56274,-173.95159 a 122.77849,181.92303 0 0 1 32.66453,-40.61209 l 61.38925,157.54997 z"
sodipodi:arc-type="arc"
transform="rotate(62.960609)"
id="path862"
style="fill:none;fill-rule:evenodd;stroke:#000080;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000080;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path864"
transform="rotate(62.960609)"
sodipodi:arc-type="arc"
d="m 200.22727,-214.56368 a 122.77849,181.92303 0 0 1 40.06899,-21.60925 l 21.32026,179.15922 z"
sodipodi:type="arc"
sodipodi:start="4.1887902"
sodipodi:end="4.5378561"
sodipodi:ry="181.92303"
sodipodi:rx="122.77849"
sodipodi:cy="-57.01371"
sodipodi:cx="261.61652" />
<path
sodipodi:cx="261.61652"
sodipodi:cy="-57.01371"
sodipodi:rx="122.77849"
sodipodi:ry="181.92303"
sodipodi:end="4.8869219"
sodipodi:start="4.5378561"
sodipodi:type="arc"
d="m 240.29626,-236.17293 a 122.77849,181.92303 0 0 1 42.64052,0 l -21.32026,179.15922 z"
sodipodi:arc-type="arc"
transform="rotate(62.960609)"
id="path866"
style="fill:none;fill-rule:evenodd;stroke:#000080;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000080;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path868"
transform="rotate(62.960609)"
sodipodi:arc-type="arc"
d="m 282.93678,-236.17293 a 122.77849,181.92303 0 0 1 40.06898,21.60925 l -61.38924,157.54997 z"
sodipodi:type="arc"
sodipodi:start="4.8869219"
sodipodi:end="5.2359878"
sodipodi:ry="181.92303"
sodipodi:rx="122.77849"
sodipodi:cy="-57.01371"
sodipodi:cx="261.61652" />
<path
sodipodi:cx="261.61652"
sodipodi:cy="-57.01371"
sodipodi:rx="122.77849"
sodipodi:ry="181.92303"
sodipodi:end="5.5850536"
sodipodi:start="5.2359878"
sodipodi:type="arc"
d="m 323.00576,-214.56368 a 122.77849,181.92303 0 0 1 32.66453,40.6121 l -94.05377,116.93787 z"
sodipodi:arc-type="arc"
transform="rotate(62.960609)"
id="path870"
style="fill:none;fill-rule:evenodd;stroke:#000080;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000080;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path872"
transform="rotate(62.960609)"
sodipodi:arc-type="arc"
d="m 376.99056,-119.23505 a 122.77849,181.92303 0 0 1 7.40444,62.22134 l -122.77848,0 z"
sodipodi:type="arc"
sodipodi:start="5.9341195"
sodipodi:end="0"
sodipodi:ry="181.92303"
sodipodi:rx="122.77849"
sodipodi:cy="-57.01371"
sodipodi:cx="261.61652" />
<path
sodipodi:cx="261.61652"
sodipodi:cy="-57.01371"
sodipodi:rx="122.77849"
sodipodi:ry="181.92303"
sodipodi:end="5.9341195"
sodipodi:start="5.5850536"
sodipodi:type="arc"
d="m 355.67029,-173.95158 a 122.77849,181.92303 0 0 1 21.32027,54.71653 l -115.37404,62.22134 z"
sodipodi:arc-type="arc"
transform="rotate(62.960609)"
id="path874"
style="fill:none;fill-rule:evenodd;stroke:#000080;stroke-width:1;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
<path
style="fill:none;stroke:#ff00ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:2, 2;stroke-dashoffset:0"
d="m 114.15977,97.950431 58.52446,-21.897714 58.42796,-5.884464 51.02234,10.631731 37.46272,25.865586 19.3845,37.97966 -1.03175,45.51284 -21.32356,47.55649 -39.04345,43.86413 -52.07755,34.81495"
id="path876"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

View file

@ -0,0 +1,262 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="1000"
height="1000"
viewBox="0 0 1000 1000"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (b11d04efb7, 2020-08-25, custom)"
sodipodi:docname="chgt-addition-sequence.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible;"
id="marker1121"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="scale(0.8) rotate(180) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path1119" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.1206808"
inkscape:cx="248.95582"
inkscape:cy="509.06558"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
showguides="true"
inkscape:guide-bbox="true" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="path1173"
cx="78.166206"
cy="288.72296"
r="16.849979" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="circle1175"
cx="55.587914"
cy="49.383144"
r="16.849979" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="circle1177"
cx="83.664955"
cy="542.04181"
r="16.849979" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 55.252092,51.995006 22.79926,237.031244 5.16247,253.2171"
id="path1179" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="79.421501"
y="178.27722"
id="text1183"><tspan
sodipodi:role="line"
id="tspan1181"
x="79.421501"
y="178.27722">edge A</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="94.368141"
y="421.89923"
id="text1187"><tspan
sodipodi:role="line"
id="tspan1185"
x="94.368141"
y="421.89923">edge E</tspan></text>
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="circle1193"
cx="316.42542"
cy="49.824383"
r="16.849979" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="circle1195"
cx="506.46616"
cy="49.882885"
r="16.849979" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="circle1197"
cx="256.48138"
cy="518.86157"
r="16.849979" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="circle1199"
cx="446.52213"
cy="518.9201"
r="16.849979" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="circle1201"
cx="380.16623"
cy="286.72296"
r="16.849979" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 314.48322,46.691426 132.289,473.328804"
id="path1203" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 507.34274,49.657676 255.92081,521.45363"
id="path1205" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="circle1217"
cx="573.18079"
cy="284.11252"
r="16.849979" />
<path
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 572.56908,286.68089 623.57449,39.636396"
id="path1219" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-linecap:square"
id="circle1221"
cx="625.49481"
cy="32.441143"
r="16.849979" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="622.58923"
y="168.69528"
id="text1225"><tspan
sodipodi:role="line"
id="tspan1223"
x="622.58923"
y="168.69528">edge D</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="274.80078"
y="180.67569"
id="text1229"><tspan
sodipodi:role="line"
id="tspan1227"
x="274.80078"
y="180.67569">edge X</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="455.81705"
y="185.5293"
id="text1233"><tspan
sodipodi:role="line"
id="tspan1231"
x="455.81705"
y="185.5293">edge Y</tspan></text>
<rect
style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:5;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:5, 15;stroke-dashoffset:0"
id="rect1235"
width="624.091"
height="60.885902"
x="33.591202"
y="252.56232" />
<rect
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.17497;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:2.17497, 6.52492;stroke-dashoffset:0"
id="rect1269"
width="289.12112"
height="288.80701"
x="70.471581"
y="655.30725" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="86.259834"
y="681.55219"
id="text1273"><tspan
sodipodi:role="line"
x="86.259834"
y="681.55219"
id="tspan1275">type = EDGE_REMOVAL</tspan><tspan
sodipodi:role="line"
x="86.259834"
y="701.55219"
id="tspan1279">ptNo -&gt; 8</tspan><tspan
sodipodi:role="line"
x="86.259834"
y="721.55219"
id="tspan1293">left_edge -&gt; A</tspan><tspan
sodipodi:role="line"
x="86.259834"
y="741.55219"
id="tspan1295">right_edge -&gt; none</tspan><tspan
sodipodi:role="line"
x="86.259834"
y="761.55219"
id="tspan1299">edge_to_left -&gt; none</tspan><tspan
sodipodi:role="line"
x="86.259834"
y="781.55219"
id="tspan1301">edge_to_right -&gt;</tspan><tspan
sodipodi:role="line"
x="86.259834"
y="801.55219"
id="tspan1297" /></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="107.06792"
y="291.77271"
id="text1283"><tspan
sodipodi:role="line"
id="tspan1281"
x="107.06792"
y="291.77271">8</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="405.72318"
y="291.2673"
id="text1287"><tspan
sodipodi:role="line"
id="tspan1285"
x="405.72318"
y="291.2673">9</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="596.86731"
y="288.18781"
id="text1291"><tspan
sodipodi:role="line"
id="tspan1289"
x="596.86731"
y="288.18781">10</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.7 KiB

View file

@ -0,0 +1,258 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="558.4046"
height="538.37225"
viewBox="0 0 558.4046 538.37225"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (1a7913d4e8, 2020-08-20, custom)"
sodipodi:docname="convert-back-data.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1446"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1444" />
</marker>
<marker
style="overflow:visible"
id="marker1121"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1119" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="411"
inkscape:cy="334.5"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-8.9303313,-21.664225)">
<path
style="fill:none;stroke:#000000;stroke-width:2.77295;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 102.60449,515.25467 c 0,0 -6.893302,-398.4437 373.59095,-458.882951 z"
id="path829" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.09665;stroke-miterlimit:4;stroke-dasharray:none"
id="path831"
cx="103.42987"
cy="517.56573"
r="6.1909528" />
<path
style="fill:none;stroke:#0000ff;stroke-width:2.77295;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:11.0918, 11.0918;stroke-dashoffset:0;stroke-opacity:1"
d="M 102.60449,515.25467 117.30159,395.05912 208.39778,204.83219 327.81822,106.45266 476.19544,56.371719 Z"
id="path857" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.09665;stroke-miterlimit:4;stroke-dasharray:none"
id="circle833"
cx="118.08809"
cy="395.51981"
r="6.1909528" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.09665;stroke-miterlimit:4;stroke-dasharray:none"
id="circle835"
cx="208.10326"
cy="204.9926"
r="6.1909528" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.09665;stroke-miterlimit:4;stroke-dasharray:none"
id="circle837"
cx="326.27896"
cy="106.09619"
r="6.1909528" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.09665;stroke-miterlimit:4;stroke-dasharray:none"
id="circle839"
cx="476.59958"
cy="55.426014"
r="6.1909528" />
<text
xml:space="preserve"
style="font-size:14.7891px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.554591"
x="20.893951"
y="42.900475"
id="text1304"><tspan
sodipodi:role="line"
id="tspan1302"
x="20.893951"
y="42.900475"
style="stroke-width:0.554591">ConvertWithBackData</tspan></text>
<text
xml:space="preserve"
style="font-size:36.9727px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.554591"
x="77.885551"
y="113.05464"
id="text1308"><tspan
sodipodi:role="line"
id="tspan1306"
x="77.885551"
y="113.05464"
style="font-size:36.9727px;stroke-width:0.554591">0</tspan></text>
<text
xml:space="preserve"
style="font-size:36.9727px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.554591"
x="412.53885"
y="316.25241"
id="text1312"><tspan
sodipodi:role="line"
id="tspan1310"
x="412.53885"
y="316.25241"
style="font-size:36.9727px;stroke-width:0.554591">1</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1.66377;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1121)"
d="m 89.29666,120.30545 c 0,0 -1.132358,67.03572 65.0832,154.98955"
id="path1314"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1.66377;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1446)"
d="m 444.92323,285.45839 c 0,0 28.06694,-50.89681 -30.29334,-136.21065"
id="path1442"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:14.7891px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke-width:0.554591"
x="19.778652"
y="510.54266"
id="text1486"><tspan
sodipodi:role="line"
id="tspan1484"
x="19.778652"
y="510.54266"
style="stroke-width:0.554591">piece = 0</tspan><tspan
sodipodi:role="line"
x="19.778652"
y="529.02905"
id="tspan1490"
style="stroke-width:0.554591">time = 0</tspan></text>
<text
xml:space="preserve"
style="font-size:14.7891px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke-width:0.554591"
x="18.533163"
y="388.26981"
id="text1498"><tspan
sodipodi:role="line"
id="tspan1494"
x="18.533163"
y="388.26981"
style="stroke-width:0.554591">piece = 0</tspan><tspan
sodipodi:role="line"
x="18.533163"
y="406.7562"
id="tspan1496"
style="stroke-width:0.554591">time = 0.20</tspan></text>
<text
xml:space="preserve"
style="font-size:14.7891px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke-width:0.554591"
x="129.88928"
y="175.30013"
id="text1504"><tspan
sodipodi:role="line"
id="tspan1500"
x="129.88928"
y="175.30013"
style="stroke-width:0.554591">piece = 0</tspan><tspan
sodipodi:role="line"
x="129.88928"
y="193.7865"
id="tspan1502"
style="stroke-width:0.554591">time = 0.5</tspan></text>
<text
xml:space="preserve"
style="font-size:14.7891px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke-width:0.554591"
x="259.5546"
y="69.202881"
id="text1510"><tspan
sodipodi:role="line"
id="tspan1506"
x="259.5546"
y="69.202881"
style="stroke-width:0.554591">piece = 0</tspan><tspan
sodipodi:role="line"
x="259.5546"
y="87.689255"
id="tspan1508"
style="stroke-width:0.554591">time = 0.75</tspan></text>
<text
xml:space="preserve"
style="font-size:14.7891px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke-width:0.554591"
x="487.28891"
y="52.659344"
id="text1516"><tspan
sodipodi:role="line"
id="tspan1512"
x="487.28891"
y="52.659344"
style="stroke-width:0.554591">piece = 0</tspan><tspan
sodipodi:role="line"
x="487.28891"
y="71.145721"
id="tspan1514"
style="stroke-width:0.554591">time = 1</tspan></text>
<text
xml:space="preserve"
style="font-size:14.7891px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke-width:0.554591"
x="136.8902"
y="512.85431"
id="text1522"><tspan
sodipodi:role="line"
id="tspan1518"
x="136.8902"
y="512.85431"
style="stroke-width:0.554591">piece = 1</tspan><tspan
sodipodi:role="line"
x="136.8902"
y="531.3407"
id="tspan1520"
style="stroke-width:0.554591">time = 1</tspan><tspan
sodipodi:role="line"
x="136.8902"
y="549.82709"
id="tspan1524"
style="stroke-width:0.554591">closed = true</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.3 KiB

View file

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="440.75186"
height="469.3035"
viewBox="0 0 440.75186 469.3035"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (1a7913d4e8, 2020-08-20, custom)"
sodipodi:docname="convert-lines.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1121"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1119" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="292"
inkscape:cy="288.5"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-17.642022,-25.116572)">
<path
style="fill:none;stroke:#000000;stroke-width:2.54173;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 99.910319,476.627 c 0,0 -6.318491,-365.21877 342.438421,-420.61819 z"
id="path829" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:6.50489;stroke-miterlimit:4;stroke-dasharray:none"
id="path831"
cx="100.66688"
cy="478.74536"
r="5.6747093" />
<path
style="fill:none;stroke:#0000ff;stroke-width:2.54173;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:10.1669, 10.1669;stroke-dashoffset:0;stroke-opacity:1"
d="M 99.910319,476.627 113.38188,366.45417 196.88185,192.08965 306.34421,101.91367 442.34874,56.00881 Z"
id="path857" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:6.50489;stroke-miterlimit:4;stroke-dasharray:none"
id="circle833"
cx="114.10279"
cy="366.87646"
r="5.6747093" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:6.50489;stroke-miterlimit:4;stroke-dasharray:none"
id="circle835"
cx="196.61189"
cy="192.23668"
r="5.6747093" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:6.50489;stroke-miterlimit:4;stroke-dasharray:none"
id="circle837"
cx="304.93329"
cy="101.58692"
r="5.6747093" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:6.50489;stroke-miterlimit:4;stroke-dasharray:none"
id="circle839"
cx="442.71918"
cy="55.141964"
r="5.6747093" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:6.50489;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1142"
cx="367.69489"
cy="148.26315"
r="5.6747093" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:6.50489;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1144"
cx="290.62311"
cy="243.22745"
r="5.6747093" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:6.50489;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1146"
cx="203.70471"
cy="350.66959"
r="5.6747093" />
<text
xml:space="preserve"
style="font-size:13.5559px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.508345"
x="26.880827"
y="45.415878"
id="text1150"><tspan
sodipodi:role="line"
id="tspan1148"
x="26.880827"
y="45.415878"
style="stroke-width:0.508345">ConvertEvenLines</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 93 KiB

View file

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="486.77621"
height="516.31232"
viewBox="0 0 486.77621 516.31232"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (1a7913d4e8, 2020-08-20, custom)"
sodipodi:docname="convert-simple-high.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1121"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1119" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.73466529"
inkscape:cx="392.01525"
inkscape:cy="432.16959"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-31.206402,-35.657172)">
<path
style="fill:none;stroke:#000000;stroke-width:2.86674;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 114.93853,537.58003 c 0,0 -7.12643,-411.91923 386.22595,-474.402555 z"
id="path829" />
<path
style="fill:none;stroke:#0000ff;stroke-width:2.86674;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:5.73347, 5.73347;stroke-dashoffset:0;stroke-opacity:1"
d="m 114.93853,537.58003 7.40009,-79.46247 16.92909,-73.49058 27.50231,-73.79257 35.63381,-63.78975 50.17974,-60.49927 49.72355,-42.84003 64.50322,-38.83431 64.23464,-24.468298 70.1195,-17.225277 z"
id="path1035" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="path831"
cx="115.26668"
cy="535.56915"
r="6.4003329" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="circle833"
cx="121.911"
cy="457.75839"
r="6.4003329" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="circle835"
cx="251.64296"
cy="186.47656"
r="6.4003329" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="circle837"
cx="366.63855"
cy="104.16064"
r="6.4003329" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="circle839"
cx="501.58228"
cy="62.199787"
r="6.4003329" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1025"
cx="138.96669"
cy="383.32968"
r="6.4003329" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1027"
cx="166.1521"
cy="310.74799"
r="6.4003329" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1029"
cx="200.8325"
cy="247.2348"
r="6.4003329" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1031"
cx="301.32437"
cy="142.98907"
r="6.4003329" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:7.33666;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1033"
cx="430.7309"
cy="79.271164"
r="6.4003329" />
<text
xml:space="preserve"
style="font-size:15.2893px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.573347"
x="40.198563"
y="57.273457"
id="text1043"><tspan
sodipodi:role="line"
id="tspan1041"
x="40.198563"
y="57.273457"
style="stroke-width:0.573347">Smaller Threshold</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5 KiB

View file

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="396.13266"
height="420.10977"
viewBox="0 0 396.13266 420.10977"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (1a7913d4e8, 2020-08-20, custom)"
sodipodi:docname="convert-simple-low.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1121"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1119" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="351"
inkscape:cy="316.5"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-29.299149,-40.920317)">
<path
style="fill:none;stroke:#000000;stroke-width:2.30464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 99.453438,443.96395 c 0,0 -5.729127,-331.15259 310.497102,-381.384564 z"
id="path829" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:5.89814;stroke-miterlimit:4;stroke-dasharray:none"
id="path831"
cx="100.13943"
cy="445.8847"
r="5.1453943" />
<path
style="fill:none;stroke:#0000ff;stroke-width:2.30464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:9.21857, 9.21857;stroke-dashoffset:0;stroke-opacity:1"
d="M 99.453438,443.96395 111.66843,344.06761 187.37985,185.96713 286.63198,104.20242 409.95054,62.579386 Z"
id="path857" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:5.89814;stroke-miterlimit:4;stroke-dasharray:none"
id="circle833"
cx="112.32209"
cy="344.4505"
r="5.1453943" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:5.89814;stroke-miterlimit:4;stroke-dasharray:none"
id="circle835"
cx="187.13506"
cy="186.10045"
r="5.1453943" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:5.89814;stroke-miterlimit:4;stroke-dasharray:none"
id="circle837"
cx="285.35266"
cy="103.90615"
r="5.1453943" />
<circle
style="fill:#ff0000;fill-rule:evenodd;stroke:none;stroke-width:5.89814;stroke-miterlimit:4;stroke-dasharray:none"
id="circle839"
cx="410.28641"
cy="61.793396"
r="5.1453943" />
<text
xml:space="preserve"
style="font-size:12.2914px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.460929"
x="38.092815"
y="60.2589"
id="text1039"><tspan
sodipodi:role="line"
x="38.092815"
y="60.2589"
id="tspan888"
style="stroke-width:0.460929">Bigger Threshold</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -0,0 +1,200 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="1000"
height="1000"
viewBox="0 0 1000 1000"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (d63ee585f6, 2020-08-11, custom)"
sodipodi:docname="edge-sorting.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible;"
id="marker1121"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="scale(0.8) rotate(180) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path1119" />
</marker>
<marker
style="overflow:visible;"
id="Arrow1Lend"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.8) rotate(180) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path828" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.64984822"
inkscape:cx="460.10744"
inkscape:cy="471.64859"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="M 67.585403,500 H 930.47019"
id="path823" />
<path
style="fill:none;stroke:#000000;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1121)"
d="M 500,67.585384 V 930.47021"
id="path1117" />
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="948.98737"
y="506.99948"
id="text1171"><tspan
sodipodi:role="line"
id="tspan1169"
x="948.98737"
y="506.99948"
style="font-size:40px">x</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="488.41867"
y="970.67389"
id="text1175"><tspan
sodipodi:role="line"
id="tspan1173"
x="488.41867"
y="970.67389"
style="font-size:40px">y</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="480.92773"
y="514.58008"
id="text1211"><tspan
sodipodi:role="line"
id="tspan1209"
x="480.92773"
y="514.58008"
style="font-size:40px">-1</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="487.28516"
y="258.46341"
id="text1215"><tspan
sodipodi:role="line"
id="tspan1213"
x="487.28516"
y="258.46341"
style="font-size:40px">0</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="732.20917"
y="258.48294"
id="text1219"><tspan
sodipodi:role="line"
id="tspan1217"
x="732.20917"
y="258.48294"
style="font-size:40px">1</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="733.09784"
y="514.84375"
id="text1223"><tspan
sodipodi:role="line"
id="tspan1221"
x="733.09784"
y="514.84375"
style="font-size:40px">2</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="732.63885"
y="748.21735"
id="text1227"><tspan
sodipodi:role="line"
id="tspan1225"
x="732.63885"
y="748.21735"
style="font-size:40px">3</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="487.42188"
y="748.23688"
id="text1231"><tspan
sodipodi:role="line"
id="tspan1229"
x="487.42188"
y="748.23688"
style="font-size:40px">4</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="244.42764"
y="747.95367"
id="text1235"><tspan
sodipodi:role="line"
id="tspan1233"
x="244.42764"
y="747.95367"
style="font-size:40px">5</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="244.08585"
y="514.56055"
id="text1243"><tspan
sodipodi:role="line"
x="244.08585"
y="514.56055"
style="font-size:40px"
id="tspan1245">6</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="244.29092"
y="258.48294"
id="text1251"><tspan
sodipodi:role="line"
x="244.29092"
y="258.48294"
style="font-size:40px"
id="tspan1249">7</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="424.39703"
height="373.91052"
viewBox="0 0 424.39703 373.91052"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (1a7913d4e8, 2020-08-20, custom)"
sodipodi:docname="edge-winding-seed.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1121"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1119" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="229"
inkscape:cy="258.5"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-89.500001,-189.5)">
<path
id="path829"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.504865px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 150.23896,199.75243 V 351.212 H 301.69852 V 502.67157 H 150.23896 V 351.212 H 99.752433 V 553.15809 H 503.64461 V 199.75243 Z m 25.24326,25.24326 H 276.45526 V 325.96874 H 175.48222 Z m 0,151.45957 V 477.42831 H 276.45526 V 376.45526 Z" />
<path
style="fill:none;stroke:#ff0000;stroke-width:1.1107;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 150.23896,199.75243 V 502.67157"
id="path1538" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1.95177;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path1540"
cx="175.54428"
cy="225.05775"
r="3.0912569" />
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1.95177;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="circle1542"
cx="175.52843"
cy="376.78326"
r="3.0912569" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,357 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="337.0166"
height="334.90112"
viewBox="0 0 337.01661 334.90112"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (d63ee585f6, 2020-08-11, custom)"
sodipodi:docname="find-point.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<style
id="style1605">
.measure-arrow
{
}
.measure-label
{
}
.measure-line
{
}</style>
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker2236"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path2234" />
</marker>
<marker
style="overflow:visible"
id="marker2206"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path2204" />
</marker>
<marker
style="overflow:visible"
id="marker2176"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path2174" />
</marker>
<marker
style="overflow:visible"
id="marker1645"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1643" />
</marker>
<inkscape:path-effect
effect="measure_segments"
id="path-effect1603"
is_visible="true"
lpeversion="1"
unit="mm"
orientation="parallel"
coloropacity="#000000ff"
fontbutton="Sans 10"
precision="2"
fix_overlaps="0"
position="5"
text_top_bottom="0"
helpline_distance="0"
helpline_overlap="2"
line_width="0.25"
scale="1"
format="{measure}{unit}"
blacklist=""
active_projection="false"
whitelist="false"
showindex="false"
arrows_outside="false"
flip_side="false"
scale_sensitive="true"
local_locale="true"
rotate_anotation="true"
hide_back="true"
hide_arrows="false"
smallx100="false"
linked_items=""
distance_projection="20"
angle_projection="0"
avoid_overlapping="true"
onbbox="false"
bboxonly="false"
centers="false"
maxmin="false"
helpdata="&lt;b&gt;&lt;big&gt;General&lt;/big&gt;&lt;/b&gt;
Display and position dimension lines and labels
&lt;b&gt;&lt;big&gt;Projection&lt;/big&gt;&lt;/b&gt;
Show a line with measurements based on the selected items
&lt;b&gt;&lt;big&gt;Options&lt;/big&gt;&lt;/b&gt;
Options for color, precision, label formatting and display
&lt;b&gt;&lt;big&gt;Tips&lt;/big&gt;&lt;/b&gt;
&lt;b&gt;&lt;i&gt;Custom styling:&lt;/i&gt;&lt;/b&gt; To further customize the styles, use the XML editor to find out the class or ID, then use the Style dialog to apply a new style.
&lt;b&gt;&lt;i&gt;Blacklists:&lt;/i&gt;&lt;/b&gt; allow to hide some segments or projection steps.
&lt;b&gt;&lt;i&gt;Multiple Measure LPEs:&lt;/i&gt;&lt;/b&gt; In the same object, in conjunction with blacklists,this allows for labels and measurements with different orientations or additional projections.
&lt;b&gt;&lt;i&gt;Set Defaults:&lt;/i&gt;&lt;/b&gt; For every LPE, default values can be set at the bottom." />
<marker
style="overflow:visible"
id="marker1571"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1569" />
</marker>
<marker
style="overflow:visible"
id="marker1519"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1517" />
</marker>
<marker
style="overflow:visible"
id="TriangleOutM"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1364" />
</marker>
<marker
style="overflow:visible"
id="marker1571-3"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1569-6" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1.5837767"
inkscape:cx="93.447519"
inkscape:cy="158.79764"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10"
fit-margin-top="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-83.749898,32.083839)">
<path
style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 267.99475,142.84487 c 0,0 6.64406,16.59829 -7.97787,22.4135"
id="path1747" />
<path
style="fill:none;stroke:#000000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM)"
d="M 240.31542,146.25174 99.664523,281.78887"
id="path1217" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="-58.365868"
y="264.45288"
id="text1507"
transform="rotate(-44.465341)"><tspan
sodipodi:role="line"
id="tspan1505"
x="-58.365868"
y="264.45288"
style="font-size:16px">bNorm</tspan></text>
<path
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 248.88319,138.53474 6.95145,7.30751 -8.48559,7.76245"
id="path1755" />
<path
style="fill:#ff0000;stroke:#ff0000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1571)"
d="M 99.664523,281.78887 225.38087,273.26651"
id="path1567"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#008000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 245.60632,129.9363 c 0,0 31.28048,3.0901 14.41056,35.32207"
id="path1757" />
<path
style="fill:none;fill-opacity:1;stroke:#808080;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1519)"
d="M 240.31542,146.25174 375.85255,286.90265"
id="path1515" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="342.99881"
y="-76.441467"
id="text1559"
transform="rotate(45.53466)"><tspan
sodipodi:role="line"
id="tspan1557"
x="342.99881"
y="-76.441467"
style="font-size:16px">bNorm.ccw()</tspan></text>
<circle
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.89134;stroke-miterlimit:4;stroke-dasharray:none"
id="path1561"
cx="238.05536"
cy="272.15973"
r="4.4594245" />
<circle
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.89134;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1563"
cx="273.21555"
cy="114.23372"
r="4.4594245" />
<circle
style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.89134;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1565"
cx="143.98232"
cy="109.09448"
r="4.4594245" />
<path
style="fill:none;stroke:#0000ff;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1645)"
d="M 99.664523,281.78887 264.20711,122.88773"
id="path1641"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#008000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1571-3)"
d="M 99.664523,281.78887 141.17926,121.40511"
id="path1567-7"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="272.63654"
y="166.73859"
id="text1751"><tspan
sodipodi:role="line"
id="tspan1749"
x="272.63654"
y="166.73859"
style="font-size:16px;fill:#ff0000">θ<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan1753">r</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff"
x="270.05438"
y="136.71002"
id="text1769"><tspan
sodipodi:role="line"
id="tspan1767"
x="270.05438"
y="136.71002"
style="font-size:16px;fill:#0000ff">θ<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan1771">b</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008000"
x="224.15295"
y="126.32184"
id="text1777"><tspan
sodipodi:role="line"
id="tspan1775"
x="224.15295"
y="126.32184"
style="font-size:16px;fill:#008000">θ<tspan
style="font-size:65%;baseline-shift:sub;fill:#008000"
id="tspan1779">g</tspan></tspan></text>
<path
style="opacity:0.5;fill:none;stroke:#0000ff;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2176)"
d="M 240.31542,146.25174 404.85801,-12.6494"
id="path2172"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#008000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2206)"
d="M 240.31542,146.25174 281.83016,-14.13202"
id="path2202"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:#ff0000;stroke:#ff0000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2236)"
d="m 240.31542,146.25174 125.71635,-8.52236"
id="path2232"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,417 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="307.80222"
height="208.3214"
viewBox="0 0 307.80222 208.3214"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (d63ee585f6, 2020-08-11, custom)"
sodipodi:docname="find-point-same-opp-sweepsense.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<style
id="style1605">
.measure-arrow
{
}
.measure-label
{
}
.measure-line
{
}</style>
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker2206"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path2204" />
</marker>
<marker
style="overflow:visible"
id="marker2170"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path2168" />
</marker>
<marker
style="overflow:visible"
id="marker2134"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path2132" />
</marker>
<marker
style="overflow:visible"
id="marker2074"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path2072" />
</marker>
<marker
style="overflow:visible"
id="marker1533"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1531" />
</marker>
<marker
style="overflow:visible"
id="marker1497"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1495" />
</marker>
<marker
style="overflow:visible"
id="marker1395"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1393" />
</marker>
<marker
style="overflow:visible"
id="marker1293"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1291" />
</marker>
<marker
style="overflow:visible"
id="marker1263"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1261" />
</marker>
<marker
style="overflow:visible"
id="marker1203"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1201" />
</marker>
<marker
style="overflow:visible"
id="marker1143"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1141" />
</marker>
<marker
style="overflow:visible"
id="marker1047"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1045" />
</marker>
<marker
style="overflow:visible"
id="marker1011"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1009" />
</marker>
<marker
style="overflow:visible"
id="marker1645"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1643" />
</marker>
<inkscape:path-effect
effect="measure_segments"
id="path-effect1603"
is_visible="true"
lpeversion="1"
unit="mm"
orientation="parallel"
coloropacity="#000000ff"
fontbutton="Sans 10"
precision="2"
fix_overlaps="0"
position="5"
text_top_bottom="0"
helpline_distance="0"
helpline_overlap="2"
line_width="0.25"
scale="1"
format="{measure}{unit}"
blacklist=""
active_projection="false"
whitelist="false"
showindex="false"
arrows_outside="false"
flip_side="false"
scale_sensitive="true"
local_locale="true"
rotate_anotation="true"
hide_back="true"
hide_arrows="false"
smallx100="false"
linked_items=""
distance_projection="20"
angle_projection="0"
avoid_overlapping="true"
onbbox="false"
bboxonly="false"
centers="false"
maxmin="false"
helpdata="&lt;b&gt;&lt;big&gt;General&lt;/big&gt;&lt;/b&gt; Display and position dimension lines and labels &lt;b&gt;&lt;big&gt;Projection&lt;/big&gt;&lt;/b&gt; Show a line with measurements based on the selected items &lt;b&gt;&lt;big&gt;Options&lt;/big&gt;&lt;/b&gt; Options for color, precision, label formatting and display &lt;b&gt;&lt;big&gt;Tips&lt;/big&gt;&lt;/b&gt; &lt;b&gt;&lt;i&gt;Custom styling:&lt;/i&gt;&lt;/b&gt; To further customize the styles, use the XML editor to find out the class or ID, then use the Style dialog to apply a new style. &lt;b&gt;&lt;i&gt;Blacklists:&lt;/i&gt;&lt;/b&gt; allow to hide some segments or projection steps. &lt;b&gt;&lt;i&gt;Multiple Measure LPEs:&lt;/i&gt;&lt;/b&gt; In the same object, in conjunction with blacklists,this allows for labels and measurements with different orientations or additional projections. &lt;b&gt;&lt;i&gt;Set Defaults:&lt;/i&gt;&lt;/b&gt; For every LPE, default values can be set at the bottom." />
<marker
style="overflow:visible"
id="marker1519"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1517" />
</marker>
<marker
style="overflow:visible"
id="TriangleOutM"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1364" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="2.6577043"
inkscape:cx="162.5463"
inkscape:cy="86.728986"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10"
fit-margin-top="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-81.511939,-113.77527)">
<path
style="fill:#ff00ff;stroke:#ff00ff;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1011)"
d="m 265.67004,240.12496 88.9392,-14.91372"
id="path1007"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#ff0000;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1395)"
d="m 265.67004,240.12496 -36.34951,-79.9144"
id="path1391"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM)"
d="M 232.74865,270.3408 373.39954,134.80367"
id="path1217" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="98.04657"
y="371.93192"
id="text1507"
transform="rotate(-44.465341)"><tspan
sodipodi:role="line"
id="tspan1505"
x="98.04657"
y="371.93192"
style="font-size:16px">bNorm</tspan></text>
<path
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 224.20549,260.95038 7.30751,-6.95146 7.76245,8.48559"
id="path1755" />
<path
style="fill:none;fill-opacity:1;stroke:#808080;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1519)"
d="M 232.74865,270.3408 97.21152,129.68989"
id="path1515" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="218.83685"
y="39.289875"
id="text1559"
transform="rotate(45.53466)"><tspan
sodipodi:role="line"
id="tspan1557"
x="218.83685"
y="39.289875"
style="font-size:16px">bNorm.ccw()</tspan></text>
<circle
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.89134;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1563"
cx="265.19934"
cy="239.61365"
r="4.4594245" />
<path
style="fill:none;stroke:#0000ff;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1645)"
d="m 232.74865,270.3408 23.89169,-23.36401"
id="path1641"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff"
x="217.75481"
y="249.06168"
id="text1769"><tspan
sodipodi:role="line"
id="tspan1767"
x="217.75481"
y="249.06168"
style="font-size:16px;fill:#0000ff">θ<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan1771">b</tspan></tspan></text>
<path
style="fill:none;stroke:#ff0000;stroke-width:3.269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.269, 3.269;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker2074)"
d="m 265.67004,240.12496 -79.9144,36.34952"
id="path2070"
sodipodi:nodetypes="cc" />
<path
style="fill:#ff00ff;stroke:#ff00ff;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.26929, 3.26929;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker2134)"
d="m 265.67004,240.12496 -14.91372,-88.9392"
id="path2130"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#ff0000;stroke-width:3.269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.269, 3.269;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker2170)"
d="m 232.74865,270.3408 -79.9144,36.34952"
id="path2166"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:#ff00ff;stroke:#ff00ff;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.26929, 3.26929;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker2206)"
d="M 232.74865,270.3408 217.83493,181.4016"
id="path2202"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,386 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="307.80225"
height="208.18222"
viewBox="0 0 307.80225 208.18222"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (d63ee585f6, 2020-08-11, custom)"
sodipodi:docname="find-point-same.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<style
id="style1605">
.measure-arrow
{
}
.measure-label
{
}
.measure-line
{
}</style>
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1533"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1531" />
</marker>
<marker
style="overflow:visible"
id="marker1497"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1495" />
</marker>
<marker
style="overflow:visible"
id="marker1449"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1447" />
</marker>
<marker
style="overflow:visible"
id="marker1395"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1393" />
</marker>
<marker
style="overflow:visible"
id="marker1353"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1351" />
</marker>
<marker
style="overflow:visible"
id="marker1293"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1291" />
</marker>
<marker
style="overflow:visible"
id="marker1263"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1261" />
</marker>
<marker
style="overflow:visible"
id="marker1203"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1201" />
</marker>
<marker
style="overflow:visible"
id="marker1143"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1141" />
</marker>
<marker
style="overflow:visible"
id="marker1047"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1045" />
</marker>
<marker
style="overflow:visible"
id="marker1011"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1009" />
</marker>
<marker
style="overflow:visible"
id="marker1645"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1643" />
</marker>
<inkscape:path-effect
effect="measure_segments"
id="path-effect1603"
is_visible="true"
lpeversion="1"
unit="mm"
orientation="parallel"
coloropacity="#000000ff"
fontbutton="Sans 10"
precision="2"
fix_overlaps="0"
position="5"
text_top_bottom="0"
helpline_distance="0"
helpline_overlap="2"
line_width="0.25"
scale="1"
format="{measure}{unit}"
blacklist=""
active_projection="false"
whitelist="false"
showindex="false"
arrows_outside="false"
flip_side="false"
scale_sensitive="true"
local_locale="true"
rotate_anotation="true"
hide_back="true"
hide_arrows="false"
smallx100="false"
linked_items=""
distance_projection="20"
angle_projection="0"
avoid_overlapping="true"
onbbox="false"
bboxonly="false"
centers="false"
maxmin="false"
helpdata="&lt;b&gt;&lt;big&gt;General&lt;/big&gt;&lt;/b&gt; Display and position dimension lines and labels &lt;b&gt;&lt;big&gt;Projection&lt;/big&gt;&lt;/b&gt; Show a line with measurements based on the selected items &lt;b&gt;&lt;big&gt;Options&lt;/big&gt;&lt;/b&gt; Options for color, precision, label formatting and display &lt;b&gt;&lt;big&gt;Tips&lt;/big&gt;&lt;/b&gt; &lt;b&gt;&lt;i&gt;Custom styling:&lt;/i&gt;&lt;/b&gt; To further customize the styles, use the XML editor to find out the class or ID, then use the Style dialog to apply a new style. &lt;b&gt;&lt;i&gt;Blacklists:&lt;/i&gt;&lt;/b&gt; allow to hide some segments or projection steps. &lt;b&gt;&lt;i&gt;Multiple Measure LPEs:&lt;/i&gt;&lt;/b&gt; In the same object, in conjunction with blacklists,this allows for labels and measurements with different orientations or additional projections. &lt;b&gt;&lt;i&gt;Set Defaults:&lt;/i&gt;&lt;/b&gt; For every LPE, default values can be set at the bottom." />
<marker
style="overflow:visible"
id="marker1519"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1517" />
</marker>
<marker
style="overflow:visible"
id="TriangleOutM"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1364" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="2.6577043"
inkscape:cx="127.17743"
inkscape:cy="129.99942"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10"
fit-margin-top="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-83.749898,-94.635058)">
<path
style="fill:#ff00ff;stroke:#ff00ff;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1011)"
d="m 208.27083,177.72879 -8.95566,98.42731"
id="path1007" />
<path
style="fill:none;stroke:#ff0000;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1395)"
d="m 208.27083,177.72879 -79.9144,36.34951"
id="path1391"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM)"
d="M 240.31542,146.25174 99.664523,281.78887"
id="path1217" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="-119.34449"
y="266.36035"
id="text1507"
transform="rotate(-44.465341)"><tspan
sodipodi:role="line"
id="tspan1505"
x="-119.34449"
y="266.36035"
style="font-size:16px">bNorm</tspan></text>
<path
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 247.54911,157.14467 -7.30751,6.95146 -7.76245,-8.48559"
id="path1755" />
<path
style="fill:none;fill-opacity:1;stroke:#808080;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1519)"
d="M 240.31542,146.25174 375.85255,286.90265"
id="path1515" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="356.33493"
y="-75.652992"
id="text1559"
transform="rotate(45.53466)"><tspan
sodipodi:role="line"
id="tspan1557"
x="356.33493"
y="-75.652992"
style="font-size:16px">bNorm.ccw()</tspan></text>
<circle
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.89134;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1563"
cx="207.79117"
cy="177.55916"
r="4.4594245" />
<path
style="fill:none;stroke:#0000ff;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1645)"
d="m 240.31542,146.25174 -23.89169,23.36401"
id="path1641"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff"
x="228.36461"
y="173.38316"
id="text1769"><tspan
sodipodi:role="line"
id="tspan1767"
x="228.36461"
y="173.38316"
style="font-size:16px;fill:#0000ff">θ<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan1771">b</tspan></tspan></text>
<path
style="fill:none;stroke:#ff0000;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.26929, 3.26929;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1449)"
d="m 208.27083,177.72879 36.34951,79.9144"
id="path1445"
sodipodi:nodetypes="cc" />
<path
style="fill:#ff00ff;stroke:#ff00ff;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.26929, 3.26929;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1353)"
d="m 208.27083,177.72879 98.4273,8.95566"
id="path1349" />
<path
style="fill:none;stroke:#ff0000;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.26929, 3.26928999999999981;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1497);opacity:0.5"
d="m 240.31542,146.25174 36.34951,79.9144"
id="path1493"
sodipodi:nodetypes="cc" />
<path
style="fill:#ff00ff;stroke:#ff00ff;stroke-width:3.26929;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.26929, 3.26928999999999981;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1533);opacity:0.5"
d="m 240.31542,146.25174 98.4273,8.95566"
id="path1529" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,299 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="307.80225"
height="208.18222"
viewBox="0 0 307.80225 208.18222"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (d63ee585f6, 2020-08-11, custom)"
sodipodi:docname="find-point.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<style
id="style1605">
.measure-arrow
{
}
.measure-label
{
}
.measure-line
{
}</style>
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1645"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1643" />
</marker>
<inkscape:path-effect
effect="measure_segments"
id="path-effect1603"
is_visible="true"
lpeversion="1"
unit="mm"
orientation="parallel"
coloropacity="#000000ff"
fontbutton="Sans 10"
precision="2"
fix_overlaps="0"
position="5"
text_top_bottom="0"
helpline_distance="0"
helpline_overlap="2"
line_width="0.25"
scale="1"
format="{measure}{unit}"
blacklist=""
active_projection="false"
whitelist="false"
showindex="false"
arrows_outside="false"
flip_side="false"
scale_sensitive="true"
local_locale="true"
rotate_anotation="true"
hide_back="true"
hide_arrows="false"
smallx100="false"
linked_items=""
distance_projection="20"
angle_projection="0"
avoid_overlapping="true"
onbbox="false"
bboxonly="false"
centers="false"
maxmin="false"
helpdata="&lt;b&gt;&lt;big&gt;General&lt;/big&gt;&lt;/b&gt;
Display and position dimension lines and labels
&lt;b&gt;&lt;big&gt;Projection&lt;/big&gt;&lt;/b&gt;
Show a line with measurements based on the selected items
&lt;b&gt;&lt;big&gt;Options&lt;/big&gt;&lt;/b&gt;
Options for color, precision, label formatting and display
&lt;b&gt;&lt;big&gt;Tips&lt;/big&gt;&lt;/b&gt;
&lt;b&gt;&lt;i&gt;Custom styling:&lt;/i&gt;&lt;/b&gt; To further customize the styles, use the XML editor to find out the class or ID, then use the Style dialog to apply a new style.
&lt;b&gt;&lt;i&gt;Blacklists:&lt;/i&gt;&lt;/b&gt; allow to hide some segments or projection steps.
&lt;b&gt;&lt;i&gt;Multiple Measure LPEs:&lt;/i&gt;&lt;/b&gt; In the same object, in conjunction with blacklists,this allows for labels and measurements with different orientations or additional projections.
&lt;b&gt;&lt;i&gt;Set Defaults:&lt;/i&gt;&lt;/b&gt; For every LPE, default values can be set at the bottom." />
<marker
style="overflow:visible"
id="marker1571"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1569" />
</marker>
<marker
style="overflow:visible"
id="marker1519"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true">
<path
transform="scale(0.4)"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1517" />
</marker>
<marker
style="overflow:visible"
id="TriangleOutM"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1364" />
</marker>
<marker
style="overflow:visible"
id="marker1571-3"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="scale(0.4)"
style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:1pt;stroke-opacity:1"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path1569-6" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="10.630817"
inkscape:cx="146.46099"
inkscape:cy="64.952676"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10"
fit-margin-top="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-83.749898,-94.635058)">
<path
style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 263.61025,169.95772 c 0,0 -10.66367,14.35036 -23.27317,4.93666"
id="path1747" />
<path
style="fill:none;stroke:#000000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM)"
d="M 240.31542,146.25174 99.664523,281.78887"
id="path1217" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="-58.365868"
y="264.45288"
id="text1507"
transform="rotate(-44.465341)"><tspan
sodipodi:role="line"
id="tspan1505"
x="-58.365868"
y="264.45288"
style="font-size:16px">bNorm</tspan></text>
<path
style="fill:none;stroke:#0000ff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 248.88319,138.53474 6.95145,7.30751 -8.48559,7.76245"
id="path1755" />
<path
style="fill:#ff0000;stroke:#ff0000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1571)"
d="m 240.31542,146.25174 -1.58368,114.30611"
id="path1567"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#008000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 253.37421,160.24635 c 0,0 -27.56623,15.10365 -31.83159,-21.02529"
id="path1757" />
<path
style="fill:none;fill-opacity:1;stroke:#808080;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1519)"
d="M 240.31542,146.25174 375.85255,286.90265"
id="path1515" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="342.99881"
y="-76.441467"
id="text1559"
transform="rotate(45.53466)"><tspan
sodipodi:role="line"
id="tspan1557"
x="342.99881"
y="-76.441467"
style="font-size:16px">bNorm.ccw()</tspan></text>
<circle
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.89134;stroke-miterlimit:4;stroke-dasharray:none"
id="path1561"
cx="238.05536"
cy="272.15973"
r="4.4594245" />
<circle
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.89134;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1563"
cx="273.21555"
cy="114.23372"
r="4.4594245" />
<circle
style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.89134;stroke-miterlimit:4;stroke-dasharray:none"
id="circle1565"
cx="143.98232"
cy="109.09448"
r="4.4594245" />
<path
style="fill:none;stroke:#0000ff;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1645)"
d="m 240.31542,146.25174 23.89169,-23.36401"
id="path1641"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#008000;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1571-3)"
d="M 240.31542,146.25174 155.53223,113.45785"
id="path1567-7"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="251.02913"
y="192.64919"
id="text1751"><tspan
sodipodi:role="line"
id="tspan1749"
x="251.02913"
y="192.64919"
style="font-size:16px;fill:#ff0000">θ<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan1753">r</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff"
x="257.61835"
y="153.61459"
id="text1769"><tspan
sodipodi:role="line"
id="tspan1767"
x="257.61835"
y="153.61459"
style="font-size:16px;fill:#0000ff">θ<tspan
style="font-size:65%;baseline-shift:sub"
id="tspan1771">b</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008000"
x="206.59474"
y="153.46944"
id="text1777"><tspan
sodipodi:role="line"
id="tspan1775"
x="206.59474"
y="153.46944"
style="font-size:16px;fill:#008000">θ<tspan
style="font-size:65%;baseline-shift:sub;fill:#008000"
id="tspan1779">g</tspan></tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1,443 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="500"
height="700"
viewBox="0 0 500.00001 700"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (6f52e792f5, 2020-08-23, custom)"
sodipodi:docname="intersection-cross-product.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1557"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1555" />
</marker>
<marker
style="overflow:visible"
id="marker1499"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1497" />
</marker>
<marker
style="overflow:visible"
id="marker1489"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1487" />
</marker>
<marker
style="overflow:visible"
id="marker1347"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1345" />
</marker>
<marker
style="overflow:visible"
id="marker1231"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1229" />
</marker>
<marker
style="overflow:visible"
id="marker1159"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1157" />
</marker>
<marker
style="overflow:visible"
id="marker1149"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1147" />
</marker>
<marker
style="overflow:visible"
id="marker1091"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1089" />
</marker>
<marker
style="overflow:visible"
id="marker1033"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1031" />
</marker>
<marker
style="overflow:visible"
id="marker1023"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1021" />
</marker>
<marker
style="overflow:visible"
id="marker933"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path931" />
</marker>
<marker
style="overflow:visible"
id="marker903"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path901" />
</marker>
<marker
style="overflow:visible"
id="marker847"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path845" />
</marker>
<marker
style="overflow:visible"
id="marker1121"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1119" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.7070136"
inkscape:cx="185.70443"
inkscape:cy="463.67527"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000.0005px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1121)"
d="M 40.376023,51.195578 184.68385,195.50341"
id="path829" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker847)"
d="M 186.94302,51.087771 42.635185,195.39561"
id="path843" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="27.279669"
y="45.689095"
id="text875"><tspan
sodipodi:role="line"
id="tspan873"
x="27.279669"
y="45.689095">left</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="174.84354"
y="39.357662"
id="text879"><tspan
sodipodi:role="line"
id="tspan877"
x="174.84354"
y="39.357662">right</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.860571px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker903)"
d="M 361.95404,61.714577 486.14115,185.90169"
id="path899" />
<path
style="fill:none;stroke:#000000;stroke-width:0.860571px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker933)"
d="M 361.95404,61.714577 237.76692,185.9017"
id="path929" />
<text
xml:space="preserve"
style="font-size:13.7691px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.860571"
x="428.63852"
y="123.67144"
id="text967"><tspan
sodipodi:role="line"
id="tspan965"
x="428.63852"
y="123.67144"
style="stroke-width:0.860571">left</tspan></text>
<text
xml:space="preserve"
style="font-size:13.7691px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.860571"
x="267.50607"
y="120.33862"
id="text971"><tspan
sodipodi:role="line"
id="tspan969"
x="267.50607"
y="120.33862"
style="stroke-width:0.860571">right</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1033)"
d="M 31.562822,248.05474 175.87065,392.36257"
id="path1009" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1023)"
d="M 178.12982,247.94693 33.821984,392.25477"
id="path1011" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="168.3092"
y="239.50467"
id="text1015"><tspan
sodipodi:role="line"
id="tspan1013"
x="168.3092"
y="239.50467">left</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="13.953851"
y="240.20125"
id="text1019"><tspan
sodipodi:role="line"
id="tspan1017"
x="13.953851"
y="240.20125">right</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.860571px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1159)"
d="M 353.68417,264.68996 477.87128,388.87707"
id="path1135" />
<path
style="fill:none;stroke:#000000;stroke-width:0.860571px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1149)"
d="M 353.68417,264.68996 229.49705,388.87708"
id="path1137" />
<text
xml:space="preserve"
style="font-size:13.7691px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.860571"
x="261.2811"
y="322.17184"
id="text1141"><tspan
sodipodi:role="line"
id="tspan1139"
x="261.2811"
y="322.17184"
style="stroke-width:0.860571">left</tspan></text>
<text
xml:space="preserve"
style="font-size:13.7691px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.860571"
x="413.39346"
y="319.2049"
id="text1145"><tspan
sodipodi:role="line"
id="tspan1143"
x="413.39346"
y="319.2049"
style="stroke-width:0.860571">right</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="304.15286"
y="29.0243"
id="text1193"><tspan
sodipodi:role="line"
id="tspan1191"
x="304.15286"
y="29.0243">cross(ldir, rdir);</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1231);paint-order:normal"
d="m 390.02678,90.544454 c 0,0 -25.46234,33.475456 -54.15233,0.04604"
id="path1227"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1347)"
d="m 326.30728,291.97517 c 0,0 20.78023,28.33579 51.3341,-0.47436"
id="path1343"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12.5877px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.786733"
x="301.95645"
y="141.09514"
id="text1385"><tspan
sodipodi:role="line"
id="tspan1383"
x="301.95645"
y="141.09514"
style="stroke-width:0.786733">cross(ldir, rdir) &gt; 0</tspan></text>
<text
xml:space="preserve"
style="font-size:12.5877px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.786733"
x="289.08221"
y="359.32712"
id="text1389"><tspan
sodipodi:role="line"
id="tspan1387"
x="289.08221"
y="359.32712"
style="stroke-width:0.786733">cross(ldir, rdir) &lt; 0</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1499)"
d="M 33.412499,452.06889 177.72033,596.37672"
id="path1479" />
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="56.942776"
y="522.93726"
id="text1485"><tspan
sodipodi:role="line"
id="tspan1483"
x="56.942776"
y="522.93726">left</tspan></text>
<text
xml:space="preserve"
style="font-size:16px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px"
x="139.73827"
y="506.14304"
id="text1539"><tspan
sodipodi:role="line"
id="tspan1537"
x="139.73827"
y="506.14304">right</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1557)"
d="M 43.272694,443.14263 187.58052,587.45046"
id="path1553" />
<text
xml:space="preserve"
style="font-size:12.5877px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.786733"
x="292.02301"
y="537.99573"
id="text1585"><tspan
sodipodi:role="line"
id="tspan1583"
x="292.02301"
y="537.99573"
style="stroke-width:0.786733">cross(ldir, rdir) = 0</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,373 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="445.25089"
height="357.09039"
viewBox="0 0 445.25089 357.09039"
version="1.1"
id="svg6"
inkscape:version="1.1-dev (6f52e792f5, 2020-08-23, custom)"
sodipodi:docname="intersection-cross-products.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker1503"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1501" />
</marker>
<marker
style="overflow:visible"
id="marker1461"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1459" />
</marker>
<marker
style="overflow:visible"
id="marker1427"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1425" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Mend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1142" />
</marker>
<marker
style="overflow:visible"
id="marker1119"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1117" />
</marker>
<marker
style="overflow:visible"
id="marker1097"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1095" />
</marker>
<marker
style="overflow:visible"
id="marker1063"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000080;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1061" />
</marker>
<marker
style="overflow:visible"
id="marker1025"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1023" />
</marker>
<marker
style="overflow:visible"
id="marker951"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#008000;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path949" />
</marker>
<marker
style="overflow:visible"
id="marker941"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path939" />
</marker>
<marker
style="overflow:visible"
id="marker871"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path869" />
</marker>
<marker
style="overflow:visible"
id="marker1121"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1119" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="408"
inkscape:cy="330.5"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
width="1000px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
showguides="false"
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
fit-margin-bottom="10" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-28.419477,-56.383514)">
<path
style="fill:none;stroke:#000000;stroke-width:1.30108;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1121)"
d="M 93.063111,88.297429 405.71371,400.94806"
id="path829" />
<path
style="fill:none;stroke:#000000;stroke-width:1.30108;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker871)"
d="M 406.50688,87.557219 93.856281,400.20785"
id="path867" />
<text
xml:space="preserve"
style="font-size:20.8173px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:1.30108"
x="144.9722"
y="193.51253"
id="text909"><tspan
sodipodi:role="line"
id="tspan907"
x="144.9722"
y="193.51253"
style="stroke-width:1.30108">left</tspan></text>
<text
xml:space="preserve"
style="font-size:20.8173px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:1.30108"
x="317.59818"
y="190.99515"
id="text913"><tspan
sodipodi:role="line"
id="tspan911"
x="317.59818"
y="190.99515"
style="stroke-width:1.30108">right</tspan></text>
<path
style="fill:none;stroke:#008000;stroke-width:1.30108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker951)"
d="M 406.50688,87.557219 93.063111,88.297429"
id="path995" />
<path
style="fill:none;stroke:#ff0000;stroke-width:1.30108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1025)"
d="M 406.50688,87.557219 405.71371,400.94806"
id="path1021" />
<text
xml:space="preserve"
style="font-size:20.8173px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008000;stroke-width:1.30108"
x="238.57541"
y="82.199783"
id="text1047"><tspan
sodipodi:role="line"
id="tspan1045"
x="238.57541"
y="82.199783"
style="stroke-width:1.30108">sdiff1</tspan></text>
<text
xml:space="preserve"
style="font-size:20.8173px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke-width:1.30108"
x="413.12622"
y="252.7749"
id="text1051"><tspan
sodipodi:role="line"
id="tspan1049"
x="413.12622"
y="252.7749"
style="stroke-width:1.30108">ediff1</tspan></text>
<path
style="fill:none;stroke:#000080;stroke-width:1.30108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1063)"
d="m 93.063111,86.817009 313.443769,0.74021"
id="path1059" />
<text
xml:space="preserve"
style="font-size:20.8173px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000080;stroke:none;stroke-width:1.30108"
x="238.3334"
y="108.95457"
id="text1091"><tspan
sodipodi:role="line"
id="tspan1089"
x="238.3334"
y="108.95457"
style="stroke-width:1.30108">sdiff2</tspan></text>
<path
style="fill:none;stroke:#ff00ff;stroke-width:1.30108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1097)"
d="m 93.063111,86.817009 0.79317,313.390841"
id="path1093" />
<text
xml:space="preserve"
style="font-size:20.8173px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;stroke-width:1.30108"
x="33.270866"
y="248.48138"
id="text1113"><tspan
sodipodi:role="line"
id="tspan1111"
x="33.270866"
y="248.48138"
style="stroke-width:1.30108">ediff2</tspan></text>
<path
style="fill:none;stroke:#008000;stroke-width:1.30108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="m 370.3101,124.92022 c 0,0 -30.07994,-6.6184 -24.16392,-37.112011"
id="path1115" />
<text
xml:space="preserve"
style="font-size:11.4862px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008000;stroke-width:0.717889"
x="318.56375"
y="122.53162"
id="text1421"><tspan
sodipodi:role="line"
id="tspan1419"
x="318.56375"
y="122.53162"
style="stroke-width:0.717889">srDot</tspan></text>
<path
style="fill:none;stroke:#ff0000;stroke-width:1.30108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1427)"
d="m 370.3101,124.92022 c 0,0 14.56784,23.53419 36.68947,13.21591"
id="path1423" />
<text
xml:space="preserve"
style="font-size:11.4862px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke-width:0.717889"
x="364.55103"
y="153.52997"
id="text1449"><tspan
sodipodi:role="line"
id="tspan1447"
x="364.55103"
y="153.52997"
style="fill:#ff0000;stroke-width:0.717889">erDot</tspan></text>
<path
style="fill:none;stroke:#000080;stroke-width:1.30108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1461)"
d="m 130.61307,126.17116 c 0,0 23.53418,-14.56785 13.2159,-36.689471"
id="path1457" />
<path
style="fill:none;stroke:#ff00ff;stroke-width:1.30108px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1503)"
d="m 130.61307,126.17116 c 0,0 -6.61841,30.07994 -37.112019,24.16392"
id="path1499" />
<text
xml:space="preserve"
style="font-size:11.4862px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000080;stroke-width:0.717889"
x="151.19702"
y="125.0546"
id="text1537"><tspan
sodipodi:role="line"
id="tspan1535"
x="151.19702"
y="125.0546"
style="fill:#000080;stroke-width:0.717889">slDot</tspan></text>
<text
xml:space="preserve"
style="font-size:11.4862px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;stroke-width:0.717889"
x="111.54098"
y="163.82812"
id="text1541"><tspan
sodipodi:role="line"
id="tspan1539"
x="111.54098"
y="163.82812"
style="fill:#ff00ff;stroke-width:0.717889">elDot</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

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