Initial Commit

This commit is contained in:
Yousef Khadadeh 2025-07-06 20:43:53 +03:00
commit 6088fc29ed
978 changed files with 353647 additions and 0 deletions

6
.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
.cache
build
src/Server/build
CMakeUserPresets.json
compile_commands.json
bscript

330
CMakeLists.txt Executable file
View file

@ -0,0 +1,330 @@
cmake_minimum_required(VERSION 3.27.0)
set(CMAKE_CXX_STANDARD 23)
project(infinipaint)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Options to set
option(USE_VULKAN "Set to use Vulkan" OFF)
option(USE_GRAPHITE "Set to use Skia graphite for backends that support it" OFF)
option(USE_ASAN "Enable Address Sanitizer" OFF)
option(USE_UBSAN "Enable Undefined Behaviour Sanitizer" OFF)
option(USE_LEAKSAN "Enable Leak Sanitizer" OFF)
option(USE_THREADSAN "Enable Thread Sanitizer" OFF)
option(USE_MEMORYSAN "Enable Memory Sanitizer" OFF)
option(LINK_SKIA_MANUALLY "Link skia not as a package, but as separate libraries for non-Conan builds" OFF)
option(EMSCRIPTEN_SINGLE_HTML_FILE "Building with emscripten generates a single HTML file" OFF)
option(TBB_NOT_ONETBB "Use TBB::tbb package and not onetbb::onetbb package from conan" OFF)
# Setting sources
set(sources "src/main.cpp"
"src/SwitchCWD.cpp"
"src/MainProgram.cpp"
"src/DrawData.cpp"
"src/FontData.cpp"
"src/GridManager.cpp"
"src/TimePoint.cpp"
"src/ConnectionManager.cpp"
"src/InputManager.cpp"
"src/UndoManager.cpp"
"src/DrawCamera.cpp"
"src/DrawCollision.cpp"
"src/CoordSpaceHelper.cpp"
"src/ResourceManager.cpp"
"src/Toolbar.cpp"
"src/World.cpp"
"src/FileHelpers.cpp"
"src/BookmarkManager.cpp"
"src/ResourceDisplay/ResourceDisplay.cpp"
"src/ResourceDisplay/ImageResourceDisplay.cpp"
"src/ResourceDisplay/FileResourceDisplay.cpp"
"src/Server/MainServer.cpp"
"src/Server/ClientData.cpp"
"src/CollabTextBox/CollabTextBox.cpp"
"src/CollabTextBox/CollabTextBoxShaper.cpp"
"src/DrawingProgram/DrawingProgram.cpp"
"src/DrawingProgram/BrushTool.cpp"
"src/DrawingProgram/TextBoxTool.cpp"
"src/DrawingProgram/EraserTool.cpp"
"src/DrawingProgram/RectSelectTool.cpp"
"src/DrawingProgram/RectDrawTool.cpp"
"src/DrawingProgram/EllipseDrawTool.cpp"
"src/DrawingProgram/InkDropperTool.cpp"
"src/DrawingProgram/ScreenshotTool.cpp"
"src/DrawingProgram/EditTool.cpp"
"src/DrawingProgram/ImageTool.cpp"
"src/DrawComponents/DrawEllipse.cpp"
"src/DrawComponents/DrawRectangle.cpp"
"src/DrawComponents/DrawImage.cpp"
"src/DrawComponents/DrawBrushStroke.cpp"
"src/DrawComponents/DrawTextBox.cpp"
"src/DrawComponents/DrawComponent.cpp"
"src/GUIStuff/GUIManager.cpp"
"src/GUIStuff/GUIManagerID.cpp"
"src/GUIStuff/ClayImplement.cpp"
"src/GUIStuff/Elements/Element.cpp"
"src/GUIStuff/Elements/SVGIcon.cpp"
"src/GUIStuff/Elements/RadioButton.cpp"
"src/GUIStuff/Elements/CheckBox.cpp"
"src/GUIStuff/Elements/SelectableButton.cpp"
"src/GUIStuff/Elements/MovableTabList.cpp"
"src/GUIStuff/Elements/PaintCircleMenu.cpp"
"include/sago/platform_folders.cpp"
"include/Helpers/Networking/NetLibrary.cpp"
"include/Helpers/Networking/NetServer.cpp"
"include/Helpers/Networking/NetClient.cpp"
"include/Helpers/Networking/ByteStream.cpp"
"include/Helpers/Hashes.cpp"
"include/Helpers/BezierEasing.cpp"
"include/Helpers/Random.cpp"
"include/Helpers/Logger.cpp"
"include/Helpers/StringHelpers.cpp"
"include/Helpers/Serializers.cpp"
)
if(USE_VULKAN)
list(APPEND sources
"include/VkBootstrap.cpp"
"src/VulkanContext/VkTestMemoryAllocator.cpp"
"src/VulkanContext/VkTestUtils.cpp"
"src/VulkanContext/WindowContext.cpp"
"src/VulkanContext/VulkanWindowContext.cpp"
)
if(USE_GRAPHITE)
list(APPEND sources
"src/VulkanContext/GraphiteNativeVulkanWindowContext.cpp"
"src/VulkanContext/GraphiteToolUtils.cpp"
)
endif()
elseif(NOT EMSCRIPTEN)
list(APPEND sources "include/glad.c")
endif()
if(WIN32)
list(APPEND sources "windowsinstall/app.rc")
endif()
# Get libraries
if(LINK_SKIA_MANUALLY)
set(SKIA_INCLUDE "modules/skia" CACHE PATH "Path to Skia root directory")
set(SKIA_LIB_PATH "modules/skia/out/Static" CACHE PATH "Path to Skia libs")
find_library(SKIA_LIB skia PATHS ${SKIA_LIB_PATH})
find_library(SKIA_SVG_LIB svg PATHS ${SKIA_LIB_PATH})
find_library(SKIA_RESOURCES_LIB skresources PATHS ${SKIA_LIB_PATH})
find_library(SKIA_PARAGRAPH_LIB skparagraph PATHS ${SKIA_LIB_PATH})
find_library(SKIA_SHAPER_LIB skshaper PATHS ${SKIA_LIB_PATH})
find_library(SKIA_UNICODE_ICU_LIB skunicode_icu PATHS ${SKIA_LIB_PATH})
find_library(SKIA_UNICODE_CORE_LIB skunicode_core PATHS ${SKIA_LIB_PATH})
else()
find_package(skia)
endif()
if(NOT EMSCRIPTEN)
find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3-shared)
find_package(LibDataChannel REQUIRED)
else()
find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3-static)
endif()
if((NOT EMSCRIPTEN) AND (NOT APPLE))
find_package(TBB REQUIRED)
endif()
message("Skia root: " ${SKIA_INCLUDE})
message("Build type: " ${CMAKE_BUILD_TYPE})
add_executable(infinipaint ${sources})
if(WIN32)
set_target_properties(infinipaint PROPERTIES WIN32_EXECUTABLE TRUE)
elseif(APPLE)
set_target_properties(infinipaint PROPERTIES MACOSX_BUNDLE TRUE)
set_target_properties(infinipaint PROPERTIES
BUNDLE True
MACOSX_BUNDLE_GUI_IDENTIFIER com.erroratline0.infinipaint
MACOSX_BUNDLE_BUNDLE_NAME infinipaint
MACOSX_BUNDLE_BUNDLE_VERSION "0.0.1"
MACOSX_BUNDLE_SHORT_VERSION_STRING "0.0.1"
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/macosinstall/Info.plist
)
add_custom_command(TARGET infinipaint POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_SOURCE_DIR}/data"
"$<TARGET_FILE_DIR:infinipaint>/../Resources/data"
)
add_custom_command(TARGET infinipaint POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_SOURCE_DIR}/macosinstall/appicon.icns"
"$<TARGET_FILE_DIR:infinipaint>/../Resources/appicon.icns"
)
endif()
if(EMSCRIPTEN)
# Debug
#target_compile_options(infinipaint PRIVATE -Wall -fdiagnostics-color -sUSE_SDL=0)
#target_link_options(infinipaint PRIVATE --emrun -sUSE_SDL=0 -sFULL_ES2 -sUSE_WEBGL2=1 --embed-file data -sSINGLE_FILE -sALLOW_MEMORY_GROWTH -sEXPORTED_RUNTIME_METHODS=ccall -sEXPORTED_FUNCTIONS=[_main,_malloc,_free] --shell-file emscripteninstall/debugshell.html -sASSERTIONS -sMAXIMUM_MEMORY=4GB -sNO_DISABLE_EXCEPTION_CATCHING)
# Release
target_compile_options(infinipaint PRIVATE -Wall -fdiagnostics-color -sUSE_SDL=0 -O3 -include functional)
target_link_options(infinipaint PRIVATE --emrun -sUSE_SDL=0 -sFULL_ES2 -sUSE_WEBGL2=1 --embed-file data -sALLOW_MEMORY_GROWTH -sEXPORTED_RUNTIME_METHODS=ccall -sEXPORTED_FUNCTIONS=[_main,_malloc,_free] -sMAXIMUM_MEMORY=4GB -O3 -sSINGLE_FILE -lidbfs.js)
if(EMSCRIPTEN_SINGLE_HTML_FILE)
target_link_options(infinipaint PRIVATE --shell-file emscripteninstall/singlefilereleaseshell.html)
set(CMAKE_EXECUTABLE_SUFFIX ".html")
else()
set(CMAKE_EXECUTABLE_SUFFIX ".js")
endif()
message("In Emscripten Mode")
endif()
if(USE_ASAN)
target_compile_options(infinipaint PRIVATE -fsanitize=address)
target_link_options(infinipaint PRIVATE -fsanitize=address)
message("Using ASAN")
endif()
if(USE_UBSAN)
target_compile_options(infinipaint PRIVATE -fsanitize=undefined)
target_link_options(infinipaint PRIVATE -fsanitize=undefined)
message("Using UBSan")
endif()
if(USE_LEAKSAN)
target_compile_options(infinipaint PRIVATE -fsanitize=leak)
target_link_options(infinipaint PRIVATE -fsanitize=leak)
message("Using LeakSan")
endif()
if(USE_THREADSAN)
target_compile_options(infinipaint PRIVATE -fsanitize=thread)
target_link_options(infinipaint PRIVATE -fsanitize=thread)
message("Using ThreadSan")
endif()
if(USE_MEMORYSAN)
target_compile_options(infinipaint PRIVATE -fsanitize=memory)
target_link_options(infinipaint PRIVATE -fsanitize=memory)
message("Using MemSan")
endif()
if(NOT WIN32)
if(CMAKE_BUILD_TYPE STREQUAL Debug)
target_compile_options(infinipaint PRIVATE -g -Wall -fdiagnostics-color)
message("In Debug Mode")
else()
target_compile_options(infinipaint PRIVATE -O3 -Wall -fdiagnostics-color)
target_link_options(infinipaint PRIVATE -O3) # Other things to consider: -ffast-math and -march=native
message("In Release Mode")
endif()
endif()
target_include_directories(infinipaint PRIVATE "include")
target_compile_definitions(infinipaint PRIVATE IS_CLIENT)
if(WIN32)
target_compile_definitions(infinipaint PRIVATE WIN32_LEAN_AND_MEAN NOMINMAX)
endif()
if((NOT USE_VULKAN) AND (NOT EMSCRIPTEN))
find_package(OpenGL REQUIRED)
target_link_libraries(infinipaint OpenGL::GL)
endif()
if((NOT EMSCRIPTEN) AND (NOT APPLE))
if(TBB_NOT_ONETBB)
target_link_libraries(infinipaint TBB::tbb)
else()
target_link_libraries(infinipaint onetbb::onetbb)
endif()
endif()
target_link_libraries(infinipaint SDL3::SDL3)
if(EMSCRIPTEN)
add_subdirectory(deps/datachannel-wasm EXCLUDE_FROM_ALL)
target_link_libraries(infinipaint datachannel-wasm)
else()
target_link_libraries(infinipaint LibDataChannel::LibDataChannel)
endif()
if(LINK_SKIA_MANUALLY)
target_link_libraries(infinipaint ${SKIA_SVG_LIB} ${SKIA_RESOURCES_LIB} ${SKIA_LIB} ${SKIA_UNICODE_CORE_LIB} ${SKIA_UNICODE_ICU_LIB} ${SKIA_UNICODE_CORE_LIB} ${SKIA_PARAGRAPH_LIB} ${SKIA_SHAPER_LIB})
target_include_directories(infinipaint PRIVATE ${SKIA_INCLUDE})
else()
target_link_libraries(infinipaint skia::skia)
endif()
if((NOT USE_VULKAN) AND (NOT EMSCRIPTEN) AND LINUX)
target_link_libraries(infinipaint OpenGL::GLX)
endif()
if(USE_VULKAN)
target_compile_definitions(infinipaint PRIVATE USE_BACKEND_VULKAN SK_VULKAN)
if(USE_GRAPHITE)
target_compile_definitions(infinipaint PRIVATE SK_GRAPHITE USE_SKIA_BACKEND_GRAPHITE)
else()
target_compile_definitions(infinipaint PRIVATE USE_SKIA_BACKEND_GANESH)
endif()
else()
target_compile_definitions(infinipaint PRIVATE USE_BACKEND_OPENGL USE_SKIA_BACKEND_GANESH)
endif()
target_compile_definitions(infinipaint PRIVATE BOOST_MP_STANDALONE EIGEN_MPL2_ONLY)
if(APPLE OR WIN32)
install(TARGETS infinipaint DESTINATION .)
set(CPACK_PACKAGE_NAME "infinipaint")
set(CPACK_PACKAGE_VERSION_MAJOR "0")
set(CPACK_PACKAGE_VERSION_MINOR "0")
set(CPACK_PACKAGE_VERSION_PATCH "1")
set(CPACK_PACKAGE_VENDOR "ErrorAtLine0")
set(CPACK_PACKAGE_CONTACT "erroratline0@gmail.com")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
endif()
if(APPLE)
# Nothing specific here for now
elseif(WIN32)
install(DIRECTORY data DESTINATION .)
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
include(InstallRequiredSystemLibraries)
install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION .)
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
set(CPACK_NSIS_DISPLAY_NAME "InfiniPaint")
set(CPACK_NSIS_PACKAGE_NAME "InfiniPaint")
set(CPACK_NSIS_UNINSTALL_NAME "InfiniPaint Uninstall")
set(CPACK_NSIS_WELCOME_TITLE "Welcome to InfiniPaint Installer")
set(CPACK_NSIS_EXECUTABLES_DIRECTORY .)
set(CPACK_NSIS_URL_INFO_ABOUT "https://infinipaint.com")
set(CPACK_NSIS_MENU_LINKS "infinipaint.exe" "InfiniPaint")
set(CPACK_NSIS_INSTALLED_ICON_NAME "infinipaint.exe")
set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/windowsinstall/icon.ico")
set(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/windowsinstall/icon.ico")
# A backslash character uses 4 backslashes, since we have to escape twice
# Double quote uses 3 backslashes, since we have to escape the backslash (two slashes), and escape the double quote (one slash)
set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
WriteRegStr HKCR '.infpnt' '' 'InfiniPaintCanvas'
WriteRegStr HKCR 'InfiniPaintCanvas' '' 'InfiniPaint Canvas File'
WriteRegStr HKCR 'InfiniPaintCanvas\\\\shell' '' 'open'
WriteRegStr HKCR 'InfiniPaintCanvas\\\\DefaultIcon' '' '\\\"$INSTDIR\\\\infinipaint.exe\\\",0'
WriteRegStr HKCR 'InfiniPaintCanvas\\\\shell\\\\open\\\\command' '' '\\\"$INSTDIR\\\\infinipaint.exe\\\" \\\"%1\\\"'
WriteRegStr HKCR 'InfiniPaintCanvas\\\\shell\\\\edit' '' 'Edit InfiniPaint Canvas File'
WriteRegStr HKCR 'InfiniPaintCanvas\\\\shell\\\\edit\\\\command' '' '\\\"$INSTDIR\\\\infinipaint.exe\\\" \\\"%1\\\"'
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
")
set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
DeleteRegKey HKCR '.infpnt'
DeleteRegKey HKCR 'InfiniPaintCanvas'
")
else()
install(DIRECTORY data DESTINATION bin)
install(TARGETS infinipaint DESTINATION bin)
install(FILES linuxinstall/com.erroratline0.infinipaint.desktop DESTINATION share/applications)
install(FILES logo.svg DESTINATION share/icons/hicolor/scalable/apps RENAME com.erroratline0.infinipaint.svg)
install(FILES linuxinstall/com.erroratline0.infinipaint.metainfo.xml DESTINATION share/metainfo)
install(FILES linuxinstall/com.erroratline0.infinipaint.xml DESTINATION share/mime/packages)
endif()
if(APPLE OR WIN32)
include(CPack)
endif()

7
LICENSE Executable file
View file

@ -0,0 +1,7 @@
Copyright (c) 2025 Yousef Khadadeh
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

1
NOTICE Normal file
View file

@ -0,0 +1 @@
Third party libraries are used in this project. The licenses for these libraries are included in data/third_party_licenses. This directory includes licenses for direct dependencies, as well as for some of the dependencies for libraries used by this project.

42
README Normal file
View file

@ -0,0 +1,42 @@
# ![InfiniPaint Logo](logo.svg) InfiniPaint
InfiniPaint is a **collaborative, infinite** canvas note-taking/drawing app. Unlike many other infinite canvas apps, although there is a specific zoom-in level limit, there is **no zoom-out limit** (at least up until the point your computer runs out of memory). This means that this app is very good at things such as drawing sketches of the solar system to scale, or just drawing any massive objects with tiny details. Of course, even though this is a feature, this app is also perfectly well suited for use as a normal canvas.
You can try the web version of this app at [infinipaint.com](https://infinipaint.com) (requires a WebGL2 capable browser). The web version was compiled from C++ to Javascript using Emscripten, and may contain some bugs, so if possible, please consider downloading the native version for a better experience.
This program is a work in progress, so I cannot guarantee that files created in this version will open in future versions.
This app was inspired by [Lorien](https://github.com/mbrlabs/Lorien), another great infinite canvas program.
##Features
- Infinite canvas, with infinite zoom
- Open online lobbies for collaboration
- Text chat with others in the lobby
- Jump to the location of other players through the player list
- See other members draw in real time
- Although this is a feature, this app can also be used offline
- Graphics tablet support (Pressure sensitive brush and eraser detection)
- Saveable color palettes
- Quick menu usable by right clicking on the canvas, which can be used to:
- Quickly change brush colors using the currently selected color palette
- Rotate the canvas
- Place bookmarks on the canvas to jump to later
- Undo/Redo
- PNG, JPG, WEBP export of specific parts of the canvas at any resolution (Screenshot Tool)
- Transform (Move, Scale, Rotate) any object on the canvas (Rectangle Select Tool)
- Display Images and animated GIFs on the canvas
- Note: May take a lot of memory to store and display images compared to other objects, especially GIFs
- Hide (or unhide) the UI by pressing Tab
- Remappable keybinds
- Create custom UI themes
- Static square grid at initial zoom level
- Other tools: Textbox, Rectangle, Circle, Eye dropper/color picker, Edit/cursor
- Can copy/paste objects selected with the Rectangle Select tool (Ctrl-C Ctrl-V). This can also be done between different files, as long as they're open in different tabs in the same window.
- Any file can be placed on the canvas, and using the edit tool, you can download any file/image on the canvas to your computer. This can be used as a sort of file sharing mechanism in a collaborative canvas (should probably only use this for small files...)
##More Info
- [Usage Manual](docs/MANUAL.md)
- [Building from Source](docs/BUILDING.md)

24
conan/conan-skia/LICENSE Normal file
View file

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org>

View file

@ -0,0 +1,52 @@
# Conan 2.0 recipe for Skia
Conan 2.0 recipe for Skia graphics library.
## Usage
You can add this repository as [Local Recipes Index Repository](https://docs.conan.io/2/tutorial/conan_repositories/setup_local_recipes_index.html), or manually `conan create` the recipe at `recipes/skia/all`.
## Version
Currently supports following versions:
* `chrome/m130`
* `130.20241118.0`
* `chrome/m131`
* `131.20250131.0`
* `chrome/m132`
* `132.20250131.0`
* `chrome/m133`
* `133.20250327.0`
* `chrome/m134`
* `134.20250327.0`
Version numbers are formatted as `(chrome milestone version).(checkout date).0`
If you need other versions, please open new issue on Github.
## Requirements
* Since `chrome/m100` Skia requires C++17.
## OS
Tested on following OS (with default options):
| OS | shared | static |
| ------------- | ------ | ------ |
| Windows | ![build](https://github.com/mocabe/conan-skia/actions/workflows/windows-latest-shared.yml/badge.svg) | ![build](https://github.com/mocabe/conan-skia/actions/workflows/windows-latest-static.yml/badge.svg) |
| Macos | ![build](https://github.com/mocabe/conan-skia/actions/workflows/macos-latest-shared.yml/badge.svg) | ![build](https://github.com/mocabe/conan-skia/actions/workflows/macos-latest-static.yml/badge.svg) |
| iOS | ![build](https://github.com/mocabe/conan-skia/actions/workflows/ios-armv8-shared.yml/badge.svg) | ![build](https://github.com/mocabe/conan-skia/actions/workflows/ios-armv8-static.yml/badge.svg) |
| Linux | ![build](https://github.com/mocabe/conan-skia/actions/workflows/ubuntu-latest-shared.yml/badge.svg) | ![build](https://github.com/mocabe/conan-skia/actions/workflows/ubuntu-latest-static.yml/badge.svg) |
| Android/arm64 | ![build](https://github.com/mocabe/conan-skia/actions/workflows/android-armv8-shared.yml/badge.svg) | ![build](https://github.com/mocabe/conan-skia/actions/workflows/android-armv8-static.yml/badge.svg) |
| Android/arm32 | ![build](https://github.com/mocabe/conan-skia/actions/workflows/android-armv7-shared.yml/badge.svg) | ![build](https://github.com/mocabe/conan-skia/actions/workflows/android-armv7-static.yml/badge.svg) |
| Emscripten | | ![build](https://github.com/mocabe/conan-skia/actions/workflows/emscripten-static.yml/badge.svg) |
## Bug reports
Please open new issue on Github Issues.
## License
The Unlicense (Public Domain)

View file

@ -0,0 +1,14 @@
include(default)
[settings]
os=Android
os.api_level=28
arch=armv7
compiler=clang
compiler.version=12
compiler.libcxx=c++_static
compiler.cppstd=17
[tool_requires]
android-ndk/r26d
make/4.4.1

View file

@ -0,0 +1,14 @@
include(default)
[settings]
os=Android
os.api_level=28
arch=armv8
compiler=clang
compiler.version=12
compiler.libcxx=c++_static
compiler.cppstd=17
[tool_requires]
android-ndk/r26d
make/4.4.1

View file

@ -0,0 +1,12 @@
include(default)
[settings]
os=Emscripten
arch=wasm
compiler=clang
compiler.version=16
compiler.libcxx=libc++
compiler.cppstd=17
[tool_requires]
*: emsdk/3.1.50

View file

@ -0,0 +1,11 @@
include(default)
[settings]
os=iOS
os.version=17.5
os.sdk=iphoneos
os.sdk_version=17.5
arch=armv8.3
compiler=apple-clang
compiler.version=15.0
compiler.libcxx=libc++

View file

@ -0,0 +1,2 @@
[properties]
sys_root = ''

View file

@ -0,0 +1,37 @@
sources:
"126.20240526.0":
url:
- "https://github.com/google/skia/archive/69980ce8d04144b41adbc5cc194f29adbc12ceaa.zip"
sha256: "8096a1f4317cac42e6f868af6cf7c22c5f75cd79e5217ff4be768bae9218168e"
"127.20240803.0":
url:
- "https://github.com/google/skia/archive/1c8089adffdabe3790cc4ca4fb36e24c2f6ab792.zip"
sha256: "d00e9d3c00b23cb057ce9a3afccbe8cee15d85135def375265488f974b273290"
"128.20241118.0":
url:
- "https://github.com/google/skia/archive/5cc7e24d986e9c1ba3d44c4a36353b393305a79b.zip"
sha256: "bcaf85d84d96e25d3b03aa55a3835ac01c1d24df90982869d23db11706cd4794"
"129.20241118.0":
url:
- "https://github.com/google/skia/archive/80be572399d10cec68fd971a64984b2b0feb5f66.zip"
sha256: "1f8fdc4c78499d9b1daa0b832ddb99f06206ebfd2d472d66e75284d6310509eb"
"130.20241118.0":
url:
- "https://github.com/google/skia/archive/d41eba845cdb7ade07e68f20676675c25e2734fc.zip"
sha256: "9e0662def5a76c95b5c43b50be052dab965ae30188a40e8926f19823ae113d03"
"131.20250131.0":
url:
- "https://github.com/google/skia/archive/f14f6b1ab7cf544c0190074488d17821281cfa4d.zip"
sha256: "05cee9a0051af3f62cf72dcc9f19151ad17eef3e8e7bac46f8f539d04fce327f"
"132.20250131.0":
url:
- "https://github.com/google/skia/archive/ee9db7d1348f76780fd0184b9b0243d653e36411.zip"
sha256: "47285853c86a2a7a0f2ee6cede13043b79a71c0ba1302b70ef63e335d07e8192"
"133.20250327.0":
url:
- "https://github.com/google/skia/archive/ecebe831881cdf52c65df518777210071f7970dd.zip"
sha256: "3595d8e00f06b77b7636f3ef31b04ac5a2ca5bdba872528e460b9cfe80ef4433"
"134.20250327.0":
url:
- "https://github.com/google/skia/archive/aefbd9403c1b3032ad4cd0281ef312ed262c7125.zip"
sha256: "e10c67a96828b9f36364e2459cdee3e3b381a3875ff78db2b30e7b6fe69509bb"

View file

@ -0,0 +1,967 @@
from conan import ConanFile
from conan.tools.files import apply_conandata_patches, export_conandata_patches, get, copy, rename, mkdir, rmdir, save, replace_in_file
from conan.tools.build.flags import cppstd_flag
from conan.tools.build import check_min_cppstd
from conan.tools.microsoft import is_msvc
from conan.tools.microsoft.visual import msvc_runtime_flag
from conan.tools.apple import is_apple_os, XCRun
from conan.tools.gnu import AutotoolsToolchain
from conan.tools.env import VirtualBuildEnv
from conan.errors import ConanInvalidConfiguration
from os.path import join
import os
import re
import json
class ConanSkia(ConanFile):
name = "skia"
package_type = "library"
# Optional metadata
license = "<Put the package license here>"
author = "<Put your name here> <And your email here>"
url = "<Package recipe repository url here, for issues about the package>"
description = "<Description of skia package here>"
topics = ("<Put some tag here>", "<here>", "<and here>")
# Binary configuration
settings = "os", "compiler", "build_type", "arch"
_skia_options = {
# configurable dependencies
"use_expat" : [True, False],
"use_freetype" : [True, False],
"use_harfbuzz" : [True, False],
"use_icu" : [True, False],
"use_libjpeg_turbo_encode" : [True, False],
"use_libjpeg_turbo_decode" : [True, False],
"use_libpng_encode" : [True, False],
"use_libpng_decode" : [True, False],
"use_libwebp_encode" : [True, False],
"use_libwebp_decode" : [True, False],
"use_zlib" : [True, False],
# system library options
"use_system_expat" : [True, False],
"use_system_freetype": [True, False],
"use_system_harfbuzz" : [True, False],
"use_system_icu" :[True, False],
"use_system_libjpeg_turbo" : [True, False],
"use_system_libpng" : [True, False],
"use_system_libwebp" : [True, False],
"use_system_zlib" : [True, False],
# conan library options
"use_conan_expat" : [True, False],
"use_conan_freetype": [True, False],
"use_conan_fontconfig": [True, False],
"use_conan_harfbuzz" : [True, False],
"use_conan_icu" :[True, False],
"use_conan_libjpeg_turbo" : [True, False],
"use_conan_libpng" : [True, False],
"use_conan_libwebp" : [True, False],
"use_conan_zlib" : [True, False],
# backend options
"use_angle" : [True, False],
"use_gl" : [True, False],
"use_vulkan" : [True, False],
"use_metal" : [True, False],
"use_webgl" : [True, False],
"use_webgpu" : [True, False],
"use_dawn" : [True, False],
"use_direct3d" :[True, False],
"use_piex" : [True, False],
"use_wuffs" : [True, False],
"use_libavif" : [True, False],
"use_libjxl_decode" : [True, False],
"use_ndk_images" : [True, False],
"use_x11" : [True, False],
"use_xps" : [True, False],
"use_dng_sdk" : [True, False],
"use_fontconfig" : [True, False],
"use_fonthost_mac" : [True, False],
"use_perfetto" : [True, False],
# backend toggles
"enable_ganesh" : [True, False],
"enable_graphite" : [True, False],
"enable_pdf" : [True, False],
"enable_winuwp" : [True, False],
"enable_fontmgr_android" : [True, False],
"enable_fontmgr_custom_directory" : [True, False],
"enable_fontmgr_custom_embedded" : [True, False],
"enable_fontmgr_custom_empty" : [True, False],
"enable_fontmgr_fontconfig" : [True, False],
"enable_fontmgr_win" : [True, False],
"enable_fontmgr_win_gdi" : [True, False],
"enable_fontmgr_FontConfigInterface" : [True, False],
# modules
"enable_svg" : [True, False],
"enable_skottie" : [True, False],
"enable_skunicode" : [True, False],
"enable_skshaper" : [True, False],
"enable_bentleyottmann" : [True, False],
"enable_skparagraph" : [True, False],
# canvaskit
"canvaskit_enable_alias_font" : [True, False],
"canvaskit_enable_canvas_bindings" : [True, False],
"canvaskit_enable_effects_deserialization" : [True, False],
"canvaskit_enable_embedded_font" : [True, False],
"canvaskit_enable_font" : [True, False],
"canvaskit_enable_matrix_helper" : [True, False],
"canvaskit_enable_pathops" : [True, False],
"canvaskit_enable_rt_shader" : [True, False],
"canvaskit_enable_skp_serialization" : [True, False],
"canvaskit_enable_sksl_trace" : [True, False],
"canvaskit_enable_paragraph" : [True, False],
"canvaskit_enable_webgpu" : [True, False],
"canvaskit_enable_webgl" : [True, False],
# other options
"enable_precompile" : [True, False],
"enable_optimize_size" : [True, False],
"enable_api_available_macro" : [True, False],
"gl_standard" : ["gl", "gles", "webgl", ""],
}
_skia_default_options = {
# configurable dependencies
"use_icu" : True,
"use_libjpeg_turbo_encode" : True,
"use_libjpeg_turbo_decode" : True,
"use_libpng_encode" : True,
"use_libpng_decode" : True,
"use_libwebp_encode" : True,
"use_libwebp_decode" : True,
"use_zlib" : True,
# system library options
"use_system_expat" : True,
"use_system_freetype": True,
"use_system_harfbuzz" : True,
"use_system_icu" : True,
"use_system_libjpeg_turbo" : True,
"use_system_libpng" : True,
"use_system_libwebp" : True,
"use_system_zlib" : True,
# conan library options
"use_conan_expat" : True,
"use_conan_freetype": True,
"use_conan_fontconfig": True,
"use_conan_harfbuzz" : True,
"use_conan_icu" : True,
"use_conan_libjpeg_turbo" : True,
"use_conan_libpng" : True,
"use_conan_libwebp" : True,
"use_conan_zlib" : True,
# backend options
"use_angle" : False,
"use_gl" : True,
"use_vulkan" : False,
"use_metal" : False,
"use_dawn" : False,
"use_direct3d" : False,
"use_xps" : True,
"use_wuffs" : True,
"use_libavif" : False,
"use_libjxl_decode" : False,
# backend toggles
"enable_ganesh" : True,
"enable_graphite" : False,
"enable_winuwp" : False,
# modules
"enable_skshaper" : True,
"enable_bentleyottmann" : True,
# canvaskit
"canvaskit_enable_alias_font" : True,
"canvaskit_enable_canvas_bindings" : True,
"canvaskit_enable_effects_deserialization" : True,
"canvaskit_enable_embedded_font" : True,
"canvaskit_enable_font" : True,
"canvaskit_enable_matrix_helper" : True,
"canvaskit_enable_pathops" : True,
"canvaskit_enable_rt_shader" : True,
"canvaskit_enable_skp_serialization" : True,
"canvaskit_enable_sksl_trace" : True,
"canvaskit_enable_webgpu " : False,
"canvaskit_enable_webgl " : False,
# other options
"enable_precompile" : True,
"enable_optimize_size" : False,
"enable_api_available_macro" : True,
}
options = {
"shared" : [True, False],
"fPIC" : [True, False],
} | _skia_options
default_options = {
"shared": False,
"fPIC": True,
} | _skia_default_options
def _is_ios_variant(self):
os = self.settings.os
return (os == "iOS" or os == "watchOS" or os == "tvOS" or os == "visionOS")
def _is_ios_variant_simulator(self):
os = self.settings.os
if os == "iOS" and os.sdk == "iphonesimulator":
return True
elif os == "watchOS" and os.sdk == "watchsimulator":
return True
elif os == "tvOS" and os.sdk == "appletvsimulator":
return True
elif os == "visionOS" and os.sdk == "xrsimulator":
return True
return False
def config_options(self):
if self.settings.os == "Windows":
self.options.rm_safe("fPIC")
def validate(self):
if self.settings.compiler.cppstd:
check_min_cppstd(self, 17)
if self.settings.arch == "x86":
pass
elif self.settings.arch == "x86_64":
pass
elif self.settings.arch == "wasm":
pass
elif re.match(r'armv7.*', self.settings.arch.value):
pass
elif re.match(r'armv8.*', self.settings.arch.value):
pass
else:
raise ConanInvalidConfiguration("Unsupported settings.arch")
def configure(self):
os = self.settings.os
arch = self.settings.arch
if self.options.shared:
self.options.rm_safe("fPIC")
if self.options.use_harfbuzz == None:
# Disabled on Emscripten due to false-positive of HAVE_MPROTECT.
# Will revisit once 9.0.0 is added to conancenter.
enabled = (os != "Emscripten")
self.options.use_harfbuzz = enabled
if self.options.use_expat == None:
enabled = (arch != "wasm")
self.options.use_expat = enabled
if self.options.use_freetype == None:
enabled = (os == "Android" or os == "Linux" or arch == "wasm")
self.options.use_freetype = enabled
if self.options.use_webgl == None:
enabled = (arch == "wasm")
self.options.use_webgl = enabled
if self.options.use_webgpu == None:
enabled = (arch == "wasm")
self.options.use_webgpu = enabled
if self.options.use_x11 == None:
enabled = (os == "Linux")
self.options.use_x11 = enabled
if self.options.use_fontconfig == None:
enabled = (os == "Linux")
self.options.use_fontconfig = enabled
if self.options.use_fonthost_mac == None:
enabled = (os == "Macos" or self._is_ios_variant())
self.options.use_fonthost_mac = enabled
if self.options.use_perfetto == None:
enabled = (os == "Macos" or os == "Android" or os == "Linux")
self.options.use_perfetto = enabled
if self.options.enable_pdf == None:
enabled = arch != "wasm"
self.options.enable_pdf = enabled
if self.options.enable_fontmgr_android == None:
enabled = self.options.use_freetype and self.options.use_expat
self.options.enable_fontmgr_android = enabled
if self.options.enable_fontmgr_custom_directory == None:
enabled = self.options.use_freetype and arch != "wasm"
self.options.enable_fontmgr_custom_directory = enabled
if self.options.enable_fontmgr_custom_embedded == None:
enabled = self.options.use_freetype
self.options.enable_fontmgr_custom_embedded = enabled
if self.options.enable_fontmgr_custom_empty == None:
enabled = self.options.use_freetype
self.options.enable_fontmgr_custom_empty = enabled
if self.options.enable_fontmgr_fontconfig == None:
enabled = self.options.use_freetype and self.options.use_fontconfig
self.options.enable_fontmgr_fontconfig = enabled
if self.options.enable_fontmgr_win == None:
enabled = (os == "Windows")
self.options.enable_fontmgr_win = enabled
if self.options.enable_fontmgr_win_gdi == None:
enabled = (os == "Windows") and not self.options.enable_winuwp
self.options.enable_fontmgr_win_gdi = enabled
if self.options.enable_fontmgr_FontConfigInterface == None:
enabled = self.options.use_freetype and self.options.use_fontconfig
self.options.enable_fontmgr_FontConfigInterface = enabled
if self.options.use_piex == None:
enabled = os != "Windows" and arch != "wasm"
self.options.use_piex = enabled
if self.options.use_dng_sdk == None:
enabled = arch != "wasm" and self.options.use_libjpeg_turbo_decode and self.options.use_zlib
self.options.use_dng_sdk = enabled
if self.options.use_ndk_images == None:
enabled = os == "Android" and int(os.api_level.value) >= 30
self.options.use_ndk_images = enabled
if self.options.enable_svg == None:
enabled = not self.options.shared
self.options.enable_svg = enabled
if self.options.enable_skottie == None:
enabled = not self.options.shared
self.options.enable_skottie = enabled
if self.options.enable_skunicode == None:
enabled = self.options.use_icu
self.options.enable_skunicode = enabled
if self.options.enable_skparagraph == None:
enabled = self.options.enable_skshaper and self.options.enable_skunicode and self.options.use_harfbuzz
self.options.enable_skparagraph = enabled
if self.options.canvaskit_enable_paragraph == None:
enabled = self.options.enable_skparagraph
self.options.canvaskit_enable_paragraph = enabled
if self.options.gl_standard == None:
if os == "Macos":
self.options.gl_standard = "gl"
elif self._is_ios_variant():
self.options.gl_standard = "gles"
elif arch == "wasm":
self.options.gl_standard = "webgl"
else:
self.options.gl_standard = ""
# Remove unnecessary system library options.
if self.options.use_expat == False:
self.options.rm_safe("use_system_expat")
elif not self.options.use_system_expat:
self.options.rm_safe("use_conan_expat")
if self.options.use_freetype == False:
self.options.rm_safe("use_system_freetype")
elif not self.options.use_system_freetype:
self.options.rm_safe("use_conan_freetype")
if self.options.use_icu == False:
self.options.rm_safe("use_system_icu")
elif not self.options.use_system_icu:
self.options.rm_safe("use_conan_icu")
if self.options.use_harfbuzz == False:
self.options.rm_safe("use_system_harfbuzz")
elif not self.options.use_system_harfbuzz:
self.options.rm_safe("use_conan_harfbuzz")
if self.options.use_libjpeg_turbo_encode == False and self.options.use_libjpeg_turbo_decode == False:
self.options.rm_safe("use_system_libjpeg_turbo")
elif not self.options.use_system_libjpeg_turbo:
self.options.rm_safe("use_conan_libjpeg_turbo")
if self.options.use_libpng_encode == False and self.options.use_libpng_decode == False:
self.options.rm_safe("use_system_libpng")
elif not self.options.use_system_libpng:
self.options.rm_safe("use_conan_libpng")
if self.options.use_libwebp_encode == False and self.options.use_libwebp_decode == False:
self.options.rm_safe("use_system_libwebp")
elif not self.options.use_system_libwebp:
self.options.rm_safe("use_conan_libwebp")
if self.options.use_zlib == False:
self.options.rm_safe("use_system_zlib")
elif not self.options.use_system_zlib:
self.options.rm_safe("use_conan_zlib")
def export_sources(self):
export_conandata_patches(self)
def source(self):
get(self, **self.conan_data["sources"][self.version], destination=self.source_folder, strip_root=True)
apply_conandata_patches(self)
def requirements(self):
self.tool_requires("depot_tools/[>=20200407]")
self.tool_requires("ninja/[>=1.11.0]")
if self.options.use_harfbuzz and self.options.use_system_harfbuzz and self.options.use_conan_harfbuzz:
self.requires("harfbuzz/[>=7.3.0]", options = {"with_subset":True, "with_glib":False})
if self.options.use_freetype and self.options.use_system_freetype and self.options.use_conan_freetype:
self.requires("freetype/[>=2.11.1]")
if self.options.use_fontconfig and self.options.use_conan_fontconfig:
self.requires("fontconfig/[>=2.14.2]")
if self.options.use_expat and self.options.use_system_expat and self.options.use_conan_expat:
self.requires("expat/[>=2.5.0]")
if self.options.use_icu and self.options.use_system_icu and self.options.use_conan_icu:
if self.settings.os == "Emscripten":
self.requires("icu/[74.2]")
else:
self.requires("icu/[>=74.2]")
if (self.options.use_libpng_decode or self.options.use_libpng_encode) and self.options.use_system_libpng and self.options.use_conan_libpng:
self.requires("libpng/[>=1.6.32]")
if (self.options.use_libjpeg_turbo_decode or self.options.use_libjpeg_turbo_encode) and self.options.use_system_libjpeg_turbo and self.options.use_conan_libjpeg_turbo:
self.requires("libjpeg-turbo/[>=3.0.0]")
if (self.options.use_libwebp_decode or self.options.use_libwebp_encode) and self.options.use_system_libwebp and self.options.use_conan_libwebp:
self.requires("libwebp/[>=1.2.4]", options = {"swap_16bit_csp":True})
if self.options.use_zlib and self.options.use_system_zlib and self.options.use_conan_zlib:
self.requires("zlib/[>=1.2.11]")
def layout(self):
src_folder = "src"
build_folder = src_folder
generators_folder = self.folders.generators or "conan"
subproject = self.folders.subproject
self.folders.source = src_folder if not subproject else join(subproject, src_folder)
self.folders.build = build_folder if not subproject else join(subproject, build_folder)
self.folders.generators = join(self.folders.build, generators_folder)
def _get_lower_bool_str(self, cond):
return "true" if cond else "false"
def _collect_link_libs(self, dependency, components):
libs = []
libs += dependency.cpp_info.libs
libs += dependency.cpp_info.system_libs
# The order of components affects link order.
# TODO: Sould we handle inter-component dependencies?
for component in components:
libs += dependency.cpp_info.components[component].libs
libs += dependency.cpp_info.components[component].system_libs
for transitiveDependency in dependency.dependencies.host.values():
libs += transitiveDependency.cpp_info.libs
libs += transitiveDependency.cpp_info.system_libs
# TODO: Is there proper way to determine link order of those components?
for dep in transitiveDependency.cpp_info.components.values():
libs += dep.libs
libs += dep.system_libs
return libs
def _collect_link_frameworks(self, dependency, components):
frameworks = []
frameworks += dependency.cpp_info.frameworks
for component in components:
frameworks += dependency.cpp_info.components[component].frameworks
for transitiveDependency in dependency.dependencies.host.values():
frameworks += transitiveDependency.cpp_info.frameworks
for dep in transitiveDependency.cpp_info.components.values():
frameworks += dep.frameworks
return frameworks
def _link_libs(self, name, components=[]):
libs = []
libs += self._collect_link_libs(self.dependencies[name], components)
ext = ""
if self.settings.os == "Windows":
ext = ".lib"
return [lib + ext for lib in libs]
def _link_frameworks(self, name, components=[]):
frameworks = self._collect_link_frameworks(self.dependencies[name], components)
return [fw + ".framework" for fw in frameworks]
def build(self):
# activate-emsdk fails on Windows for some reason.
os.environ["GIT_SYNC_DEPS_SKIP_EMSDK"] = "1"
self.run("python3 tools/git-sync-deps")
del os.environ["GIT_SYNC_DEPS_SKIP_EMSDK"]
if self.options.use_expat and self.options.use_system_expat and self.options.use_conan_expat:
replace_in_file(self, join(self.source_folder, "third_party", "expat", "BUILD.gn"),
"libs = [ \"expat\" ]", f"libs = {json.dumps(self._link_libs('expat'))}",
strict=False)
if self.options.use_harfbuzz and self.options.use_system_harfbuzz and self.options.use_conan_harfbuzz:
replace_in_file(self, join(self.source_folder, "third_party", "harfbuzz", "BUILD.gn"),
"libs = [ \"harfbuzz\" ]",
f"libs = {json.dumps(self._link_libs('harfbuzz'))}\n " +
f"frameworks = {json.dumps(self._link_frameworks('harfbuzz'))}",
strict=False)
replace_in_file(self, join(self.source_folder, "third_party", "harfbuzz", "BUILD.gn"),
"include_dirs = [ \"/usr/include/harfbuzz\" ]", "include_dirs = [ ]",
strict=False)
replace_in_file(self, join(self.source_folder, "third_party", "harfbuzz", "BUILD.gn"),
"libs += [ \"harfbuzz-subset\" ]", "libs += [ ]",
strict=False)
if self.options.use_freetype and self.options.use_system_freetype and self.options.use_conan_freetype:
replace_in_file(self, join(self.source_folder, "third_party", "freetype2", "BUILD.gn"),
"libs = [ skia_system_freetype2_lib ]", f"libs = {json.dumps(self._link_libs('freetype'))}",
strict=False)
replace_in_file(self, join(self.source_folder, "third_party", "freetype2", "BUILD.gn"),
"include_dirs = [ skia_system_freetype2_include_path ]", "include_dirs = [ ]",
strict=False)
if self.options.use_icu and self.options.use_system_icu and self.options.use_conan_icu:
replace_in_file(self, join(self.source_folder, "third_party", "icu", "BUILD.gn"),
# icu-data must come after other components, otherwise it leaves an undefined symbol in shared library.
"libs = [ \"icuuc\" ]", f"libs = {json.dumps(self._link_libs('icu', components=['icu-uc','icu-data']))}",
strict=False)
if (self.options.use_libjpeg_turbo_encode or self.options.use_libjpeg_turbo_decode) and self.options.use_system_libjpeg_turbo and self.options.use_conan_libjpeg_turbo:
replace_in_file(self, join(self.source_folder, "third_party", "libjpeg-turbo", "BUILD.gn"),
"libs = [ \"jpeg\" ]", f"libs = {json.dumps(self._link_libs('libjpeg-turbo', components=['jpeg']))}",
strict=False)
if (self.options.use_libpng_encode or self.options.use_libpng_decode) and self.options.use_system_libpng and self.options.use_conan_libpng:
replace_in_file(self, join(self.source_folder, "third_party", "libpng", "BUILD.gn"),
"libs = [ \"png\" ]", f"libs = {json.dumps(self._link_libs('libpng'))}",
strict=False)
if self.options.use_zlib and self.options.use_system_zlib and self.options.use_conan_zlib:
replace_in_file(self, join(self.source_folder, "third_party", "zlib", "BUILD.gn"),
"libs = [ \"z\" ]", f"libs = {json.dumps(self._link_libs('zlib'))}",
strict=False)
if (self.options.use_libwebp_decode or self.options.use_libwebp_encode) and self.options.use_system_libwebp and self.options.use_conan_libwebp:
replace_in_file(self, join(self.source_folder, "third_party", "libwebp", "BUILD.gn"),
" libs = [\n \"webp\",\n \"webpdemux\",\n \"webpmux\",\n ]",
f" libs = {json.dumps(self._link_libs('libwebp',components=['webp','webpmux','webpdemux','sharpyuv']))}",
strict=False)
if self._is_ios_variant():
if self.settings.arch == "armv8":
replace_in_file(self, join(self.source_folder, "gn", "skia", "BUILD.gn"),
"\"-arch\",\n \"arm64e\",",
"#\"-arch\",\n #\"arm64e\",",
strict=False)
elif self.settings.arch == "armv8.3":
replace_in_file(self, join(self.source_folder, "gn", "skia", "BUILD.gn"),
"\"-arch\",\n \"arm64\",",
"#\"-arch\",\n #\"arm64\",",
strict=False)
args = ""
args += "is_official_build=true\n"
args += f"is_component_build={self._get_lower_bool_str(self.options.shared)}\n"
buildenv = VirtualBuildEnv(self).vars()
if cc := buildenv.get("CC", default=None):
args += f"cc=\"{cc}\"\n"
if cxx := buildenv.get("CXX", default=None):
args += f"cxx=\"{cxx}\"\n"
if ar := buildenv.get("AR", default=None):
args += f"ar=\"{ar}\"\n"
if self.settings.os == "Emscripten":
if emsdk := buildenv.get("EMSDK", default=None):
args += f"skia_emsdk_dir=\"{emsdk}\"\n"
if self.settings.os == "Windows":
winsdk_version = self.conf.get("tools.microsoft:winsdk_version", default=None)
if winsdk_version != None:
args += f"win_sdk_version=\"{winsdk_version}\"\n"
if self.settings.os == "Android":
ndk_path = self.conf.get("tools.android:ndk_path", default=None)
if ndk_path != None:
args += f"ndk = \"{ndk_path}\"\n"
args += f"ndk_api = {self.settings.os.api_level}\n"
if self.settings.os == "iOS":
args += f"target_os = \"ios\"\n"
elif self.settings.os == "tvOS":
args += f"target_os = \"tvos\"\n"
elif self._is_ios_variant():
args += f"target_os = \"ios\"\n"
if self._is_ios_variant_simulator():
args += f"ios_use_simulator = true\n"
if self.settings.arch == "x86":
args += "target_cpu = \"x86\"\n"
elif self.settings.arch == "x86_64":
args += "target_cpu = \"x64\"\n"
elif self.settings.arch == "wasm":
args += "target_cpu = \"wasm\"\n"
elif self.settings.arch == "armv7":
args += "target_cpu = \"arm\"\n"
elif self.settings.arch == "armv8":
args += "target_cpu = \"arm64\"\n"
elif self._is_ios_variant() and self.settings.arch == "armv8.3":
args += "target_cpu = \"arm64\"\n"
else:
raise RuntimeError("Unexpected settings.arch")
cflags = []
ldflags = []
asmflags = []
for dep in self.dependencies.host.values():
cflags += [f"-I{dir}" for dir in dep.cpp_info.includedirs]
cflags += [f"-D{define}" for define in dep.cpp_info.defines]
if is_msvc(self):
ldflags += [f"/LIBPATH:{dir}" for dir in dep.cpp_info.libdirs]
else:
ldflags += [f"-L{dir}" for dir in dep.cpp_info.libdirs]
for component in dep.cpp_info.components.values():
cflags += [f"-I{dir}" for dir in component.includedirs]
cflags += [f"-D{define}" for define in component.defines]
if is_msvc(self):
ldflags += [f"/LIBPATH:{dir}" for dir in component.libdirs]
else:
ldflags += [f"-L{dir}" for dir in component.libdirs]
if is_msvc(self):
cflags += [f"/{msvc_runtime_flag(self)}"]
if not self.options.shared and self.settings.compiler != "msvc":
fpic = self.options.get_safe("fPIC")
if fpic != None:
cflags += ["-fPIC"]
if is_apple_os(self):
min_version_flag = AutotoolsToolchain(self).apple_min_version_flag
cflags += [min_version_flag]
ldflags += [min_version_flag]
asmflags += [min_version_flag]
cflags += [f"-D{define}" for define in self.conf.get("tools.build:defines", default=[], check_type=list)]
ldflags += self.conf.get("tools.build:sharedlinkflags", default=[], check_type=list)
ldflags += self.conf.get("tools.build:exelinkflags", default=[], check_type=list)
linker_scripts = self.conf.get("tools.build:linker_scripts", default=[], check_type=list)
ldflags += ["-T'" + linker_script + "'" for linker_script in linker_scripts]
cflags += self.conf.get("tools.build:cflags", default=[], check_type=list)
cflags_c = []
cflags_cc = self.conf.get("tools.build:cxxflags", default=[], check_type=list)
cflags_cc += [cppstd_flag(self)]
args += f"extra_cflags={json.dumps(cflags)}\n"
args += f"extra_cflags_c={json.dumps(cflags_c)}\n"
args += f"extra_cflags_cc={json.dumps(cflags_cc)}\n"
args += f"extra_ldflags={json.dumps(ldflags)}\n"
args += f"extra_asmflags={json.dumps(asmflags)}\n"
if self.settings.os == "Macos" or self._is_ios_variant():
sdk_path = self.conf.get("tools.apple:sdk_path", default=None)
if not sdk_path:
sdk_path = XCRun(self).sdk_path
if sdk_path:
args += f"xcode_sysroot=\"{sdk_path}\"\n"
if self._is_ios_variant():
args += f"skia_ios_use_signing = false\n"
for key in self._skia_options.keys():
value = self.options.get_safe(key)
if value != None and not key.startswith("use_conan"):
b = self._get_lower_bool_str(value)
k = "use_system_freetype2" if key == "use_system_freetype" else key
args += f"skia_{k}={b}\n"
rmdir(self, "out/conan")
mkdir(self, "out/conan")
save(self, "out/conan/args.gn", args)
if self.settings.os == "Windows":
self.run("bin\gn gen out/conan")
else:
self.run("bin/gn gen out/conan")
self.run("ninja -C out/conan")
def package(self):
source_folder_include = join(self.source_folder, "include")
source_folder_modules = join(self.source_folder, "modules")
package_folder_include = join(self.package_folder, "include")
package_folder_include_modules = join(package_folder_include, "modules")
package_folder_lib = join(self.package_folder, "lib")
package_folder_bin = join(self.package_folder, "bin")
build_folder_out = join(self.build_folder, "out", "conan")
# Skia headers have to be included relative to root of Skia repository (for example, #include <include/core/SkCanvas.h>).
# So we have to create another 'include' folder inside include directory...
# Include the entire skia root folder as an include (only copy includes)
copy(self, "*.h", self.source_folder, package_folder_include)
#copy(self, "*.h", source_folder_include, join(package_folder_include, "include"))
## removed sksg from this list
#for mod in ["skottie", "skresource", "sksg", "skshaper", "skunicode", "svg"]:
# copy(self, "*.h", join(source_folder_modules, mod, "include"), join(package_folder_include_modules, mod, "include"))
## skcms doesn't have include folder for some reason.
#copy(self, "*.h", join(source_folder_modules, "skcms"), join(package_folder_include_modules, "skcms"))
if self.settings.os == "Windows":
if self.options.shared:
copy(self, "*.dll", build_folder_out, package_folder_bin, keep_path=False)
copy(self, "*.dll.lib", build_folder_out, package_folder_lib, keep_path=False)
# rename: *.dll.lib -> *.lib
for filename in os.listdir(package_folder_lib):
if filename.endswith(".dll.lib"):
new_filename = filename.replace(".dll.lib", ".lib")
rename(self, join(package_folder_lib, filename), join(package_folder_lib, new_filename))
else:
copy(self, "*.lib", build_folder_out, package_folder_lib, keep_path=False)
else:
if self.options.shared:
copy(self, "*.so", build_folder_out, package_folder_lib, keep_path=False)
copy(self, "*.dylib", build_folder_out, package_folder_lib, keep_path=False)
else:
copy(self, "*.a", build_folder_out, package_folder_lib, keep_path=False)
if self.settings.os == "Emscripten" and self.settings.arch == "wasm":
copy(self, "canvaskit.js", build_folder_out, package_folder_bin)
copy(self, "canvaskit.wasm", build_folder_out, package_folder_bin)
def package_info(self):
# As of Conan 2.3.1, CMake generators cannot propagate transitive dependencies when you use components.
# So we have to put evetything into root cpp_info...
# https://github.com/conan-io/conan/issues/14888
# component: skia
self.cpp_info.defines += ["SK_CODEC_DEFINES_BMP"]
self.cpp_info.defines += ["SK_CODEC_DEFINES_WBMP"]
self.cpp_info.defines += ["SK_DISABLE_TRACING"] # assuming is_official_build
if self.options.use_gl:
self.cpp_info.defines += ["SK_GL"]
if self.options.use_dawn:
self.cpp_info.defines += ["SK_DAWN"]
if self.options.use_direct3d:
self.cpp_info.defines += ["SK_ENABLE_SPIRV_CROSS"]
self.cpp_info.defines += ["SK_DIRECT3D"]
self.cpp_info.system_libs += ["d3d12", "dxgi", "d3dcompiler"]
if self.options.use_vulkan:
self.cpp_info.defines += ["SK_VULKAN"]
if self.options.use_metal:
self.cpp_info.defines += ["SK_METAL"]
if self.options.shared:
self.cpp_info.defines += ["SKIA_DLL"]
if self.settings.os == "Linux":
self.cpp_info.defines += ["SK_R32_SHIFT=16"]
if self.settings.os == "Android":
self.cpp_info.system_libs += ["log"]
if self.options.enable_optimize_size:
self.cpp_info.defines += ["SK_ENABLE_OPTIMIZE_SIZE"]
if self.options.enable_precompile:
self.cpp_info.defines += ["SK_ENABLE_PRECOMPILE"]
if self.options.enable_ganesh:
self.cpp_info.defines += ["SK_GANESH"]
if self.options.enable_graphite:
self.cpp_info.defines += ["SK_GRAPHITE"]
if self.options.use_perfetto:
self.cpp_info.defines += ["SK_USE_PERFETTO"]
if self.settings.os == "Macos" or self._is_ios_variant():
if self.options.enable_api_available_macro:
self.cpp_info.defines += ["SK_ENABLE_API_AVAILABLE"]
else:
self.cpp_info.cflags += ["-Wno-unguarded-availability"]
if self.options.gl_standard == "gl":
self.cpp_info.defines += ["SKIA_ASSUME_GL=1"]
if self.options.gl_standard == "gles":
self.cpp_info.defines += ["SKIA_ASSUME_GL_ES=1"]
if self.options.gl_standard == "webgl":
self.cpp_info.defines += ["SKIA_ASSUME_WEBGL=1"]
if self.options.enable_pdf:
if self.options.use_zlib and self.options.use_libjpeg_turbo_decode and self.options.use_libjpeg_turbo_encode:
self.cpp_info.defines += ["SK_SUPPORT_PDF"]
if self.options.use_xps:
self.cpp_info.defines += ["SK_SUPPORT_XPS"]
if self.options.use_wuffs and not self.options.shared:
self.cpp_info.defines += ["SK_HAS_WUFFS_LIBRARY"]
self.cpp_info.defines += ["SK_CODEC_DECODES_GIF"]
self.cpp_info.libs += ["wuffs"]
if self.options.use_piex and not self.options.shared:
self.cpp_info.libs += ["piex"]
if self.options.use_dng_sdk and self.options.use_libjpeg_turbo_decode and self.options.use_piex and not self.options.shared:
self.cpp_info.defines += ["qDNGBigEndian=0"]
self.cpp_info.libs += ["dng_sdk"]
if self.options.use_libpng_decode:
self.cpp_info.defines += ["SK_CODEC_DECODES_ICO"]
self.cpp_info.defines += ["SK_CODEC_DECODES_PNG"]
if self.options.use_libpng_decode:
self.cpp_info.defines += ["SK_CODEC_DECODES_WEBP"]
if self.options.use_libavif:
self.cpp_info.defines += ["SK_CODEC_DECODES_AVIF"]
if self.options.use_libjpeg_turbo_decode:
self.cpp_info.defines += ["SK_CODEC_DECODES_JPEG"]
if self.options.use_libjxl_decode:
self.cpp_info.defines += ["SK_CODEC_DECODE_JPEGXL"]
if self.options.use_ndk_images:
self.cpp_info.defines += ["SK_ENABLE_NDK_IMAGES"]
if self.options.use_expat:
self.cpp_info.defines += ["SK_XML"]
if self.options.use_dng_sdk and self.options.use_libjpeg_turbo_decode and self.options.use_piex:
self.cpp_info.defines += ["SK_CODEC_DECODES_RAW"]
if self.options.use_fonthost_mac:
self.cpp_info.defines += ["SK_TYPEFACE_FACTORY_CORETEXT", "SK_FONTMGR_CORETEXT_AVAILABLE"]
if self.settings.os == "Macos":
self.cpp_info.frameworks += ["AppKit", "ApplicationServices"]
elif self._is_ios_variant():
self.cpp_info.frameworks += ["CoreFoundation", "CoreGraphics", "CoreText", "UIKit"]
if self.options.enable_fontmgr_android:
self.cpp_info.defines += ["SK_FONTMGR_ANDROID_AVAILABLE"]
if self.options.enable_fontmgr_custom_directory:
self.cpp_info.defines += ["SK_FONTMGR_FREETYPE_DIRECTORY_AVAILABLE"]
if self.options.enable_fontmgr_custom_embedded:
self.cpp_info.defines += ["SK_FONTMGR_FREETYPE_EMBEDDED_AVAILABLE"]
if self.options.enable_fontmgr_custom_empty:
self.cpp_info.defines += ["SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE"]
if self.options.enable_fontmgr_fontconfig:
self.cpp_info.defines += ["SK_FONTMGR_FONTCONFIG_AVAILABLE"]
if self.options.enable_fontmgr_win:
self.cpp_info.defines += ["SK_TYPEFACE_FACTORY_DIRECTWRITE", "SK_FONTMGR_DIRECTWRITE_AVAILABLE"]
if self.options.enable_fontmgr_win_gdi:
self.cpp_info.defines += ["SK_FONTMGR_GDI_AVAILABLE"]
self.cpp_info.system_libs += ["gdi32"]
# component: pathkit
if not self.options.shared:
self.cpp_info.libs += ["pathkit"]
# component: skcms
if not self.options.shared:
self.cpp_info.libs += ["skcms"]
# component: sksg
# sksg doesn't exist in the program's build, so it'll be commented for now
# if not self.options.shared:
# self.cpp_info.libs += ["sksg"]
# component: svg
if self.options.enable_svg and self.options.use_expat:
self.cpp_info.defines += ["SK_SVG"]
self.cpp_info.libs += ["svg"]
# component: skresource
if not self.options.shared:
self.cpp_info.libs += ["skresources"]
self.cpp_info.libs += ["skia"] # Placed this after some components due to library order being important on some systems
# component: skunicode
if self.options.enable_skunicode:
self.cpp_info.defines += ["SK_UNICODE_AVAILABLE"]
self.cpp_info.defines += ["SK_UNICODE_ICU_IMPLEMENTATION"]
self.cpp_info.libs += ["skunicode_icu", "skunicode_core"] # Swapped order
# component: skparagraph
if self.options.enable_skparagraph:
if not (self.settings.os == "Windows" and self.options.shared):
self.cpp_info.libs += ["skparagraph"]
self.cpp_info.defines += ["SK_ENABLE_PARAGRAPH"]
# component: skshaper
if self.options.enable_skshaper:
self.cpp_info.libs += ["skshaper"]
self.cpp_info.defines += ["SK_SHAPER_PRIMITIVE_AVAILABLE"]
if self.options.use_fonthost_mac:
self.cpp_info.defines += ["SK_SHAPER_CORETEXT_AVAILABLE"]
if self.options.use_harfbuzz:
self.cpp_info.defines += ["SK_SHAPER_HARFBUZZ_AVAILABLE"]
if self.options.shared:
self.cpp_info.defines += ["SK_SHAPER_UNICODE_AVAILABLE"]
# component: skottie
if self.options.enable_skottie:
self.cpp_info.libs += ["skottie"]
self.cpp_info.defines += ["SK_ENABLE_SKOTTIE", "SK_ENABLE_SKSLEFFECT"]
# component: bentleyottmann
if self.options.enable_bentleyottmann:
if not (self.settings.os == "Windows" and self.options.shared):
self.cpp_info.libs += ["bentleyottmann"]

View file

@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.15)
project(PackageTest CXX)
find_package(skia CONFIG REQUIRED)
add_executable(example src/example.cpp)
target_link_libraries(example skia::skia)

View file

@ -0,0 +1,26 @@
import os
from conan import ConanFile
from conan.tools.cmake import CMake, cmake_layout
from conan.tools.build import can_run
class skiaTestConan(ConanFile):
settings = "os", "compiler", "build_type", "arch"
generators = "CMakeDeps", "CMakeToolchain"
def requirements(self):
self.requires(self.tested_reference_str)
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def layout(self):
cmake_layout(self)
def test(self):
if can_run(self):
cmd = os.path.join(self.cpp.build.bindir, "example")
self.run(cmd, env="conanrun")

View file

@ -0,0 +1,17 @@
#include "include/core/SkCanvas.h"
#include "include/core/SkSurface.h"
int main()
{
sk_sp<SkSurface> surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul({1280, 720}));
SkCanvas* canvas = surface->getCanvas();
SkPaint p;
p.setColor(SK_ColorRED);
p.setAntiAlias(true);
p.setStyle(SkPaint::kStroke_Style);
p.setStrokeWidth(10);
canvas->drawLine(20, 20, 100, 100, p);
}

View file

@ -0,0 +1,19 @@
versions:
"126.20240526.0":
folder: all
"127.20240803.0":
folder: all
"128.20241118.0":
folder: all
"129.20241118.0":
folder: all
"130.20241118.0":
folder: all
"131.20250131.0":
folder: all
"132.20250131.0":
folder: all
"133.20250327.0":
folder: all
"134.20250327.0":
folder: all

5
conan/conan_skia_command.sh Executable file
View file

@ -0,0 +1,5 @@
#!/bin/bash
cd conan-skia/recipes/skia/all
conan create . -o use_system_expat=False -o use_system_freetype=False -o use_system_harfbuzz=False -o use_system_icu=False -o use_system_libjpeg_turbo=False -o use_system_libpng=False -o use_system_libwebp=False -o use_system_zlib=False --build=missing --version=134.20250327.0
cd ../../../..

3
conan/export_libs.bat Executable file
View file

@ -0,0 +1,3 @@
conan export %0/../libjuice/all/conanfile.py --version=1.6.1
conan export %0/../libdatachannel/all/conanfile.py --version=0.23.1
conan export %0/../conan-skia/recipes/skia/all/conanfile.py --version=134.20250327.0

10
conan/export_libs.sh Executable file
View file

@ -0,0 +1,10 @@
#!/bin/bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
conan export "$(dirname "$0")/libjuice/all/conanfile.py" --version=1.6.1
conan export "$(dirname "$0")/libdatachannel/all/conanfile.py" --version=0.23.1
conan export "$(dirname "$0")/mpg123/all/conanfile.py" --version=1.32.10
conan export "$(dirname "$0")/conan-skia/recipes/skia/all/conanfile.py" --version=134.20250327.0
#conan create . -o use_system_expat=False -o use_system_freetype=False -o use_system_harfbuzz=False -o use_system_icu=False -o use_system_libjpeg_turbo=False -o use_system_libpng=False -o use_system_libwebp=False -o use_system_zlib=False --build=missing --version=134.20250327.0
#cd ../../../..

View file

@ -0,0 +1,7 @@
sources:
"0.23.1":
url: "https://github.com/paullouisageneau/libdatachannel/archive/refs/tags/v0.23.1.tar.gz"
sha256: "63e14d619ac4d9cc310a0c7620b80e6da88abf878f27ccc78cd099f95d47b121"
"0.22.2":
url: "https://github.com/paullouisageneau/libdatachannel/archive/refs/tags/v0.22.2.tar.gz"
sha256: "8431ba62a3c83fbee05257226fb8bcb256b1a5ce48b449a718e3be5dbe9b2226"

View file

@ -0,0 +1,142 @@
import os
from conan import ConanFile
from conan.errors import ConanInvalidConfiguration
from conan.tools.build import check_min_cppstd
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout, CMakeDeps
from conan.tools.files import copy, get, rm, rmdir, replace_in_file
from conan.tools.microsoft import is_msvc
from conan.tools.apple import fix_apple_shared_install_name
required_conan_version = ">=2.1"
class libdatachannelConan(ConanFile):
name = "libdatachannel"
description = "C/C++ WebRTC network library featuring Data Channels, Media Transport, and WebSockets."
license = "MPL-2.0"
topics = ("webrtc", "rtc", "datachannel", "websocket")
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://github.com/paullouisageneau/libdatachannel"
settings = "os", "compiler", "build_type", "arch"
package_type = "library"
options = {
"shared": [True, False],
"fPIC": [True, False],
"with_websocket": [True, False],
"with_nice": [True, False],
"with_ssl": ["openssl", "mbedtls", "gnutls"]
}
default_options = {
"shared": False,
"fPIC": True,
"with_websocket": True,
"with_nice": False,
"with_ssl": "openssl"
}
implements = ["auto_shared_fpic"]
def requirements(self):
if self.options.with_ssl == "openssl":
self.requires("openssl/[>=1.1 <4]")
elif self.options.with_ssl == "mbedtls":
self.requires("mbedtls/3.6.2")
elif self.options.with_ssl == "gnutls":
self.requires("gnutls/3.8.7")
if self.options.with_websocket:
self.requires("nettle/3.9.1")
self.requires("plog/1.1.10")
self.requires("usrsctp/0.9.5.0")
self.requires("libsrtp/2.6.0")
if self.options.with_nice:
self.requires("libnice/0.1.21")
else:
self.requires("libjuice/1.6.1", transitive_headers=True, transitive_libs=True)
def validate(self):
check_min_cppstd(self, 17)
if self.options.with_ssl == "mbedtls":
# dtlstransport.cpp:414:3: error: use of undeclared identifier 'mbedtls_ssl_conf_dtls_srtp_protection_profiles'
raise ConanInvalidConfiguration("Compilation error with mbedtls. Contributions are welcome.")
def layout(self):
cmake_layout(self, src_folder="src")
def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True)
# Let Conan handle fpic
replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"),
"set(CMAKE_POSITION_INDEPENDENT_CODE ON)", "")
def generate(self):
tc = CMakeToolchain(self)
tc.cache_variables["PREFER_SYSTEM_LIB"] = True
tc.cache_variables["USE_SYSTEM_SRTP"] = True
tc.cache_variables["USE_SYSTEM_USRSCTP"] = True
tc.cache_variables["USE_SYSTEM_PLOG"] = True
tc.cache_variables["USE_SYSTEM_JSON"] = True
tc.cache_variables["NO_EXAMPLES"] = True
tc.cache_variables["NO_TESTS"] = True
tc.cache_variables["NO_WEBSOCKET"] = not self.options.with_websocket
tc.cache_variables["USE_NICE"] = self.options.with_nice
tc.cache_variables["USE_SYSTEM_JUICE"] = not self.options.with_nice
if self.options.with_ssl == "gnutls":
tc.cache_variables["USE_GNUTLS"] = True
elif self.options.with_ssl == "mbedtls":
tc.cache_variables["USE_MBEDTLS"] = True
tc.generate()
deps = CMakeDeps(self)
deps.set_property("usrsctp", "cmake_target_name", "Usrsctp::Usrsctp")
deps.set_property("libsrtp", "cmake_file_name", "libSRTP")
deps.set_property("libsrtp", "cmake_target_name", "libSRTP::srtp2")
if self.options.with_ssl == "mbedtls":
deps.set_property("mbedtls", "cmake_target_name", "MbedTLS::MbedTLS")
elif self.options.with_ssl == "gnutls" and self.options.with_websocket:
deps.set_property("nettle", "cmake_file_name", "Nettle")
deps.set_property("nettle", "cmake_target_name", "Nettle::Nettle")
if self.options.with_nice:
deps.set_property("libnice", "cmake_file_name", "LibNice")
deps.set_property("libnice", "cmake_target_name", "LibNice::LibNice")
elif not self.options.shared:
# Targetname is LibJuice::LibJuiceStatic for static, but upstream makes no distinction
deps.set_property("libjuice", "cmake_target_name", "LibJuice::LibJuice")
deps.generate()
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def package(self):
copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses"))
cmake = CMake(self)
cmake.install()
fix_apple_shared_install_name(self)
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
rmdir(self, os.path.join(self.package_folder, "share"))
rm(self, "*.la", os.path.join(self.package_folder, "lib"))
rm(self, "*.pdb", os.path.join(self.package_folder, "lib"))
rm(self, "*.pdb", os.path.join(self.package_folder, "bin"))
def package_info(self):
suffix = ""
if is_msvc(self) and self.settings.build_type == "Debug":
suffix = "d"
self.cpp_info.libs = ["datachannel" + suffix]
self.cpp_info.set_property("cmake_file_name", "LibDataChannel")
self.cpp_info.set_property("cmake_target_name", "LibDataChannel::LibDataChannel")
if self.settings.os in ["Linux", "FreeBSD"]:
self.cpp_info.system_libs.extend(["m", "pthread", "dl"])
elif self.settings.os == "Windows":
self.cpp_info.system_libs.append("ws2_32")
if not self.options.shared:
self.cpp_info.defines.append("RTC_STATIC")
self.cpp_info.defines.append("RTC_ENABLE_WEBSOCKET=" + ("1" if self.options.with_websocket else "0"))
# This is True by default, and the recipe currently does not model it
self.cpp_info.defines.append("RTC_ENABLE_MEDIA=1")

View file

@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.15)
project(test_package LANGUAGES CXX) # if the project uses c++
find_package(LibDataChannel REQUIRED CONFIG)
add_executable(${PROJECT_NAME} test_package.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE LibDataChannel::LibDataChannel)
#target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)

View file

@ -0,0 +1,27 @@
from conan import ConanFile
from conan.tools.build import can_run
from conan.tools.cmake import cmake_layout, CMake
import os
# It will become the standard on Conan 2.x
class TestPackageConan(ConanFile):
settings = "os", "arch", "compiler", "build_type"
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv"
test_type = "explicit"
def requirements(self):
self.requires(self.tested_reference_str)
def layout(self):
cmake_layout(self)
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def test(self):
if can_run(self):
bin_path = os.path.join(self.cpp.build.bindir, "test_package")
self.run(bin_path, env="conanrun")

View file

@ -0,0 +1,9 @@
#include <cstdlib>
#include <rtc/rtc.hpp>
#include <iostream>
int main(void) {
rtc::InitLogger(rtc::LogLevel::Debug);
return EXIT_SUCCESS;
}

View file

@ -0,0 +1,5 @@
versions:
"0.23.1":
folder: all
"0.22.2":
folder: all

View file

@ -0,0 +1,7 @@
sources:
"1.6.1":
url: "https://github.com/paullouisageneau/libjuice/archive/refs/tags/v1.6.1.tar.gz"
sha256: "14d7cfc1a541843c1678828ad52d860d043bd82ed39ff076b260565796e4e4ee"
"1.5.7":
url: "https://github.com/paullouisageneau/libjuice/archive/refs/tags/v1.5.7.tar.gz"
sha256: "6385c574f3c33f766ed25cddf919625b0ae8ca0d76871f70301e5a0cf2c93dc8"

View file

@ -0,0 +1,80 @@
import os
from conan import ConanFile
from conan.tools.build import check_min_cppstd
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
from conan.tools.files import copy, get, rm, rmdir
from conan.tools.microsoft import is_msvc
from conan.tools.apple import fix_apple_shared_install_name
required_conan_version = ">=2.4"
class libjuiceConan(ConanFile):
name = "libjuice"
description = "JUICE is a UDP Interactive Connectivity Establishment library."
license = "MPL-2.0"
topics = ("webrtc", "ice")
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://github.com/paullouisageneau/libjuice"
settings = "os", "compiler", "build_type", "arch"
package_type = "library"
options = {
"shared": [True, False],
"fPIC": [True, False],
}
default_options = {
"shared": False,
"fPIC": True,
}
languages = "C"
implements = ["auto_shared_fpic"]
def layout(self):
cmake_layout(self, src_folder="src")
def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True)
def generate(self):
tc = CMakeToolchain(self)
tc.variables["NO_TESTS"] = True
tc.generate()
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def package(self):
copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses"))
cmake = CMake(self)
cmake.install()
fix_apple_shared_install_name(self)
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
rmdir(self, os.path.join(self.package_folder, "share"))
rm(self, "*.la", os.path.join(self.package_folder, "lib"))
rm(self, "*.pdb", os.path.join(self.package_folder, "lib"))
rm(self, "*.pdb", os.path.join(self.package_folder, "bin"))
def package_info(self):
self.cpp_info.libs = ["juice"]
self.cpp_info.set_property("cmake_file_name", "LibJuice")
if self.options.shared:
self.cpp_info.set_property("cmake_target_name", "LibJuice::LibJuice")
else:
self.cpp_info.set_property("cmake_target_name", "LibJuice::LibJuiceStatic")
self.cpp_info.defines.append("JUICE_STATIC")
if self.settings.os in ["Linux", "FreeBSD"]:
self.cpp_info.system_libs.append("m")
self.cpp_info.system_libs.append("pthread")
self.cpp_info.system_libs.append("dl")
if self.settings.os == "Windows":
self.cpp_info.system_libs.extend(["ws2_32", "bcrypt"])
if is_msvc(self):
self.cpp_info.cxxflags.append("/bigobj")

View file

@ -0,0 +1,13 @@
cmake_minimum_required(VERSION 3.15)
project(test_package LANGUAGES CXX) # if the project uses c++
find_package(LibJuice REQUIRED CONFIG)
add_executable(${PROJECT_NAME} test_package.cpp)
if (BUILD_SHARED_LIBS)
target_link_libraries(${PROJECT_NAME} PRIVATE LibJuice::LibJuice)
else()
target_link_libraries(${PROJECT_NAME} PRIVATE LibJuice::LibJuiceStatic)
endif()

View file

@ -0,0 +1,32 @@
from conan import ConanFile
from conan.tools.build import can_run
from conan.tools.cmake import cmake_layout, CMake, CMakeToolchain
import os
# It will become the standard on Conan 2.x
class TestPackageConan(ConanFile):
settings = "os", "arch", "compiler", "build_type"
generators = "CMakeDeps", "VirtualRunEnv"
test_type = "explicit"
def requirements(self):
self.requires(self.tested_reference_str)
def layout(self):
cmake_layout(self)
def generate(self):
tc = CMakeToolchain(self)
tc.variables["BUILD_SHARED_LIBS"] = self.dependencies[self.tested_reference_str].options.shared
tc.generate()
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def test(self):
if can_run(self):
bin_path = os.path.join(self.cpp.build.bindir, "test_package")
self.run(bin_path, env="conanrun")

View file

@ -0,0 +1,8 @@
#include <cstdlib>
#include <juice/juice.h>
int main(void) {
juice_config config;
juice_set_log_level(JUICE_LOG_LEVEL_WARN);
return EXIT_SUCCESS;
}

View file

@ -0,0 +1,5 @@
versions:
"1.6.1":
folder: all
"1.5.7":
folder: all

View file

@ -0,0 +1,29 @@
import os
import shutil
import re
def _get_files_from_folder(search_dir, output_folder):
if not os.path.isdir(search_dir):
return []
files = []
for f in os.listdir(search_dir):
src = os.path.join(search_dir, f)
if os.access(src, os.X_OK) or bool(re.search(r"lib.*\.so(\.\d+)*$", f)):
if os.path.isfile(src):
dst = os.path.join(output_folder, f)
shutil.copy2(src, dst)
files.append(dst)
else:
files += _get_files_from_folder(src, output_folder)
return files
def deploy(graph, output_folder, **kwargs):
conanfile = graph.root.conanfile
files = []
for r, d in conanfile.dependencies.items():
if d.package_folder is None:
continue
search_dirs = (d.cpp_info.libdirs or [])
for dir in search_dirs:
search_dir = os.path.join(d.package_folder, dir)
files += _get_files_from_folder(search_dir, output_folder)

View file

@ -0,0 +1,30 @@
sources:
"1.32.10":
url:
- "https://sourceforge.net/projects/mpg123/files/mpg123/1.32.10/mpg123-1.32.10.tar.bz2"
- "https://www.mpg123.de/download/mpg123-1.32.10.tar.bz2"
sha256: "87b2c17fe0c979d3ef38eeceff6362b35b28ac8589fbf1854b5be75c9ab6557c"
"1.31.2":
url:
- "https://sourceforge.net/projects/mpg123/files/mpg123/1.31.2/mpg123-1.31.2.tar.bz2"
- "https://www.mpg123.de/download/mpg123-1.31.2.tar.bz2"
sha256: "b17f22905e31f43b6b401dfdf6a71ed11bb7d056f68db449d70b9f9ae839c7de"
"1.29.3":
url:
- "https://sourceforge.net/projects/mpg123/files/mpg123/1.29.3/mpg123-1.29.3.tar.bz2"
- "https://www.mpg123.de/download/mpg123-1.29.3.tar.bz2"
sha256: "963885d8cc77262f28b77187c7d189e32195e64244de2530b798ddf32183e847"
"1.26.4":
url:
- "https://sourceforge.net/projects/mpg123/files/mpg123/1.26.4/mpg123-1.26.4.tar.bz2"
- "https://www.mpg123.de/download/mpg123-1.26.4.tar.bz2"
sha256: "081991540df7a666b29049ad870f293cfa28863b36488ab4d58ceaa7b5846454"
patches:
"1.31.2":
- patch_file: "patches/0001-msvc-export-symbols.patch"
"1.26.4":
- patch_file: "patches/0001-msvc-export-symbols.patch"
"1.29.3":
- patch_file: "patches/0001-msvc-export-symbols.patch"
- patch_file: "patches/0002-cmake-read_api_version-fix.patch"

View file

@ -0,0 +1,222 @@
from conan import ConanFile
from conan.errors import ConanInvalidConfiguration
from conan.tools.apple import is_apple_os, fix_apple_shared_install_name
from conan.tools.cmake import cmake_layout, CMake, CMakeDeps, CMakeToolchain
from conan.tools.layout import basic_layout
from conan.tools.gnu import Autotools, AutotoolsDeps, AutotoolsToolchain
from conan.tools.files import get, copy, export_conandata_patches, apply_conandata_patches, replace_in_file, rmdir, rm
from conan.tools.microsoft import is_msvc
from conan.tools.env import VirtualBuildEnv, VirtualRunEnv
from conan.tools.build import cross_building
import os
required_conan_version = ">=1.53.0"
class Mpg123Conan(ConanFile):
name = "mpg123"
description = "Fast console MPEG Audio Player and decoder library"
topics = ("mpeg", "audio", "player", "decoder")
url = "https://github.com/conan-io/conan-center-index"
homepage = "http://mpg123.org/"
license = "LGPL-2.1-or-later", "GPL-2.0-or-later"
settings = "os", "compiler", "build_type", "arch"
options = {
"shared": [True, False],
"fPIC": [True, False],
"flexible_resampling": [True, False],
"network": [True, False],
"icy": [True, False],
"id3v2": [True, False],
"ieeefloat": [True, False],
"layer1": [True, False],
"layer2": [True, False],
"layer3": [True, False],
"moreinfo": [True, False],
"seektable": [None, "ANY"],
"module": ["dummy", "libalsa", "tinyalsa", "win32"],
}
default_options = {
"shared": False,
"fPIC": True,
"flexible_resampling": True,
"network": True,
"icy": True,
"id3v2": True,
"ieeefloat": True,
"layer1": True,
"layer2": True,
"layer3": True,
"moreinfo": True,
"seektable": "1000",
"module": "dummy",
}
@property
def _audio_module(self):
return {
"libalsa": "alsa",
}.get(str(self.options.module), str(self.options.module))
def export_sources(self):
export_conandata_patches(self)
def config_options(self):
if self.settings.os == "Windows":
self.options.rm_safe("fPIC")
def configure(self):
self.settings.rm_safe("compiler.libcxx")
self.settings.rm_safe("compiler.cppstd")
if self.options.shared:
self.options.rm_safe("fPIC")
def layout(self):
if is_msvc(self):
cmake_layout(self, src_folder="src")
else:
basic_layout(self, src_folder="src")
def requirements(self):
if self.options.module == "libalsa":
self.requires("libalsa/1.2.10")
if self.options.module == "tinyalsa":
self.requires("tinyalsa/2.0.0")
def validate(self):
if not str(self.options.seektable).isdigit():
raise ConanInvalidConfiguration(f"The option -o {self.ref.name}:seektable must be an integer number.")
if self.settings.os != "Windows" and self.options.module == "win32":
raise ConanInvalidConfiguration(f"The option -o {self.ref.name}:module should not use 'win32' for non-Windows OS")
def build_requirements(self):
if not self.conf.get("tools.gnu:pkg_config", default=False, check_type=str):
self.tool_requires("pkgconf/2.0.3")
if self.settings.arch in ["x86", "x86_64"]:
self.tool_requires("yasm/1.3.0")
if self.settings_build.os == "Windows" and not is_msvc(self):
self.win_bash = True
if not self.conf.get("tools.microsoft.bash:path", default=False, check_type=str):
self.tool_requires("msys2/cci.latest")
def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True)
def generate(self):
env = VirtualBuildEnv(self)
env.generate()
if not cross_building(self):
env = VirtualRunEnv(self)
env.generate(scope="build")
if is_msvc(self):
tc = CMakeToolchain(self)
tc.variables["NO_MOREINFO"] = not self.options.moreinfo
tc.variables["NETWORK"] = self.options.network
tc.variables["NO_NTOM"] = not self.options.flexible_resampling
tc.variables["NO_ICY"] = not self.options.icy
tc.variables["NO_ID3V2"] = not self.options.id3v2
tc.variables["IEEE_FLOAT"] = self.options.ieeefloat
tc.variables["NO_LAYER1"] = not self.options.layer1
tc.variables["NO_LAYER2"] = not self.options.layer2
tc.variables["NO_LAYER3"] = not self.options.layer3
tc.variables["USE_MODULES"] = False
tc.variables["CHECK_MODULES"] = self._audio_module
tc.variables["WITH_SEEKTABLE"] = self.options.seektable
tc.generate()
tc = CMakeDeps(self)
tc.generate()
else:
yes_no = lambda v: "yes" if v else "no"
tc = AutotoolsToolchain(self)
tc.configure_args.extend([
f"--enable-moreinfo={yes_no(self.options.moreinfo)}",
f"--enable-network={yes_no(self.options.network)}",
f"--enable-ntom={yes_no(self.options.flexible_resampling)}",
f"--enable-icy={yes_no(self.options.icy)}",
f"--enable-id3v2={yes_no(self.options.id3v2)}",
f"--enable-ieeefloat={yes_no(self.options.ieeefloat)}",
f"--enable-layer1={yes_no(self.options.layer1)}",
f"--enable-layer2={yes_no(self.options.layer2)}",
f"--enable-layer3={yes_no(self.options.layer3)}",
f"--with-audio={self._audio_module}",
f"--with-default-audio={self._audio_module}",
f"--with-seektable={self.options.seektable}",
f"--enable-modules=no",
f"--enable-shared={yes_no(self.options.shared)}",
f"--enable-static={yes_no(not self.options.shared)}",
])
if is_apple_os(self):
# Needed for fix_apple_shared_install_name invocation in package method
tc.extra_cflags += ["-headerpad_max_install_names"]
# The finite-math-only optimization has no effect and will cause linking errors
# when linked against glibc >= 2.31
tc.extra_cflags += ["-fno-finite-math-only"]
tc.generate()
tc = AutotoolsDeps(self)
tc.generate()
def build(self):
apply_conandata_patches(self)
if is_msvc(self):
cmake = CMake(self)
cmake.configure(build_script_folder=os.path.join(self.source_folder, "ports", "cmake"))
cmake.build()
else:
if self.settings.compiler == "apple-clang" and cross_building(self):
# when testing if the assembler supports avx - propagate cflags (CFLAGS) to the assembler
# (which should contain "-arch x86_64" when crossbuilding with appleclang)
replace_in_file(self, os.path.join(self.source_folder, "configure"),
"$CCAS -c -o conftest.o",
"$CCAS $CFLAGS -c -o conftest.o")
autotools = Autotools(self)
autotools.configure()
autotools.make()
def package(self):
copy(self, "COPYING", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
if is_msvc(self):
cmake = CMake(self)
cmake.install()
rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
else:
autotools = Autotools(self)
autotools.install()
rm(self, "*.la", os.path.join(self.package_folder, "lib"))
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
rmdir(self, os.path.join(self.package_folder, "share"))
fix_apple_shared_install_name(self)
def package_info(self):
self.cpp_info.set_property("cmake_file_name", "mpg123")
self.cpp_info.components["libmpg123"].libs = ["mpg123"]
self.cpp_info.components["libmpg123"].set_property("pkg_config_name", "libmpg123")
self.cpp_info.components["libmpg123"].set_property("cmake_target_name", "MPG123::libmpg123")
if self.settings.os == "Windows" and self.options.shared:
self.cpp_info.components["libmpg123"].defines.append("LINK_MPG123_DLL")
self.cpp_info.components["libout123"].libs = ["out123"]
self.cpp_info.components["libout123"].set_property("pkg_config_name", "libout123")
self.cpp_info.components["libout123"].set_property("cmake_target_name", "MPG123::libout123")
self.cpp_info.components["libout123"].requires = ["libmpg123"]
self.cpp_info.components["libsyn123"].libs = ["syn123"]
self.cpp_info.components["libsyn123"].set_property("pkg_config_name", "libsyn123")
self.cpp_info.components["libsyn123"].set_property("cmake_target_name", "MPG123::libsyn123")
self.cpp_info.components["libsyn123"].requires = ["libmpg123"]
if self.settings.os == "Linux":
self.cpp_info.components["libmpg123"].system_libs = ["m"]
if self.settings.arch in ["x86", "x86_64"]:
self.cpp_info.components["libsyn123"].system_libs = ["mvec"]
elif self.settings.os == "Windows":
self.cpp_info.components["libmpg123"].system_libs = ["shlwapi"]
if self.options.module == "libalsa":
self.cpp_info.components["libout123"].requires.append("libalsa::libalsa")
if self.options.module == "tinyalsa":
self.cpp_info.components["libout123"].requires.append("tinyalsa::tinyalsa")
if self.options.module == "win32":
self.cpp_info.components["libout123"].system_libs.append("winmm")

View file

@ -0,0 +1,22 @@
--- a/ports/cmake/src/libout123/CMakeLists.txt
+++ b/ports/cmake/src/libout123/CMakeLists.txt
@@ -18,7 +18,7 @@ add_library(${TARGET}
$<TARGET_OBJECTS:compat>
$<$<BOOL:${USE_MODULES}>:$<TARGET_OBJECTS:compat_dl>>)
-set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME out123)
+set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME out123 WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_link_libraries(${TARGET} PRIVATE
$<TARGET_NAME_IF_EXISTS:defaultmodule>
--- a/ports/cmake/src/libsyn123/CMakeLists.txt
+++ b/ports/cmake/src/libsyn123/CMakeLists.txt
@@ -15,7 +15,7 @@ add_library(${TARGET}
"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/libsyn123/sampleconv.c"
$<TARGET_OBJECTS:compat_str>)
-set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME syn123)
+set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME syn123 WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_include_directories(${TARGET} INTERFACE
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"

View file

@ -0,0 +1,10 @@
--- a/ports/cmake/cmake/read_api_version.cmake
+++ b/ports/cmake/cmake/read_api_version.cmake
@@ -1,6 +1,6 @@
function(read_api_version project_version api_version outapi_version synapi_version )
- file( READ "${CMAKE_SOURCE_DIR}/../../configure.ac" configure_ac )
+ file( READ "${CMAKE_CURRENT_SOURCE_DIR}/../../configure.ac" configure_ac )
string( REGEX MATCH "AC_INIT\\(\\[mpg123\\], \\[([0-9\\.]+)" result ${configure_ac} )
set( ${project_version} ${CMAKE_MATCH_1} PARENT_SCOPE )

View file

@ -0,0 +1,7 @@
cmake_minimum_required(VERSION 3.8)
project(test_package LANGUAGES C)
find_package(mpg123 REQUIRED CONFIG)
add_executable(${PROJECT_NAME} test_package.c)
target_link_libraries(${PROJECT_NAME} PRIVATE MPG123::libmpg123)

View file

@ -0,0 +1,26 @@
from conan import ConanFile
from conan.tools.build import can_run
from conan.tools.cmake import cmake_layout, CMake
import os
class TestPackageConan(ConanFile):
settings = "os", "arch", "compiler", "build_type"
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv"
test_type = "explicit"
def requirements(self):
self.requires(self.tested_reference_str)
def layout(self):
cmake_layout(self)
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def test(self):
if can_run(self):
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
self.run(bin_path, env="conanrun")

View file

@ -0,0 +1,12 @@
#include "mpg123.h"
#include <stdio.h>
int main() {
int error;
mpg123_pars *pars;
pars = mpg123_new_pars(&error);
mpg123_fmt_all(pars);
mpg123_delete_pars(pars);
return 0;
}

9
conan/mpg123/config.yml Normal file
View file

@ -0,0 +1,9 @@
versions:
"1.32.10":
folder: "all"
"1.31.2":
folder: "all"
"1.29.3":
folder: "all"
"1.26.4":
folder: "all"

12
conan/profiles/emscripten Normal file
View file

@ -0,0 +1,12 @@
[settings]
os=Emscripten
arch=wasm
compiler=clang
compiler.version=15
compiler.cppstd=23
compiler.libcxx=libc++
build_type=Release
[tool_requires]
cmake/3.27.0
emsdk/3.1.73

View file

@ -0,0 +1,15 @@
[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=gnu23
compiler.libcxx=libstdc++11
compiler.version=15
os=Linux
[tool_requires]
cmake/3.27.0
[replace_requires]
libiconv/*: libiconv/1.18
mpg123/*: mpg123/1.32.10

11
conan/profiles/macOS-arm64 Executable file
View file

@ -0,0 +1,11 @@
[settings]
arch=armv8
build_type=Release
compiler=apple-clang
compiler.cppstd=gnu23
compiler.libcxx=libc++
compiler.version=17
os=Macos
[tool_requires]
cmake/3.27.0

8
conan/profiles/win-x86_64 Executable file
View file

@ -0,0 +1,8 @@
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=23
compiler.runtime=dynamic
compiler.version=194
os=Windows

60
conanfile.py Normal file
View file

@ -0,0 +1,60 @@
from conan import ConanFile
from conan.tools.cmake import cmake_layout
class CompressorRecipe(ConanFile):
settings = "os", "compiler", "build_type", "arch"
generators = "CMakeToolchain", "CMakeDeps"
def requirements(self):
if self.settings.os == "Emscripten":
self.requires("skia/134.20250327.0", options = {
"enable_svg": True,
"use_expat": True,
"use_harfbuzz": True,
"use_system_harfbuzz":False,
"use_conan_harfbuzz":True,
"enable_skshaper": True
})
else:
self.requires("skia/134.20250327.0", options = {
"use_system_expat":False,
"use_system_freetype":False,
"use_system_harfbuzz":False,
"use_system_icu":False,
"use_system_libjpeg_turbo":False,
"use_system_libpng":False,
"use_system_libwebp":False,
"use_system_zlib":False,
"enable_svg": True,
"enable_skottie": False,
"enable_skunicode": True,
"enable_skshaper": True,
"enable_bentleyottmann": True, # for some reason, setting this to False results in an error when creating the project
"enable_skparagraph": True,
"use_freetype": True
})
if self.settings.os == "Linux":
self.requires("sdl/3.2.14", options = {
"wayland": False,
"pulseaudio": False,
"alsa": False,
"sndio": False,
"vulkan": False,
"opengles": False
})
else:
self.requires("sdl/3.2.14")
if self.settings.os != "Emscripten" and self.settings.os != "Macos":
self.requires("onetbb/2022.0.0")
if self.settings.os != "Emscripten":
self.requires("libdatachannel/0.23.1")
def build_requirements(self):
self.tool_requires("cmake/3.27.0")
def layout(self):
cmake_layout(self)

10
data/config/p2p.json Normal file
View file

@ -0,0 +1,10 @@
{
"signalingServer": "wss://signalserver.infinipaint.com:8000",
"stunList": [
"stun.l.google.com:19302",
"stun1.l.google.com:19302",
"stun2.l.google.com:19302",
"stun3.l.google.com:19302",
"stun4.l.google.com:19302"
]
}

Binary file not shown.

74
data/icons/backarrow.svg Normal file
View file

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="backarrow.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="23.020096"
inkscape:cx="5.0390754"
inkscape:cy="10.621155"
inkscape:window-width="2533"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 7.6729163,4.2333331 H 0.79374996 Z m -5.8208333,0"
id="path5-5"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 2.9104165,6.614583 0.79374996,4.2333331 Z"
id="path5-5-5"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 0.79374996,4.2333331 2.9104165,1.8520832 Z"
id="path5-5-5-2"
sodipodi:nodetypes="ccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

63
data/icons/bookmark.svg Normal file
View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="bookmark.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="11.510048"
inkscape:cx="4.4309111"
inkscape:cy="15.986032"
inkscape:window-width="2686"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:0.79374999;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 1.8520832,7.1437496 V 1.3229166 H 6.614583 v 5.820833 L 4.2333331,5.2916664 Z"
id="path1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

69
data/icons/brush.svg Normal file
View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="brush.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="32.55533"
inkscape:cx="13.745829"
inkscape:cy="15.650279"
inkscape:window-width="2168"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="m 7.4083329,1.0583333 c 0.79375,0.79375 -3.3072916,4.8947914 -3.3072916,4.8947914 L 3.042708,4.8947915 c 0,0 3.5718749,-4.63020815 4.3656249,-3.8364582 z"
id="path3"
sodipodi:nodetypes="sccs" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="m 2.1166666,5.820833 1.0583332,1.0583333 c 0,0 -0.1661743,0.2645832 -0.5291666,0.5291666 -0.3629922,0.2645833 -1.5874999,0 -1.5874999,0 z"
id="path4"
sodipodi:nodetypes="ccscc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

132
data/icons/camera.svg Normal file
View file

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="camera.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="23.020095"
inkscape:cx="8.3839792"
inkscape:cy="25.412579"
inkscape:window-width="1940"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1"
showguides="true">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
<sodipodi:guide
position="4.2333331,6.7393849"
orientation="1,0"
id="guide1"
inkscape:locked="false" />
<sodipodi:guide
position="7.9997569,3.1750002"
orientation="0,-1"
id="guide2"
inkscape:locked="false" />
</sodipodi:namedview>
<defs
id="defs1">
<mask
maskUnits="userSpaceOnUse"
id="mask10">
<g
id="g10">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="rect10"
width="10.318749"
height="9.7895832"
x="-0.79374993"
y="-0.52916664"
rx="0.26819724"
ry="0.26458332" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
id="path10"
sodipodi:type="arc"
sodipodi:cx="4.2333331"
sodipodi:cy="5.2916665"
sodipodi:rx="1.3229166"
sodipodi:ry="1.3229166"
sodipodi:start="0"
sodipodi:end="6.2759855"
sodipodi:arc-type="arc"
d="M 5.5562497,5.2916665 A 1.3229166,1.3229166 0 0 1 4.2357143,6.614581 1.3229166,1.3229166 0 0 1 2.9104251,5.2964289 1.3229166,1.3229166 0 0 1 4.2261896,3.9687692 1.3229166,1.3229166 0 0 1 5.5562154,5.2821418"
sodipodi:open="true" />
</g>
</mask>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g3"
mask="url(#mask10)">
<rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect6"
width="6.8791661"
height="4.2333331"
x="0.79375029"
y="3.1749997"
rx="0.29054701"
ry="0.25242093"
mask="none" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect7"
width="3.1749997"
height="1.0583333"
x="2.6458333"
y="2.3812499"
rx="0.26819724"
ry="0.26819724" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect8"
width="1.0583333"
height="0.52916664"
x="1.3229166"
y="2.9104164"
rx="0.26819724"
ry="0.26458332" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

103
data/icons/chat.svg Normal file
View file

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="chat.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="16.277666"
inkscape:cx="-1.1979604"
inkscape:cy="7.3413473"
inkscape:window-width="2446"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
d="M 1.0583333,1.3229166 V 6.0854163 H 3.439583 l 2.1166667,1.5875 v -1.5875 H 7.4083329 V 1.3229166 Z"
id="path1"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="path2"
sodipodi:type="arc"
sodipodi:cx="2.645833"
sodipodi:cy="3.7041664"
sodipodi:rx="0.52916664"
sodipodi:ry="0.52916664"
sodipodi:start="4.7128653"
sodipodi:end="4.712389"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 2.6460851,3.1749998 A 0.52916664,0.52916664 0 0 1 3.1749996,3.7043555 0.52916664,0.52916664 0 0 1 2.645707,4.233333 0.52916664,0.52916664 0 0 1 2.1166664,3.7041034 0.52916664,0.52916664 0 0 1 2.645833,3.1749998" />
<path
style="fill:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="path2-3"
sodipodi:type="arc"
sodipodi:cx="4.2333331"
sodipodi:cy="3.7041664"
sodipodi:rx="0.52916664"
sodipodi:ry="0.52916664"
sodipodi:start="4.7128653"
sodipodi:end="4.712389"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 4.2335852,3.1749998 A 0.52916664,0.52916664 0 0 1 4.7624997,3.7043555 0.52916664,0.52916664 0 0 1 4.2332071,4.233333 0.52916664,0.52916664 0 0 1 3.7041665,3.7041034 0.52916664,0.52916664 0 0 1 4.2333331,3.1749998" />
<path
style="fill:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="path2-3-1"
sodipodi:type="arc"
sodipodi:cx="5.8208332"
sodipodi:cy="3.7041664"
sodipodi:rx="0.52916664"
sodipodi:ry="0.52916664"
sodipodi:start="4.7128653"
sodipodi:end="4.712389"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 5.8210853,3.1749998 A 0.52916664,0.52916664 0 0 1 6.3499998,3.7043555 0.52916664,0.52916664 0 0 1 5.8207072,4.233333 0.52916664,0.52916664 0 0 1 5.2916666,3.7041034 0.52916664,0.52916664 0 0 1 5.8208332,3.1749998" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

68
data/icons/circle.svg Normal file
View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="circle.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="32.55533"
inkscape:cx="12.102473"
inkscape:cy="12.747529"
inkscape:window-width="3440"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="true" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect5"
width="5.8208327"
height="5.8208327"
x="1.3229166"
y="1.3229166"
ry="2.9104164"
rx="2.9004822" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

69
data/icons/close.svg Normal file
View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="close.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="32.555332"
inkscape:cx="7.8481768"
inkscape:cy="16.018881"
inkscape:window-width="3440"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="m 1.3229166,1.3229166 5.820833,5.820833 z"
id="path5"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="m 7.1437496,1.3229166 -5.820833,5.820833 z"
id="path5-5"
sodipodi:nodetypes="ccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

69
data/icons/cursor.svg Normal file
View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="cursor.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="8.1388326"
inkscape:cx="-3.5631646"
inkscape:cy="25.310755"
inkscape:window-width="2112"
inkscape:window-height="1214"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="m 2.1166665,6.8791663 10e-8,-5.5562497 4.4979164,3.7041665"
id="path1"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 2.1166665,6.8791663 3.439583,6.3499997 4.3655093,7.4083329 5.1592592,7.0575477 5.027083,5.7229066 6.614583,5.0270831"
id="path4"
sodipodi:nodetypes="cccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

63
data/icons/droparrow.svg Normal file
View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="droparrow.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="23.020096"
inkscape:cx="5.3648777"
inkscape:cy="19.352656"
inkscape:window-width="2286"
inkscape:window-height="1214"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 1.0583333,2.3812499 H 7.408333 L 4.2333331,6.0854164 Z"
id="path1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

86
data/icons/eraser.svg Normal file
View file

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="eraser.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="16.277666"
inkscape:cx="1.5972806"
inkscape:cy="12.778245"
inkscape:window-width="1822"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4"
d="M 5.5562497,1.1906249 7.408333,3.0427082 5.0270831,5.423958 3.1749998,3.5718748 Z"
id="path5"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 3.1749998,3.5718748 1.0583333,5.6885413"
id="path6"
sodipodi:nodetypes="cc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 1.0583333,5.6885413 2.3812499,7.0114579"
id="path7" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 5.0270831,5.423958 3.439583,7.0114579"
id="path8"
sodipodi:nodetypes="cc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 3.439583,7.0114579 H 2.3812499"
id="path9" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 2.3812499,7.0114579 H 5.2916663"
id="path10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

80
data/icons/eyedropper.svg Normal file
View file

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
sodipodi:docname="eyedropper.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="11.510047"
inkscape:cx="-13.987779"
inkscape:cy="8.3839794"
inkscape:window-width="2649"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 7.816167,0.65049936 C 8.6099169,1.4442493 7.2870004,2.2379992 7.2870004,2.2379992 L 6.2286671,1.179666 c 0,0 0.7937499,-1.3229166 1.5874999,-0.52916664 z"
id="path17"
sodipodi:nodetypes="sccs" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 5.5562497,0.7937501 7.6729163,2.9104167 6.8791663,3.7041665 4.7624997,1.5875001 Z"
id="path18" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 1.1906249,6.2177082 5.4239579,1.984375"
id="path19" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 2.2489581,7.2760415 6.4822913,3.0427082"
id="path20" />
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 1.1906249,6.2177082 0.92604157,7.5406248 2.2489582,7.2760414"
id="path21" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

68
data/icons/file.svg Normal file
View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="file.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="23.020096"
inkscape:cx="15.768831"
inkscape:cy="15.095506"
inkscape:window-width="2089"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.5874999,7.4083329 V 1.0583333 Z m 5.2916663,0 H 1.5874999 Z m 0,-3.9687497 V 7.4083329 Z M 4.4979164,1.0583333 H 1.5874999 Z"
id="path5-5"
sodipodi:nodetypes="cccccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="m 4.4979163,1.0583333 2.38125,2.3812497 -2.3812499,2e-7 V 1.0583333"
id="path1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

91
data/icons/folder.svg Normal file
View file

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="folder.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="16.277666"
inkscape:cx="6.9420272"
inkscape:cy="7.8942522"
inkscape:window-width="2089"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 1.3229166,2.1166665 V 6.8791663"
id="path1" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="m 1.3229166,6.8791663 h 5.820833 V 2.1166665"
id="path2" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="m 1.3229166,2.1166665 h 1.5875"
id="path9" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 2.9104166,2.1166665 3.439583,1.3229166"
id="path10" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 3.439583,1.3229166 H 6.3499997"
id="path11" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 6.3499997,1.3229166 7.1437496,2.1166665"
id="path12" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 2.9104166,2.1166665 3.439583,2.6458332"
id="path13" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="M 3.439583,2.6458332 H 7.1437496"
id="path14" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3 KiB

64
data/icons/jump.svg Normal file
View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="jump.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="32.555332"
inkscape:cx="15.281675"
inkscape:cy="14.92843"
inkscape:window-width="2057"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round"
d="m 1.3229167,7.1437497 c 0,0 0.7937499,-4.4979165 3.9687497,-4.4979165 -8.731e-4,-0.8732066 10e-8,-1.5874999 10e-8,-1.5874999 l 2.1166665,2.1166666 -2.1166666,1.8520832 -1e-7,-1.3229165 C 2.7551171,3.6870296 1.3229167,7.1437497 1.3229167,7.1437497 Z"
id="path1"
sodipodi:nodetypes="ccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

113
data/icons/list.svg Normal file
View file

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="list.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="32.555329"
inkscape:cx="12.394284"
inkscape:cy="16.986466"
inkscape:window-width="2635"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="m 2.6458332,2.1166666 4.7624996,-10e-8 z"
id="path6"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 2.6458332,6.3499997 H 7.4083328 Z"
id="path6-2"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 2.6458332,4.2333331 H 7.4083324 Z"
id="path6-5"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.374177;stroke-linecap:round;stroke-linejoin:round"
id="path1"
sodipodi:type="arc"
sodipodi:cx="1.3229166"
sodipodi:cy="2.1166663"
sodipodi:rx="0.52916664"
sodipodi:ry="0.52916658"
sodipodi:start="4.7128653"
sodipodi:end="4.712389"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 1.3231687,1.5874998 A 0.52916664,0.52916658 0 0 1 1.8520832,2.1168554 0.52916664,0.52916658 0 0 1 1.3227906,2.6458329 0.52916664,0.52916658 0 0 1 0.79374999,2.1166033 0.52916664,0.52916658 0 0 1 1.3229166,1.5874997" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.374177;stroke-linecap:round;stroke-linejoin:round"
id="path1-3"
sodipodi:type="arc"
sodipodi:cx="1.3229166"
sodipodi:cy="4.2333331"
sodipodi:rx="0.52916664"
sodipodi:ry="0.52916658"
sodipodi:start="4.7128653"
sodipodi:end="4.712389"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 1.3231687,3.7041666 A 0.52916664,0.52916658 0 0 1 1.8520832,4.2335222 0.52916664,0.52916658 0 0 1 1.3227906,4.7624997 0.52916664,0.52916658 0 0 1 0.79374999,4.2332701 0.52916664,0.52916658 0 0 1 1.3229166,3.7041665" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.374177;stroke-linecap:round;stroke-linejoin:round"
id="path1-3-1"
sodipodi:type="arc"
sodipodi:cx="1.3229166"
sodipodi:cy="6.3499999"
sodipodi:rx="0.52916664"
sodipodi:ry="0.52916658"
sodipodi:start="4.7128653"
sodipodi:end="4.712389"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 1.3231687,5.8208334 A 0.52916664,0.52916658 0 0 1 1.8520832,6.3501889 0.52916664,0.52916658 0 0 1 1.3227906,6.8791665 0.52916664,0.52916658 0 0 1 0.79374999,6.3499369 0.52916664,0.52916658 0 0 1 1.3229166,5.8208333" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

74
data/icons/menu.svg Normal file
View file

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="menu.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="16.277665"
inkscape:cx="-0.12286774"
inkscape:cy="8.8464775"
inkscape:window-width="2280"
inkscape:window-height="1214"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.3229167,2.1166665 H 7.1437495 Z"
id="path6"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.3229167,6.3499997 H 7.1437495 Z"
id="path6-2"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.3229166,4.2333331 H 7.1437491 Z"
id="path6-5"
sodipodi:nodetypes="ccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

87
data/icons/network.svg Normal file
View file

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="network.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="11.313708"
inkscape:cx="11.623068"
inkscape:cy="7.6455924"
inkscape:window-width="3440"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="m 0.64675936,2.5184412 c 0,0 1.79328694,-1.1955246 3.58657374,-1.1955246 1.7932871,0 3.5865741,1.1955246 3.5865741,1.1955246"
id="path21"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="m 1.8422839,4.0128469 c 0,0 1.1955245,-0.8966434 2.3910492,-0.8966434 1.1955247,0 2.3910494,0.8966434 2.3910494,0.8966434"
id="path21-7"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.79374999;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="m 3.0378084,5.5072527 c 0,0 0.5977624,-0.4705953 1.1955247,-0.4705953 0.5977623,0 1.1955247,0.4705953 1.1955247,0.4705953"
id="path21-7-6"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.8011;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="path22"
sodipodi:type="arc"
sodipodi:cx="4.2333331"
sodipodi:cy="7.0794411"
sodipodi:rx="0.20027478"
sodipodi:ry="0.20027478"
sodipodi:start="0"
sodipodi:end="6.2817431"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 4.4336079,7.0794411 A 0.20027478,0.20027478 0 0 1 4.2334053,7.2797158 0.20027478,0.20027478 0 0 1 4.0330584,7.0795855 0.20027478,0.20027478 0 0 1 4.2331165,6.8791664 0.20027478,0.20027478 0 0 1 4.4336077,7.0791522" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

69
data/icons/plus.svg Normal file
View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="plus.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="32.555332"
inkscape:cx="7.8788937"
inkscape:cy="16.018881"
inkscape:window-width="2882"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.0583333,4.2333331 H 7.4083329 Z"
id="path5"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="m 4.2333331,1.0583333 0,6.3499996 z"
id="path5-5"
sodipodi:nodetypes="ccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

68
data/icons/rectangle.svg Normal file
View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="rectangle.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="32.555331"
inkscape:cx="16.633221"
inkscape:cy="17.616162"
inkscape:window-width="3440"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="true" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="rect5"
width="6.3499999"
height="6.3499999"
x="1.0583333"
y="1.0583333"
ry="0.26819724"
rx="0.26819724" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

101
data/icons/rectselect.svg Normal file
View file

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="rectselect.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="32.555331"
inkscape:cx="11.672436"
inkscape:cy="16.126391"
inkscape:window-width="3440"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.0583333,2.3812499 V 1.0583333 h 1.3229166"
id="path1" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.0583333,7.408333 V 6.0854163 Z"
id="path2" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.0583333,7.408333 H 2.3812499 Z"
id="path3" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.0583333,3.7041664 V 4.7624997 Z"
id="path4" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 7.4083329,2.3812499 V 1.0583333 H 6.0854163"
id="path1-5" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="m 7.4083329,7.4083329 0,-1.3229166 z"
id="path2-3"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 7.4083329,7.4083329 H 6.0854163 Z"
id="path3-5"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 7.4083329,3.7041665 V 4.7624998 Z"
id="path4-6" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 3.7041664,1.0583333 H 4.7624997 Z"
id="path5" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 3.7041664,7.408333 H 4.7624997 Z"
id="path6" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4 KiB

82
data/icons/redo.svg Normal file
View file

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="redo.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="23.020096"
inkscape:cx="15.182387"
inkscape:cy="17.289242"
inkscape:window-width="2635"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="path1"
sodipodi:type="arc"
sodipodi:cx="-4.2333322"
sodipodi:cy="5.0270829"
sodipodi:rx="2.3812513"
sodipodi:ry="2.3812499"
sodipodi:start="4.7128653"
sodipodi:end="3.1400395"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m -4.2321979,2.6458333 a 2.3812513,2.3812499 0 0 1 2.380117,2.380773 2.3812513,2.3812499 0 0 1 -2.3791637,2.3817256 2.3812513,2.3812499 0 0 1 -2.383336,-2.3775505"
transform="scale(-1,1)" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 3.968749,1.3229166 5.5562497,2.6458332"
id="path2" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round"
d="M 3.9687489,3.9687497 5.5562497,2.6458332"
id="path3"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

73
data/icons/save.svg Normal file
View file

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="save.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="23.020095"
inkscape:cx="5.1911167"
inkscape:cy="10.838357"
inkscape:window-width="2168"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="true" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 1.0583333,1.0583333 H 2.6458332 V 2.6458332 H 4.4979164 V 1.0583333 l 1.5874999,0 1.3229166,1.3229166 v 5.027083 H 1.0583333 Z"
id="path1"
sodipodi:nodetypes="cccccccccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 2.6458332,1.0583333 H 4.4979163 Z"
id="path2" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="m 2.3812499,4.7624997 0,1.3229166 h 3.7041664 l 0,-1.3229166 z"
id="path3"
sodipodi:nodetypes="ccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

117
data/icons/text.svg Normal file
View file

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
sodipodi:docname="text2.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="11.510048"
inkscape:cx="-6.0816429"
inkscape:cy="7.9930164"
inkscape:window-width="3440"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
showguides="true">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
<sodipodi:guide
position="4.2333331,7.4083333"
orientation="1,0"
id="guide1"
inkscape:locked="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.0583333,2.3812499 V 1.0583333 h 1.3229166"
id="path1" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.0583333,7.408333 V 6.0854163 Z"
id="path2" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.0583333,7.408333 H 2.3812499 Z"
id="path3" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 1.0583333,3.7041664 V 4.7624997 Z"
id="path4" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 7.4083329,2.3812499 V 1.0583333 H 6.0854163"
id="path1-5" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="m 7.4083329,7.4083329 0,-1.3229166 z"
id="path2-3"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 7.4083329,7.4083329 H 6.0854163 Z"
id="path3-5"
sodipodi:nodetypes="ccc" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 7.4083329,3.7041665 V 4.7624998 Z"
id="path4-6" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 3.7041664,1.0583333 H 4.7624997 Z"
id="path5" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0"
d="M 3.7041664,7.408333 H 4.7624997 Z"
id="path6" />
<path
style="fill:#000000;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="m 5.2916664,2.6458332 -2.1166666,0"
id="path7"
sodipodi:nodetypes="cc" />
<path
style="fill:#000000;stroke:#000000;stroke-width:0.79375;stroke-linecap:round;stroke-linejoin:round"
d="m 4.233333,2.6458332 1e-7,3.1749998"
id="path8"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

81
data/icons/undo.svg Normal file
View file

@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666666 8.4666666"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="undo.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">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
showgrid="true"
inkscape:zoom="23.020096"
inkscape:cx="15.182387"
inkscape:cy="17.289242"
inkscape:window-width="2635"
inkscape:window-height="1354"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458333"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
enabled="true"
visible="true"
dotted="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
id="path1"
sodipodi:type="arc"
sodipodi:cx="4.2333293"
sodipodi:cy="5.0270829"
sodipodi:rx="2.3812549"
sodipodi:ry="2.3812497"
sodipodi:start="4.7128653"
sodipodi:end="3.1400395"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 4.2344635,2.6458335 A 2.3812549,2.3812497 0 0 1 6.6145842,5.0266063 2.3812549,2.3812497 0 0 1 4.2354169,7.4083317 2.3812549,2.3812497 0 0 1 1.8520773,5.0307814" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"
d="M 4.4979128,1.322917 2.9104097,2.6458334"
id="path2" />
<path
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round"
d="M 4.4979129,3.9687497 2.9104097,2.6458334"
id="path3"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
data/progicons/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,22 @@
Copyright (c) 2014 Gaëtan Renaudeau
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

View file

@ -0,0 +1,23 @@
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

View file

@ -0,0 +1,373 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
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. License Grants and Conditions
--------------------------------
2.1. Grants
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 such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
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 Software 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 placed in a text file included with all distributions of the Covered
Software under this License. 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. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software 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 Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any 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 Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, 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. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the 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. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Armchair-Software
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Armchair-Software
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View file

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2015 Poul Sander
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,17 @@
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

View file

@ -0,0 +1,24 @@
Copyright (c) 2011 Google Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"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 COPYRIGHT
OWNER OR CONTRIBUTORS 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.

View file

@ -0,0 +1,203 @@
Apache License
Version 2.0, January 2004
https://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View file

@ -0,0 +1,32 @@
// Copyright 2018 The ANGLE Project Authors.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
//
// Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
// Ltd., nor the names of their contributors may be used to endorse
// or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "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
// COPYRIGHT OWNER OR CONTRIBUTORS 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.

View file

@ -0,0 +1,19 @@
Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View file

@ -0,0 +1,24 @@
Copyright (c) 2013-2022, Randolph Voorhies, Shane Grant
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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.

View file

@ -0,0 +1,18 @@
zlib/libpng license
Copyright (c) 2024 Nic Barker
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software in a
product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not
be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.

View file

@ -0,0 +1,19 @@
Copyright (c) 2019-2020 Advanced Micro Devices, Inc. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View file

@ -0,0 +1,20 @@
Copyright (c) 2017-2022 Paul-Louis Ageneau and others
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -0,0 +1,26 @@
// Copyright 2017-2023 The Dawn & Tint Authors
//
// 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 above copyright notice, this
// list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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.

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 Volodymyr Bilonenko
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,94 @@
This product includes DNG technology under license by Adobe Systems
Incorporated.
DNG SDK License Agreement
NOTICE TO USER:
Adobe Systems Incorporated provides the Software and Documentation for use under
the terms of this Agreement. Any download, installation, use, reproduction,
modification or distribution of the Software or Documentation, or any
derivatives or portions thereof, constitutes your acceptance of this Agreement.
As used in this Agreement, "Adobe" means Adobe Systems Incorporated. "Software"
means the software code, in any format, including sample code and source code,
accompanying this Agreement. "Documentation" means the documents, specifications
and all other items accompanying this Agreement other than the Software.
1. LICENSE GRANT
Software License. Subject to the restrictions below and other terms of this
Agreement, Adobe hereby grants you a non-exclusive, worldwide, royalty free
license to use, reproduce, prepare derivative works from, publicly display,
publicly perform, distribute and sublicense the Software for any purpose.
Document License. Subject to the terms of this Agreement, Adobe hereby grants
you a non-exclusive, worldwide, royalty free license to make a limited number of
copies of the Documentation for your development purposes and to publicly
display, publicly perform and distribute such copies. You may not modify the
Documentation.
2. RESTRICTIONS AND OWNERSHIP
You will not remove any copyright or other notice included in the Software or
Documentation and you will include such notices in any copies of the Software
that you distribute in human-readable format.
You will not copy, use, display, modify or distribute the Software or
Documentation in any manner not permitted by this Agreement. No title to the
intellectual property in the Software or Documentation is transferred to you
under the terms of this Agreement. You do not acquire any rights to the Software
or the Documentation except as expressly set forth in this Agreement. All rights
not granted are reserved by Adobe.
3. DISCLAIMER OF WARRANTY
ADOBE PROVIDES THE SOFTWARE AND DOCUMENTATION ONLY ON AN "AS IS" BASIS WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
WITHOUT LIMITATION ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. ADOBE MAKES NO WARRANTY
THAT THE SOFTWARE OR DOCUMENTATION WILL BE ERROR-FREE. To the extent
permissible, any warranties that are not and cannot be excluded by the foregoing
are limited to ninety (90) days.
4. LIMITATION OF LIABILITY
ADOBE AND ITS SUPPLIERS SHALL NOT BE LIABLE FOR LOSS OR DAMAGE ARISING OUT OF
THIS AGREEMENT OR FROM THE USE OF THE SOFTWARE OR DOCUMENTATION. IN NO EVENT
WILL ADOBE BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT,
CONSEQUENTIAL, INCIDENTAL, OR SPECIAL DAMAGES INCLUDING LOST PROFITS, LOST
SAVINGS, COSTS, FEES, OR EXPENSES OF ANY KIND ARISING OUT OF ANY PROVISION OF
THIS AGREEMENT OR THE USE OR THE INABILITY TO USE THE SOFTWARE OR DOCUMENTATION,
HOWEVER CAUSED AND UNDER ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES. ADOBE'S AGGREGATE LIABILITY AND THAT OF ITS
SUPPLIERS UNDER OR IN CONNECTION WITH THIS AGREEMENT SHALL BE LIMITED TO THE
AMOUNT PAID BY YOU FOR THE SOFTWARE AND DOCUMENTATION.
5. INDEMNIFICATION
If you choose to distribute the Software in a commercial product, you do so with
the understanding that you agree to defend, indemnify and hold harmless Adobe
against any losses, damages and costs arising from the claims, lawsuits or other
legal actions arising out of such distribution.
6. TRADEMARK USAGE
Adobe and the DNG logo are the trademarks or registered trademarks of Adobe
Systems Incorporated in the United States and other countries. Such trademarks
may not be used to endorse or promote any product unless expressly permitted
under separate agreement with Adobe. For information on how to license the DNG
logo please go to www.adobe.com.
7. TERM
Your rights under this Agreement shall terminate if you fail to comply with any
of the material terms or conditions of this Agreement. If all your rights under
this Agreement terminate, you will immediately cease use and distribution of the
Software and Documentation.
8. GOVERNING LAW AND JURISDICTION. This Agreement is governed by the statutes
and laws of the State of California, without regard to the conflicts of law
principles thereof. The federal and state courts located in Santa Clara County,
California, USA, will have non-exclusive jurisdiction over any dispute arising
out of this Agreement.
9. GENERAL
This Agreement supersedes any prior agreement, oral or written, between Adobe
and you with respect to the licensing to you of the Software and Documentation.
No variation of the terms of this Agreement will be enforceable against Adobe
unless Adobe gives its express consent in writing signed by an authorized
signatory of Adobe. If any part of this Agreement is found void and
unenforceable, it will not affect the validity of the balance of the Agreement,
which shall remain valid and enforceable according to its terms.

View file

@ -0,0 +1,27 @@
Copyright (c) 2018 Emscripten authors (see AUTHORS in Emscripten)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
----------------------------------------------------------------------------
This is the MIT/Expat Licence. For more information see:
1. http://www.opensource.org/licenses/mit-license.php
2. http://en.wikipedia.org/wiki/MIT_License

View file

@ -0,0 +1,21 @@
Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
Copyright (c) 2001-2022 Expat maintainers
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -0,0 +1,169 @@
The FreeType Project LICENSE
----------------------------
2006-Jan-27
Copyright 1996-2002, 2006 by
David Turner, Robert Wilhelm, and Werner Lemberg
Introduction
============
The FreeType Project is distributed in several archive packages;
some of them may contain, in addition to the FreeType font engine,
various tools and contributions which rely on, or relate to, the
FreeType Project.
This license applies to all files found in such packages, and
which do not fall under their own explicit license. The license
affects thus the FreeType font engine, the test programs,
documentation and makefiles, at the very least.
This license was inspired by the BSD, Artistic, and IJG
(Independent JPEG Group) licenses, which all encourage inclusion
and use of free software in commercial and freeware products
alike. As a consequence, its main points are that:
o We don't promise that this software works. However, we will be
interested in any kind of bug reports. (`as is' distribution)
o You can use this software for whatever you want, in parts or
full form, without having to pay us. (`royalty-free' usage)
o You may not pretend that you wrote this software. If you use
it, or only parts of it, in a program, you must acknowledge
somewhere in your documentation that you have used the
FreeType code. (`credits')
We specifically permit and encourage the inclusion of this
software, with or without modifications, in commercial products.
We disclaim all warranties covering The FreeType Project and
assume no liability related to The FreeType Project.
Finally, many people asked us for a preferred form for a
credit/disclaimer to use in compliance with this license. We thus
encourage you to use the following text:
"""
Portions of this software are copyright © <year> The FreeType
Project (www.freetype.org). All rights reserved.
"""
Please replace <year> with the value from the FreeType version you
actually use.
Legal Terms
===========
0. Definitions
--------------
Throughout this license, the terms `package', `FreeType Project',
and `FreeType archive' refer to the set of files originally
distributed by the authors (David Turner, Robert Wilhelm, and
Werner Lemberg) as the `FreeType Project', be they named as alpha,
beta or final release.
`You' refers to the licensee, or person using the project, where
`using' is a generic term including compiling the project's source
code as well as linking it to form a `program' or `executable'.
This program is referred to as `a program using the FreeType
engine'.
This license applies to all files distributed in the original
FreeType Project, including all source code, binaries and
documentation, unless otherwise stated in the file in its
original, unmodified form as distributed in the original archive.
If you are unsure whether or not a particular file is covered by
this license, you must contact us to verify this.
The FreeType Project is copyright (C) 1996-2000 by David Turner,
Robert Wilhelm, and Werner Lemberg. All rights reserved except as
specified below.
1. No Warranty
--------------
THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
USE, OF THE FREETYPE PROJECT.
2. Redistribution
-----------------
This license grants a worldwide, royalty-free, perpetual and
irrevocable right and license to use, execute, perform, compile,
display, copy, create derivative works of, distribute and
sublicense the FreeType Project (in both source and object code
forms) and derivative works thereof for any purpose; and to
authorize others to exercise some or all of the rights granted
herein, subject to the following conditions:
o Redistribution of source code must retain this license file
(`FTL.TXT') unaltered; any additions, deletions or changes to
the original files must be clearly indicated in accompanying
documentation. The copyright notices of the unaltered,
original files must be preserved in all copies of source
files.
o Redistribution in binary form must provide a disclaimer that
states that the software is based in part of the work of the
FreeType Team, in the distribution documentation. We also
encourage you to put an URL to the FreeType web page in your
documentation, though this isn't mandatory.
These conditions apply to any software derived from or based on
the FreeType Project, not just the unmodified files. If you use
our work, you must acknowledge us. However, no fee need be paid
to us.
3. Advertising
--------------
Neither the FreeType authors and contributors nor you shall use
the name of the other for commercial, advertising, or promotional
purposes without specific prior written permission.
We suggest, but do not require, that you use one or more of the
following phrases to refer to this software in your documentation
or advertising materials: `FreeType Project', `FreeType Engine',
`FreeType library', or `FreeType Distribution'.
As you have not signed this license, you are not required to
accept it. However, as the FreeType Project is copyrighted
material, only this license, or another one contracted with the
authors, grants you the right to use, distribute, and modify it.
Therefore, by using, distributing, or modifying the FreeType
Project, you indicate that you understand and accept all the terms
of this license.
4. Contacts
-----------
There are two mailing lists related to FreeType:
o freetype@nongnu.org
Discusses general use and applications of FreeType, as well as
future and wanted additions to the library and distribution.
If you are looking for support, start in this list if you
haven't found anything to help you in the documentation.
o freetype-devel@nongnu.org
Discusses bugs, as well as engine internals, design issues,
specific licenses, porting, etc.
Our home page can be found at
https://www.freetype.org
--- end of FTL.TXT ---

View file

@ -0,0 +1,42 @@
HarfBuzz is licensed under the so-called "Old MIT" license. Details follow.
For parts of HarfBuzz that are licensed under different licenses see individual
files names COPYING in subdirectories where applicable.
Copyright © 2010-2022 Google, Inc.
Copyright © 2015-2020 Ebrahim Byagowi
Copyright © 2019,2020 Facebook, Inc.
Copyright © 2012,2015 Mozilla Foundation
Copyright © 2011 Codethink Limited
Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies)
Copyright © 2009 Keith Stribley
Copyright © 2011 Martin Hosken and SIL International
Copyright © 2007 Chris Wilson
Copyright © 2005,2006,2020,2021,2022,2023 Behdad Esfahbod
Copyright © 2004,2007,2008,2009,2010,2013,2021,2022,2023 Red Hat, Inc.
Copyright © 1998-2005 David Turner and Werner Lemberg
Copyright © 2016 Igalia S.L.
Copyright © 2022 Matthias Clasen
Copyright © 2018,2021 Khaled Hosny
Copyright © 2018,2019,2020 Adobe, Inc
Copyright © 2013-2015 Alexei Podtelezhnikov
For full copyright notices consult the individual files in the package.
Permission is hereby granted, without written agreement and without
license or royalty fees, to use, copy, modify, and distribute this
software and its documentation for any purpose, provided that the
above copyright notice and the following two paragraphs appear in
all copies of this software.
IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

View file

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View file

@ -0,0 +1,512 @@
UNICODE LICENSE V3
COPYRIGHT AND PERMISSION NOTICE
Copyright © 2016-2023 Unicode, Inc.
NOTICE TO USER: Carefully read the following legal agreement. BY
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
Permission is hereby granted, free of charge, to any person obtaining a
copy of data files and any associated documentation (the "Data Files") or
software and any associated documentation (the "Software") to deal in the
Data Files or Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, and/or sell
copies of the Data Files or Software, and to permit persons to whom the
Data Files or Software are furnished to do so, provided that either (a)
this copyright and permission notice appear with all copies of the Data
Files or Software, or (b) this copyright and permission notice appear in
associated Documentation.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
THIRD PARTY RIGHTS.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall
not be used in advertising or otherwise to promote the sale, use or other
dealings in these Data Files or Software without prior written
authorization of the copyright holder.
----------------------------------------------------------------------
Third-Party Software Licenses
This section contains third-party software notices and/or additional
terms for licensed third-party software components included within ICU
libraries.
----------------------------------------------------------------------
ICU License - ICU 1.8.1 to ICU 57.1
COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1995-2016 International Business Machines Corporation and others
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, and/or sell copies of the Software, and to permit persons
to whom the Software is furnished to do so, provided that the above
copyright notice(s) and this permission notice appear in all copies of
the Software and that both the above copyright notice(s) and this
permission notice appear in supporting documentation.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Except as contained in this notice, the name of a copyright holder
shall not be used in advertising or otherwise to promote the sale, use
or other dealings in this Software without prior written authorization
of the copyright holder.
All trademarks and registered trademarks mentioned herein are the
property of their respective owners.
----------------------------------------------------------------------
Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
# The Google Chrome software developed by Google is licensed under
# the BSD license. Other software included in this distribution is
# provided under other licenses, as set forth below.
#
# The BSD License
# http://opensource.org/licenses/bsd-license.php
# Copyright (C) 2006-2008, Google Inc.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided with
# the distribution.
# Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
# CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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.
#
#
# The word list in cjdict.txt are generated by combining three word lists
# listed below with further processing for compound word breaking. The
# frequency is generated with an iterative training against Google web
# corpora.
#
# * Libtabe (Chinese)
# - https://sourceforge.net/project/?group_id=1519
# - Its license terms and conditions are shown below.
#
# * IPADIC (Japanese)
# - http://chasen.aist-nara.ac.jp/chasen/distribution.html
# - Its license terms and conditions are shown below.
#
# ---------COPYING.libtabe ---- BEGIN--------------------
#
# /*
# * Copyright (c) 1999 TaBE Project.
# * Copyright (c) 1999 Pai-Hsiang Hsiao.
# * All rights reserved.
# *
# * Redistribution and use in source and binary forms, with or without
# * modification, are permitted provided that the following conditions
# * are met:
# *
# * . Redistributions of source code must retain the above copyright
# * notice, this list of conditions and the following disclaimer.
# * . Redistributions in binary form must reproduce the above copyright
# * notice, this list of conditions and the following disclaimer in
# * the documentation and/or other materials provided with the
# * distribution.
# * . Neither the name of the TaBE Project nor the names of its
# * contributors may be used to endorse or promote products derived
# * from this software without specific prior written permission.
# *
# * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# * "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
# * REGENTS OR CONTRIBUTORS 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.
# */
#
# /*
# * Copyright (c) 1999 Computer Systems and Communication Lab,
# * Institute of Information Science, Academia
# * Sinica. All rights reserved.
# *
# * Redistribution and use in source and binary forms, with or without
# * modification, are permitted provided that the following conditions
# * are met:
# *
# * . Redistributions of source code must retain the above copyright
# * notice, this list of conditions and the following disclaimer.
# * . Redistributions in binary form must reproduce the above copyright
# * notice, this list of conditions and the following disclaimer in
# * the documentation and/or other materials provided with the
# * distribution.
# * . Neither the name of the Computer Systems and Communication Lab
# * nor the names of its contributors may be used to endorse or
# * promote products derived from this software without specific
# * prior written permission.
# *
# * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# * "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
# * REGENTS OR CONTRIBUTORS 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.
# */
#
# Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
# University of Illinois
# c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4
#
# ---------------COPYING.libtabe-----END--------------------------------
#
#
# ---------------COPYING.ipadic-----BEGIN-------------------------------
#
# Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
# and Technology. All Rights Reserved.
#
# Use, reproduction, and distribution of this software is permitted.
# Any copy of this software, whether in its original form or modified,
# must include both the above copyright notice and the following
# paragraphs.
#
# Nara Institute of Science and Technology (NAIST),
# the copyright holders, disclaims all warranties with regard to this
# software, including all implied warranties of merchantability and
# fitness, in no event shall NAIST be liable for
# any special, indirect or consequential damages or any damages
# whatsoever resulting from loss of use, data or profits, whether in an
# action of contract, negligence or other tortuous action, arising out
# of or in connection with the use or performance of this software.
#
# A large portion of the dictionary entries
# originate from ICOT Free Software. The following conditions for ICOT
# Free Software applies to the current dictionary as well.
#
# Each User may also freely distribute the Program, whether in its
# original form or modified, to any third party or parties, PROVIDED
# that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
# on, or be attached to, the Program, which is distributed substantially
# in the same form as set out herein and that such intended
# distribution, if actually made, will neither violate or otherwise
# contravene any of the laws and regulations of the countries having
# jurisdiction over the User or the intended distribution itself.
#
# NO WARRANTY
#
# The program was produced on an experimental basis in the course of the
# research and development conducted during the project and is provided
# to users as so produced on an experimental basis. Accordingly, the
# program is provided without any warranty whatsoever, whether express,
# implied, statutory or otherwise. The term "warranty" used herein
# includes, but is not limited to, any warranty of the quality,
# performance, merchantability and fitness for a particular purpose of
# the program and the nonexistence of any infringement or violation of
# any right of any third party.
#
# Each user of the program will agree and understand, and be deemed to
# have agreed and understood, that there is no warranty whatsoever for
# the program and, accordingly, the entire risk arising from or
# otherwise connected with the program is assumed by the user.
#
# Therefore, neither ICOT, the copyright holder, or any other
# organization that participated in or was otherwise related to the
# development of the program and their respective officials, directors,
# officers and other employees shall be held liable for any and all
# damages, including, without limitation, general, special, incidental
# and consequential damages, arising out of or otherwise in connection
# with the use or inability to use the program or any product, material
# or result produced or otherwise obtained by using the program,
# regardless of whether they have been advised of, or otherwise had
# knowledge of, the possibility of such damages at any time during the
# project or thereafter. Each user will be deemed to have agreed to the
# foregoing by his or her commencement of use of the program. The term
# "use" as used herein includes, but is not limited to, the use,
# modification, copying and distribution of the program and the
# production of secondary products from the program.
#
# In the case where the program, whether in its original form or
# modified, was distributed or delivered to or received by a user from
# any person, organization or entity other than ICOT, unless it makes or
# grants independently of ICOT any specific warranty to the user in
# writing, such person, organization or entity, will also be exempted
# from and not be held liable to the user for any such damages as noted
# above as far as the program is concerned.
#
# ---------------COPYING.ipadic-----END----------------------------------
----------------------------------------------------------------------
Lao Word Break Dictionary Data (laodict.txt)
# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# Copyright (c) 2015 International Business Machines Corporation
# and others. All Rights Reserved.
#
# Project: https://github.com/rober42539/lao-dictionary
# Dictionary: https://github.com/rober42539/lao-dictionary/laodict.txt
# License: https://github.com/rober42539/lao-dictionary/LICENSE.txt
# (copied below)
#
# This file is derived from the above dictionary version of Nov 22, 2020
# ----------------------------------------------------------------------
# Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer. Redistributions in binary
# form must reproduce the above copyright notice, this list of conditions and
# the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "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
# COPYRIGHT HOLDER OR CONTRIBUTORS 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.
# --------------------------------------------------------------------------
----------------------------------------------------------------------
Burmese Word Break Dictionary Data (burmesedict.txt)
# Copyright (c) 2014 International Business Machines Corporation
# and others. All Rights Reserved.
#
# This list is part of a project hosted at:
# github.com/kanyawtech/myanmar-karen-word-lists
#
# --------------------------------------------------------------------------
# Copyright (c) 2013, LeRoy Benjamin Sharon
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met: Redistributions of source code must retain the above
# copyright notice, this list of conditions and the following
# disclaimer. Redistributions in binary form must reproduce the
# above copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# Neither the name Myanmar Karen Word Lists, nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
# CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS
# 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.
# --------------------------------------------------------------------------
----------------------------------------------------------------------
Time Zone Database
ICU uses the public domain data and code derived from Time Zone
Database for its time zone support. The ownership of the TZ database
is explained in BCP 175: Procedure for Maintaining the Time Zone
Database section 7.
# 7. Database Ownership
#
# The TZ database itself is not an IETF Contribution or an IETF
# document. Rather it is a pre-existing and regularly updated work
# that is in the public domain, and is intended to remain in the
# public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
# not apply to the TZ Database or contributions that individuals make
# to it. Should any claims be made and substantiated against the TZ
# Database, the organization that is providing the IANA
# Considerations defined in this RFC, under the memorandum of
# understanding with the IETF, currently ICANN, may act in accordance
# with all competent court orders. No ownership claims will be made
# by ICANN or the IETF Trust on the database or the code. Any person
# making a contribution to the database or code waives all rights to
# future claims in that contribution or in the TZ Database.
----------------------------------------------------------------------
Google double-conversion
Copyright 2006-2011, the V8 project authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"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 COPYRIGHT
OWNER OR CONTRIBUTORS 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.
----------------------------------------------------------------------
File: aclocal.m4 (only for ICU4C)
Section: pkg.m4 - Macros to locate and utilise pkg-config.
Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
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.
As a special exception to the GNU General Public License, if you
distribute this file as part of a program that contains a
configuration script generated by Autoconf, you may include it under
the same distribution terms that you use for the rest of that
program.
(The condition for the exception is fulfilled because
ICU4C includes a configuration script generated by Autoconf,
namely the `configure` script.)
----------------------------------------------------------------------
File: config.guess (only for ICU4C)
This file 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 <https://www.gnu.org/licenses/>.
As a special exception to the GNU General Public License, if you
distribute this file as part of a program that contains a
configuration script generated by Autoconf, you may include it under
the same distribution terms that you use for the rest of that
program. This Exception is an additional permission under section 7
of the GNU General Public License, version 3 ("GPLv3").
(The condition for the exception is fulfilled because
ICU4C includes a configuration script generated by Autoconf,
namely the `configure` script.)
----------------------------------------------------------------------
File: install-sh (only for ICU4C)
Copyright 1991 by the Massachusetts Institute of Technology
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation, and that the name of M.I.T. not be used in advertising or
publicity pertaining to distribution of the software without specific,
written prior permission. M.I.T. makes no representations about the
suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.

View file

@ -0,0 +1,44 @@
UNICODE LICENSE V3
COPYRIGHT AND PERMISSION NOTICE
Copyright © 2020-2023 Unicode, Inc.
NOTICE TO USER: Carefully read the following legal agreement. BY
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
Permission is hereby granted, free of charge, to any person obtaining a
copy of data files and any associated documentation (the "Data Files") or
software and any associated documentation (the "Software") to deal in the
Data Files or Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, and/or sell
copies of the Data Files or Software, and to permit persons to whom the
Data Files or Software are furnished to do so, provided that either (a)
this copyright and permission notice appear with all copies of the Data
Files or Software, or (b) this copyright and permission notice appear in
associated Documentation.
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
THIRD PARTY RIGHTS.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
FILES OR SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall
not be used in advertising or otherwise to promote the sale, use or other
dealings in these Data Files or Software without prior written
authorization of the copyright holder.
—
Portions of ICU4X may have been adapted from ICU4C and/or ICU4J.
ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.

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