Skip to content
Commits on Source (565)
root = true
[*]
charset = utf-8
end_of_line = lf
[*.[ch]]
indent_size = 8
indent_style = tab
insert_final_newline = true
max_line_length = 80
tab_width = 8
[meson.build]
indent_size = 2
indent_style = space
......@@ -25,13 +25,11 @@ C code conventions
You may encounter old code that doesn't follow all the following code
conventions, but for new code it is better to follow them, for consistency.
In the scripts/ directory there is an uncrustify config file with a script to
apply the coding style to a certain *.c file. The script has not (yet) been run
on all the GtkSourceView source code, but it can serve as a guideline.
- Avoid trailing whitespace.
- Indent the C code with tabulations with a width of eight characters.
However, alignment after matching the current scope should be done
with spaces.
- All blocks should be surrounded by curly braces, even one-line blocks. The
curly braces must be placed on their own lines. Like this:
......@@ -49,9 +47,12 @@ on all the GtkSourceView source code, but it can serve as a guideline.
modifying a block of code, if it switches between one and two lines, we
don't need to add/remove the curly braces all the time.
- Follow the C89 standard. In particular, no "//"-style comments.
- Follow the C99 standard but without "//"-style comments. Some restrictions
apply but relatively should match GTK and GLib.
- The files should have a modeline for the indentation style.
- The files should not have modelines included. A .editorconfig file is
provided for configuration indentation and many editors have support for
using them.
- Do not be cheap about blank lines, spacing the code vertically helps
readability. However never use two consecutive blank lines, there is really
......@@ -61,9 +62,10 @@ on all the GtkSourceView source code, but it can serve as a guideline.
code.
See also:
https://developer.gnome.org/programming-guidelines/stable/
https://wiki.gnome.org/Projects/GTK%2B/BestPractices
https://wiki.gnome.org/Projects/GLib/CompilerRequirements
- https://developer.gnome.org/programming-guidelines/stable/
- https://wiki.gnome.org/Projects/GTK%2B/BestPractices
- https://wiki.gnome.org/Projects/GLib/CompilerRequirements
Programming best-practices
--------------------------
......@@ -75,9 +77,9 @@ old. So when editing the code, we should try to make it better, not worse.
Here are some general advices:
- Simplicity: the simpler code the better. Any trick that seem smart when you
write it is going to bite your ass later when reading the code. In fact, a
write it is going to bite you later when reading the code. In fact, the
code is read far more often than it is written: for fixing a bug, adding a
feature, or simply see how it is implemented. So making the code harder to
feature, or simply see how it is implemented. Making the code harder to
read is a net loss.
- Avoid code duplication, make an effort to refactor common code into utility
......@@ -132,6 +134,17 @@ Here are some general advices:
writing hacks or heuristics to work around a bug or a lack of feature in an
underlying library.
- Public API should have precondition guards using g_return_if_fail() or
g_return_val_if_fail(). Optionally, you may do this before returnin values
from the function to help catch bugs earlier in the development cycle.
Private functions (such as those with static) should use g_assert() to
validate invariants. These are used in debug builds but can be compiled
out of production/release builds.
- When transfering ownership of an object or struct, use g_steal_pointer()
to make it clear when reading that ownership was transfered.
See also:
https://blogs.gnome.org/swilmet/2012/08/01/about-code-quality-and-maintainability/
......
News in 4.8.2, 2021-09-03
News in 5.2.0, 2021-09-03
-------------------------
* New syntax highlighting definition file for: STAR
* Improved syntax highlighting definition file for: YARA, LLVM
* GtkSourceMap now avoids animation while scrolling in response
to clicks. This should help prevent some hysteresis.
* GObject Introspection fixes
* Fixed decrement of negative numbers in GtkSourceView
* Improvements to style schemes: kate
* Fixed build-time macros for version checking in some scenarios
* Translation updates
News in 4.8.1, 2021-03-02
GtkSourceView 5.2.0 is the release corresponding with GNOME 41.0 for
GTK 4-based applications. We expect performance improvements when
combined with GTK 4.4's NGL renderer, especially on HiDPI systems.
Changes since 5.1.0
* Add support for drawing a highlight line between the gutter and
text area. kate.xml uses this to more closely match Kate.
* Python 3 is now preferred over Python 2.
* Fixes for moving words.
* A new scheduler API to help with background buffer work
* Improvements to YARA syntax.
* Translation updates.
More information can be found at:
* https://blogs.gnome.org/chergert/2021/07/05/gtksourceview-searching-with-pcre2/
* https://blogs.gnome.org/chergert/2021/06/27/performance-improvements-in-text-editing/
News in 5.1.0, 2021-07-19
-------------------------
GtkSourceView 5.1.0 is the first alpha release of GtkSourceView as we
progress towards the 5.2 release.
Changes since 5.0.0
* Fix GtkSourceView 5.0 version check macros
* Improve font and styling of GtkSourceMap
* Improve input gestures to make GtkSourceMap more predictable and
reduce scroll latency
* Various GObject Introspection fixes
* Avoid a number of string copies in CSS processing
* Avoid alpha compositing when drawing the right-margin
* Improve PCRE2 support to perform closer to GRegex
* GtkSourceSearchContext is now powered by PCRE2 when regexes are in use
* javascript.lang, typescript.lang, html.lang: alter character ranges to
work with PCRE2 by using \N{U+} style escapes
* groovy.lang: add mimetype for groovy
* sh.lang: fix short parameter expansion
* powershell.lang: add support for powershell 7
* Kate: fix matched brackets color
* Adwaita: fix selection styling to support libadwaita
* Translation updates
News in 5.0.0, 2021-03-19
-------------------------
* Fix highlighting in presence of byte-order-marks (BOM)
* meson.lang: Update keywords to 0.55.3 syntax
* cmake.lang: Update keywords to 3.18.2 syntax
* go.lang: make "0i" syntax highlight as integer
GtkSourceView 5.0 is the first stable release of GtkSourceView targeting the
GTK 4 toolkit. It is the culmination of about a year of development.
Numerous new features were added that are not available in the 4.8 series of
GtkSourceView.
Notably:
* A new GListModel-based completion engine with a refresh on autocompletion
interface styling which was upstreamed from GNOME Builder.
* Syntax languages are now implemented using PCRE2 instead of GRegex which
also allowed for enabling the PCRE2 JIT for faster syntax highlighting.
* GtkSourceView can now integrate with Sysprof to generate performance
information. This may be helpful to application developers to help optimize
application rendering on GTK 4.
* Many internal components have become native GtkWidgets.
* A new code-snippet engine with an XML-based language have been added which
were upstreamed from GNOME Builder.
* Support for interactive tooltips using GtkSourceHover which was upstreamed
from GNOME Builder.
* You can now write custom indenters using GtkSourceIndenter which was
upstreamed from GNOME Builder.
* The overview map now bundles a custom "BuilderBlocks" font which was
upstreamed from GNOME Builder.
* Undo management is now part of GTK 4.
* Translation updates.
News in 4.99.0, 2021-02-12
--------------------------
GtkSourceView 4.99.0 is a beta release targeting GTK 4 and will eventually
become GtkSourceView 5.0.
It is the largest release of GtkSourceView in many releases and contains new
subsystems and performance improvements. More than 300 commits are part of this
release touching everything from syntax highlighting to a new snippet engine.
As GtkSourceView 4.99 moves to using PCRE2, it is possible that some language
definitions will need tweaking for differences between PCRE and PCRE2. So far,
very few changes were necessary within the GtkSourceView codebase but external
language specifications may require some tweaks. In particular, improper
escaping is the only incompatability seen thus far.
* Improvements when converting Pango styling to CSS
* Build system improvements
* GObject modernization
* A new completion engine has been added that reduces overhead and fits with
GTK 4 lazy lists more closely. It is largely based on the code and design
from GNOME Builder.
* GtkSourceGutterRenderers are now a GtkWidget allowing more interesting
features to be implemented by applications.
* Undo management was moved into GTK 4 directly and is no longer part of
GtkSourceView.
* Syntax highlighting has moved to PCRE2 and utilizes a JIT when available.
* GtkSourceBuffer has a new "cursor-moved" signal.
* A new font "Builder Blocks" from GNOME Builder has been bundled for use
in the GtkSourceMap.
* To speed up gutter operations, a new GtkSourceLines abstraction has been
added which allows fewer passes across the source buffer to extract features
for display.
* A new snippet engine based originally upon GNOME Builder's but with a
new snippet language based on XML similar to language-specs and
style-schemes.
* A new "Assistant" abstraction which can be used for tooltips and eventually
hover providers.
* Updates to go.lang, cmake.lang, meson.lang, csharp.lang.
* Translation updates
News in 4.8.0, 2020-09-12
......
......@@ -11,13 +11,19 @@ The GtkSourceView library is free software and is released under the terms of
the GNU Lesser General Public License, see the 'COPYING' file for more details.
The official web site is https://wiki.gnome.org/Projects/GtkSourceView.
Documentation
-------------
Nightly documentation can be [found here](https://gnome.pages.gitlab.gnome.org/gtksourceview/gtksourceview-5.0/).
Dependencies
------------
* GLib >= 2.48
* GTK+ >= 3.24
* GLib >= 2.62
* GTK+ >= 3.99
* libxml2 >= 2.6
* freebidi >= 0.19.7
* libpcre2-8 >= 10.21
Installation
------------
......
......@@ -48,7 +48,6 @@ To build GtkSourceView, do the following:
--backend=vs: Generate Visual Studio projects for building on Visual Studio 2010, 2015
2017, 2019. This will remove the need for Ninja. Please note that the
generated project files are only valid on the machine they are generated.
-Dgir=false: Disable introspection builds.
-If the previous command completed successfully, carry out the build by running 'ninja' or
by opening and building the projects with the generated Visual Studio projects, if using
......
<?xml version="1.0" encoding="utf-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="2.4">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="block"/>
<GlyphID id="2" name="empty"/>
<GlyphID id="3" name="smallblock"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x2a3f4cae"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000010"/>
<unitsPerEm value="2048"/>
<created value="Mon Oct 7 00:00:00 2013"/>
<modified value="Fri Jan 31 15:45:50 2014"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="0"/>
<yMax value="0"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="1"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="1.0"/>
<ascent value="2048"/>
<descent value="0"/>
<lineGap value="0"/>
<advanceWidthMax value="20480"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="0"/>
<xMaxExtent value="0"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="2"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="4"/>
<maxPoints value="0"/>
<maxContours value="0"/>
<maxCompositePoints value="0"/>
<maxCompositeContours value="0"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="0"/>
<maxSizeOfInstructions value="0"/>
<maxComponentElements value="0"/>
<maxComponentDepth value="0"/>
</maxp>
<hmtx>
<mtx name=".notdef" width="1024" lsb="0"/>
<mtx name="block" width="1024" lsb="0"/>
<mtx name="empty" width="1024" lsb="0"/>
<mtx name="smallblock" width="1024" lsb="0"/>
</hmtx>
<loca>
</loca>
<glyf> <!-- Will result in empty table -->
<TTGlyph name=".notdef"/>
<TTGlyph name="empty"/>
<TTGlyph name="block">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="1024" y="0" on="1"/>
<pt x="1024" y="2048" on="1"/>
<pt x="0" y="2048" on="1"/>
</contour>
<instructions><assembly></assembly></instructions>
</TTGlyph>
<TTGlyph name="smallblock">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="1024" y="0" on="1"/>
<pt x="1024" y="1024" on="1"/>
<pt x="0" y="1024" on="1"/>
</contour>
<instructions><assembly></assembly></instructions>
</TTGlyph>
</glyf>
<name>
<namerecord nameID="0" platformID="1" platEncID="0" langID="0x0" unicode="True">
BuilderBlocks
</namerecord>
</name>
<cmap ERROR="">
<!-- Hand-coded format13 table mapping all Unicode
characters to glyph00001. -->
<hexdata>
0000 0001 <!-- version numTables -->
0003 000A <!-- platformID encodingID -->
0000000C <!-- offset -->
000D 0000 <!-- format reserved -->
00000040 <!-- length -->
00000000 <!-- language -->
00000004 <!-- nGroups -->
00000001 <!-- startCharCode -->
00000020 <!-- endCharCode -->
00000002 <!-- glyphID -->
00000021 <!-- startCharCode -->
00000060 <!-- endCharCode -->
00000001 <!-- glyphID -->
00000061 <!-- startCharCode -->
0000007A <!-- endCharCode -->
00000003 <!-- glyphID -->
0000007B <!-- startCharCode -->
0010FFFE <!-- endCharCode -->
00000001 <!-- glyphID -->
</hexdata>
</cmap>
</ttFont>
<?xml version="1.0" encoding="UTF-8"?>
<glade-catalog version="4.0"
supports="gtkbuilder"
name="gtksourceview"
library="gtksourceview-@GSV_API_VERSION@"
depends="gtk+"
book="gtksourceview-@GSV_API_VERSION@">
<glade-widget-classes>
<glade-widget-class name="GtkSourceView" title="GtkSourceView" generic-name="gtksourceview">
<properties>
<property id="auto-indent" default="False" />
<property id="highlight-current-line" default="False" />
<property id="indent-on-tab" default="True" />
<property id="insert-spaces-instead-of-tabs" default="False" />
<property id="right-margin-position" default="80" />
<property id="show-line-marks" default="False" />
<property id="show-line-numbers" default="False" />
<property id="show-right-margin" default="False" />
<property id="smart-home-end" default="Disabled">
<displayable-values>
<value id="GTK_SOURCE_SMART_HOME_END_DISABLED" name="Disabled" />
<value id="GTK_SOURCE_SMART_HOME_END_BEFORE" name="Before" />
<value id="GTK_SOURCE_SMART_HOME_END_AFTER" name="After" />
<value id="GTK_SOURCE_SMART_HOME_END_ALWAYS" name="Always" />
</displayable-values>
</property>
<property id="tab-width" default="8" />
</properties>
</glade-widget-class>
<glade-widget-class name="GtkSourceMap" title="GtkSourceMap" generic-name="gtksourcemap">
</glade-widget-class>
<glade-widget-class name="GtkSourceStyleSchemeChooserWidget" title="GtkSourceStyleSchemeChooserWidget" generic-name="gtksourcestyleschemechooserwidget">
</glade-widget-class>
<glade-widget-class name="GtkSourceStyleSchemeChooserButton" title="GtkSourceStyleSchemeChooserButton" generic-name="gtksourcestyleschemechooserbutton">
</glade-widget-class>
</glade-widget-classes>
<glade-widget-group name="GtkSourceView" title="GtkSourceView">
<glade-widget-class-ref name="GtkSourceView" />
<glade-widget-class-ref name="GtkSourceMap" />
<glade-widget-class-ref name="GtkSourceStyleSchemeChooserWidget" />
<glade-widget-class-ref name="GtkSourceStyleSchemeChooserButton" />
</glade-widget-group>
</glade-catalog>
# Note that we do not install in the detected GLADE_CATALOG_DIR
# since we may not have permissions to do it, for instance if
# compiling with a prefix while glade is installed in /usr.
# We use the variable only to find the dtd file.
# If you install gtksourceview and glade in different prefixes
# and want to use the catalog in glade, you will need to set
# the GLADE_CATALOG_SEARCH_PATH environment variable.
catalog_in = configuration_data()
catalog_in.set('GSV_API_VERSION', api_version)
catalog_xml = configure_file(
input: 'gtksourceview.xml.in',
output: 'gtksourceview.xml',
configuration: catalog_in,
install_dir: join_paths(datadir, 'glade', 'catalogs')
)
# Currently DTD validation does not work with glade's DTD.
# This does not appear to be limited to GtkSourceView.
#if xmllint_prg.found()
# catalog_dtd = join_paths(
# gladeui_dep.get_pkgconfig_variable('catalogdir'),
# 'glade-catalog.dtd'
# )
#
# test(
# 'Validate Glade catalogue',
# xmllint_prg,
# args: [
# '--dtdvalid',
# catalog_dtd,
# catalog_xml,
# '--noout',
# ]
# )
#endif
The icons here are licensed under the CC-by-SA 3. You can find the full text of
the license at:
http://creativecommons.org/licenses/by-sa/3.0/
See git commit's for authors and contributors to individual icons.
<svg xmlns="http://www.w3.org/2000/svg" width="17.414" height="16">
<g color="#000" fill="#2e3436">
<path d="M4.293 4.293L.586 8l3.707 3.707 1.414-1.414L3.414 8l2.293-2.293z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" font-weight="400" font-family="sans-serif" white-space="normal" overflow="visible"/>
<path d="M5 11h1v1H5zM5 4h1v1H5z" style="marker:none" overflow="visible"/>
<path d="M5 4c.554 0 1 .446 1 1s-.446 1-1 1-1-.446-1-1 .446-1 1-1zM5 10c.554 0 1 .446 1 1s-.446 1-1 1-1-.446-1-1 .446-1 1-1zM7 7c.554 0 1 .446 1 1s-.446 1-1 1-1-.446-1-1 .446-1 1-1zM11 7c.554 0 1 .446 1 1s-.446 1-1 1-1-.446-1-1 .446-1 1-1z" style="marker:none" overflow="visible"/>
<path d="M13.707 4.293l-1.414 1.414L14.586 8l-2.293 2.293 1.414 1.414L17.414 8z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" font-weight="400" font-family="sans-serif" white-space="normal" overflow="visible"/>
<path d="M13 4c.554 0 1 .446 1 1s-.446 1-1 1-1-.446-1-1 .446-1 1-1zM13 10c.554 0 1 .446 1 1s-.446 1-1 1-1-.446-1-1 .446-1 1-1z" style="marker:none" overflow="visible"/>
<path d="M12 4h1v1h-1zM12 11h1v1h-1z" style="marker:none" overflow="visible"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
<path d="M4.008 3l-.016 2 6.004.048H10c.4 0 .943.242 1.354.648.41.406.646.939.646 1.305v.047H5c-.817 0-1.533.362-2.07.882C2.393 8.45 2 9.167 2 10v1c0 .834.379 1.55.906 2.094.527.544 1.245.954 2.094.954h9V7c0-1.07-.522-2.016-1.24-2.727-.719-.71-1.678-1.226-2.76-1.226zM5 9.049h7v3H5c-.15 0-.433-.116-.656-.346C4.12 11.472 4 11.167 4 11v-1c0-.167.107-.427.32-.633.213-.206.497-.32.68-.32z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" color="#000" font-weight="400" font-family="sans-serif" white-space="normal" overflow="visible" fill="#2e3436"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16.048">
<g color="#000" font-weight="400" font-family="sans-serif" white-space="normal" fill="#2e3436">
<path d="M10.94.048c-1.11 0-2 .914-2 2.017v4.776l-.854.853a.5.5 0 0 0-.016.691l.87.95V14c0 .657.234 1.21.623 1.562.388.353.897.499 1.39.485l-.027-1c-.28.008-.522-.073-.69-.225-.167-.152-.296-.386-.296-.822V9.14a.5.5 0 0 0-.131-.338l-.678-.74.662-.662a.5.5 0 0 0 .147-.353V2.065c0-.585.42-1.017 1-1.017zM4.94 9.048c-1.334 0-2.276.814-2.645 1.552-.37.739-.355 1.448-.355 1.448v1s-.014.708.355 1.447c.37.738 1.311 1.553 2.645 1.553h2v-2h-2c-.667 0-.725-.186-.856-.448-.13-.261-.144-.552-.144-.552v-1s.013-.292.144-.553c.13-.262.189-.447.856-.447h2v-2h-1zM12.953.048v1c.58 0 1 .432 1 1.017v4.983a.5.5 0 0 0 .147.353l.662.662-.678.74a.5.5 0 0 0-.13.338v4.86c0 .436-.128.67-.296.822-.168.152-.41.233-.69.225l-.028 1c.493.014 1.001-.132 1.39-.485s.623-.905.623-1.562V9.335l.87-.95a.5.5 0 0 0-.016-.69l-.854-.854V2.065c0-1.103-.89-2.017-2-2.017z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" overflow="visible"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
<path d="M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zM5 4.023h2v2h2v-2h2v2h1v1h-1v2h1v1h-1v2H9v-2H7v2H5v-2H4v-1h1v-2H4v-1h1zm2 3v2h2v-2z" color="#000" overflow="visible" fill="#2e3436"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16.01" height="16">
<path d="M7.807.008c-.334.038-.655.19-.893.428L.42 6.963c-.545.555-.545 1.55 0 2.104l6.53 6.525c.554.544 1.55.544 2.105 0l6.53-6.49c.567-.557.567-1.582 0-2.139L9.056.436a1.443 1.443 0 0 0-.106-.07A1.525 1.525 0 0 0 7.807.008zM7 4h2s.707-.013 1.445.352c.74.365 1.562 1.296 1.576 2.625v.016L11.98 9H6s.014.292.145.553c.13.262.188.447.855.447h3v2H7c-1.333 0-2.275-.814-2.645-1.552C3.986 9.709 4 9 4 9V7s-.014-.708.355-1.447C4.725 4.814 5.667 4 7 4zm0 2c-.667 0-.725.186-.855.448C6.014 6.709 6 7 6 7h4.021v-.002c-.007-.658-.194-.721-.46-.853C9.294 6.013 9 6 9 6z" color="#000" overflow="visible" fill="#2e3436"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
<path d="M7.943 1c-3.854 0-7 3.146-7 7s3.146 7 7 7c3.855 0 7-3.146 7-7s-3.145-7-7-7zM7 4h2s.707-.013 1.445.352c.74.365 1.562 1.296 1.576 2.625v.015L11.98 9H6s.014.291.145.553c.13.261.188.447.855.447h3v2H7c-1.333 0-2.275-.814-2.645-1.553C3.986 9.71 4 9 4 9V7s-.014-.709.355-1.447C4.725 4.814 5.667 4 7 4zm0 2c-.667 0-.725.186-.855.447C6.014 6.71 6 7 6 7h4.021v-.002c-.007-.658-.194-.722-.46-.854A1.587 1.587 0 0 0 9 6z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" color="#000" font-weight="400" font-family="sans-serif" white-space="normal" overflow="visible" fill="#2e3436"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16.048">
<g color="#000" font-weight="400" font-family="sans-serif" white-space="normal" fill="#2e3436">
<path d="M10.94.048c-1.11 0-2 .914-2 2.017v4.776l-.854.853a.5.5 0 0 0-.016.691l.87.95V14c0 .657.234 1.21.623 1.562.388.353.897.499 1.39.485l-.027-1c-.28.008-.522-.073-.69-.225-.167-.152-.296-.386-.296-.822V9.14a.5.5 0 0 0-.131-.338l-.678-.74.662-.662a.5.5 0 0 0 .147-.353V2.065c0-.585.42-1.017 1-1.017zM5.94 5.048c-1.334 0-2.275.812-2.645 1.55a3.462 3.462 0 0 0-.36 1.448v.004l.024 4.988s-.016.292-.15.556c-.135.265-.203.454-.87.454h-1v2h1c1.334 0 2.276-.811 2.65-1.547.376-.736.37-1.444.37-1.444v-.007l-.023-5s.015-.291.146-.553c.132-.262.19-.45.858-.45h1v-2z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" overflow="visible"/>
<path d="M1.94 9.048v2h5v-2h-4zM12.953.048v1c.58 0 1 .432 1 1.017v4.983a.5.5 0 0 0 .147.353l.662.662-.678.74a.5.5 0 0 0-.13.338v4.86c0 .436-.128.67-.296.822-.168.152-.41.233-.69.225l-.028 1c.493.014 1.001-.132 1.39-.485s.623-.905.623-1.562V9.335l.87-.95a.5.5 0 0 0-.016-.69l-.854-.854V2.065c0-1.103-.89-2.017-2-2.017z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" overflow="visible"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
<path d="M5 1v3H3v2h2v4H3v2h2v3h2v-3h3v3h2v-3h2v-2h-2V6h2V4h-2V1h-2v3H7V1zm2 5h3v4H7z" color="#000" overflow="visible" fill="#2e3436"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16.06" height="16.048">
<g color="#000" font-weight="400" font-family="sans-serif" white-space="normal" fill="#2e3436">
<path d="M11 .048c-1.11 0-2 .914-2 2.017v4.776l-.854.853a.5.5 0 0 0-.015.691l.869.95V14c0 .657.234 1.21.623 1.562.389.353.897.499 1.39.485l-.027-1c-.28.008-.521-.073-.69-.225-.167-.152-.296-.386-.296-.822V9.14a.5.5 0 0 0-.13-.338l-.679-.74.663-.662A.5.5 0 0 0 10 7.048V2.065c0-.585.421-1.017 1-1.017zM0 9.048v6.98h2v-4.98h2.998s.29.013.553.144c.262.131.449.193.449.86v3.996h2V12.05c0-1.333-.813-2.276-1.55-2.646-.739-.37-1.448-.357-1.448-.357H5z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" overflow="visible"/>
<path d="M3 9.048v7h2v-7zM13.014.048v1c.579 0 1 .432 1 1.017v4.983a.5.5 0 0 0 .146.353l.662.662-.677.74a.5.5 0 0 0-.131.338v4.86c0 .436-.127.67-.295.822-.168.152-.41.233-.69.225l-.029 1c.493.014 1.002-.132 1.39-.485.39-.353.624-.905.624-1.562V9.335l.869-.95a.5.5 0 0 0-.016-.69l-.853-.854V2.065c0-1.103-.89-2.017-2-2.017z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" overflow="visible"/>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16.048">
<g color="#000" font-weight="400" font-family="sans-serif" white-space="normal" fill="#2e3436">
<path d="M10.94.048c-1.11 0-2 .914-2 2.017v4.776l-.854.853a.5.5 0 0 0-.016.691l.87.95V14c0 .657.234 1.21.623 1.562.388.353.897.499 1.39.485l-.027-1c-.28.008-.522-.073-.69-.225-.167-.152-.296-.386-.296-.822V9.14a.5.5 0 0 0-.131-.338l-.678-.74.662-.662a.5.5 0 0 0 .147-.353V2.065c0-.585.42-1.017 1-1.017zM4.94 9.048s-.71-.014-1.448.355c-.738.37-1.552 1.311-1.552 2.645v1h2v-1c0-.667.185-.725.447-.856.26-.13.549-.144.55-.144 0 0 .291.013.553.144.262.131.45.193.45.86v3.996h2V12.05c0-1.333-.813-2.276-1.551-2.646-.738-.37-1.447-.357-1.447-.357z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" overflow="visible"/>
<path d="M1.94 9.048v7h2v-7zM12.953.048v1c.58 0 1 .432 1 1.017v4.983a.5.5 0 0 0 .147.353l.662.662-.678.74a.5.5 0 0 0-.13.338v4.86c0 .436-.128.67-.296.822-.168.152-.41.233-.69.225l-.028 1c.493.014 1.001-.132 1.39-.485s.623-.905.623-1.562V9.335l.87-.95a.5.5 0 0 0-.016-.69l-.854-.854V2.065c0-1.103-.89-2.017-2-2.017z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" overflow="visible"/>
</g>
</svg>