svg-ultralight 0.34.0__py3-none-any.whl → 0.35.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of svg-ultralight might be problematic. Click here for more details.
- svg_ultralight/__init__.py +7 -5
- svg_ultralight/bounding_boxes/bound_helpers.py +38 -2
- svg_ultralight/constructors/__init__.py +1 -1
- svg_ultralight/constructors/new_element.py +2 -1
- svg_ultralight/query.py +0 -1
- svg_ultralight/strings/__init__.py +1 -1
- {svg_ultralight-0.34.0.dist-info → svg_ultralight-0.35.1.dist-info}/METADATA +1 -1
- {svg_ultralight-0.34.0.dist-info → svg_ultralight-0.35.1.dist-info}/RECORD +10 -10
- {svg_ultralight-0.34.0.dist-info → svg_ultralight-0.35.1.dist-info}/WHEEL +0 -0
- {svg_ultralight-0.34.0.dist-info → svg_ultralight-0.35.1.dist-info}/top_level.txt +0 -0
svg_ultralight/__init__.py
CHANGED
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from svg_ultralight.bounding_boxes.bound_helpers import (
|
|
8
|
+
bbox_dict,
|
|
9
|
+
cut_bbox,
|
|
10
|
+
new_bbox_rect,
|
|
8
11
|
new_bbox_union,
|
|
9
12
|
new_bound_union,
|
|
10
13
|
new_element_union,
|
|
11
|
-
cut_bbox,
|
|
12
14
|
pad_bbox,
|
|
13
|
-
|
|
14
|
-
new_bbox_rect,
|
|
15
|
+
parse_bound_element,
|
|
15
16
|
)
|
|
16
17
|
from svg_ultralight.bounding_boxes.supports_bounds import SupportsBounds
|
|
17
18
|
from svg_ultralight.bounding_boxes.type_bound_collection import BoundCollection
|
|
@@ -35,10 +36,10 @@ from svg_ultralight.main import new_svg_root, write_svg
|
|
|
35
36
|
from svg_ultralight.metadata import new_metadata
|
|
36
37
|
from svg_ultralight.nsmap import NSMAP, new_qname
|
|
37
38
|
from svg_ultralight.query import (
|
|
39
|
+
clear_svg_ultralight_cache,
|
|
38
40
|
get_bounding_box,
|
|
39
41
|
get_bounding_boxes,
|
|
40
42
|
pad_text,
|
|
41
|
-
clear_svg_ultralight_cache,
|
|
42
43
|
)
|
|
43
44
|
from svg_ultralight.root_elements import new_svg_root_around_bounds
|
|
44
45
|
from svg_ultralight.string_conversion import (
|
|
@@ -55,10 +56,10 @@ from svg_ultralight.transformations import (
|
|
|
55
56
|
)
|
|
56
57
|
|
|
57
58
|
__all__ = [
|
|
59
|
+
"NSMAP",
|
|
58
60
|
"BoundCollection",
|
|
59
61
|
"BoundElement",
|
|
60
62
|
"BoundingBox",
|
|
61
|
-
"NSMAP",
|
|
62
63
|
"PaddedText",
|
|
63
64
|
"SupportsBounds",
|
|
64
65
|
"bbox_dict",
|
|
@@ -86,6 +87,7 @@ __all__ = [
|
|
|
86
87
|
"new_svg_root_around_bounds",
|
|
87
88
|
"pad_bbox",
|
|
88
89
|
"pad_text",
|
|
90
|
+
"parse_bound_element",
|
|
89
91
|
"transform_element",
|
|
90
92
|
"update_element",
|
|
91
93
|
"write_pdf",
|
|
@@ -16,7 +16,10 @@ from svg_ultralight.bounding_boxes.type_padded_text import PaddedText
|
|
|
16
16
|
from svg_ultralight.constructors import new_element
|
|
17
17
|
|
|
18
18
|
if TYPE_CHECKING:
|
|
19
|
+
import os
|
|
20
|
+
|
|
19
21
|
from svg_ultralight.bounding_boxes.supports_bounds import SupportsBounds
|
|
22
|
+
from lxml import etree
|
|
20
23
|
|
|
21
24
|
_Matrix = tuple[float, float, float, float, float, float]
|
|
22
25
|
|
|
@@ -149,8 +152,10 @@ def pad_bbox(bbox: SupportsBounds, pad: float | tuple[float, ...]) -> BoundingBo
|
|
|
149
152
|
len = 4 : 0, 1, 2, 3
|
|
150
153
|
:return: a new bounding box with padding applied.
|
|
151
154
|
"""
|
|
152
|
-
|
|
153
|
-
return cut_bbox(
|
|
155
|
+
top, right, bottom, left = _expand_pad(pad)
|
|
156
|
+
return cut_bbox(
|
|
157
|
+
bbox, x=bbox.x - left, y=bbox.y - top, x2=bbox.x2 + right, y2=bbox.y2 + bottom
|
|
158
|
+
)
|
|
154
159
|
|
|
155
160
|
|
|
156
161
|
def bbox_dict(bbox: SupportsBounds) -> dict[str, float]:
|
|
@@ -169,3 +174,34 @@ def new_bbox_rect(bbox: BoundingBox, **kwargs: float | str) -> EtreeElement:
|
|
|
169
174
|
:param kwargs: additional attributes for the rect element.
|
|
170
175
|
"""
|
|
171
176
|
return new_element("rect", **bbox_dict(bbox), **kwargs)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def _get_view_box(elem: EtreeElement) -> tuple[float, float, float, float]:
|
|
180
|
+
"""Return the view box of an element as a tuple of floats.
|
|
181
|
+
|
|
182
|
+
:param elem: the element from which to extract the view box.
|
|
183
|
+
:return: a tuple of floats representing the view box.
|
|
184
|
+
|
|
185
|
+
This will work on svg files created by this library and some others. Not all svg
|
|
186
|
+
files have a viewBox attribute.
|
|
187
|
+
"""
|
|
188
|
+
view_box = elem.get("viewBox")
|
|
189
|
+
if view_box is None:
|
|
190
|
+
msg = "Element does not have a viewBox attribute."
|
|
191
|
+
raise ValueError(msg)
|
|
192
|
+
x, y, width, height = map(float, view_box.split())
|
|
193
|
+
return x, y, width, height
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def parse_bound_element(svg_fil: str | os.PathLike[str]) -> BoundElement:
|
|
197
|
+
"""Import an element as a BoundElement.
|
|
198
|
+
|
|
199
|
+
:param elem: the element to import.
|
|
200
|
+
:return: a BoundElement instance.
|
|
201
|
+
"""
|
|
202
|
+
tree = etree.parse(svg_fil)
|
|
203
|
+
root = tree.getroot()
|
|
204
|
+
elem = new_element("g")
|
|
205
|
+
elem.extend(list(root))
|
|
206
|
+
bbox = BoundingBox(*_get_view_box(root))
|
|
207
|
+
return BoundElement(elem, bbox)
|
|
@@ -20,7 +20,8 @@ from lxml import etree
|
|
|
20
20
|
from svg_ultralight.string_conversion import set_attributes
|
|
21
21
|
|
|
22
22
|
if TYPE_CHECKING:
|
|
23
|
-
from lxml.etree import QName
|
|
23
|
+
from lxml.etree import QName
|
|
24
|
+
from lxml.etree import _Element as EtreeElement # type: ignore
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
def new_element(tag: str | QName, **attributes: str | float) -> EtreeElement:
|
svg_ultralight/query.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
svg_ultralight/__init__.py,sha256=
|
|
1
|
+
svg_ultralight/__init__.py,sha256=wUc79mKsG6lGZ1xaYijyJ4Sm9lG5-5XgRArVsCI0niY,2554
|
|
2
2
|
svg_ultralight/animate.py,sha256=JSrBm-59BcNXDF0cGgl4-C89eBunjevZnwZxIWt48TU,1112
|
|
3
3
|
svg_ultralight/inkscape.py,sha256=M8yTxXOu4NlXnhsMycvEJiIDpnDeiZ_bZakJBM38ZoU,9152
|
|
4
4
|
svg_ultralight/layout.py,sha256=FgR45FsHax4xDjGkk9HEVW4OcwhtM8aqw2JUdZs_m7Q,12326
|
|
@@ -6,23 +6,23 @@ svg_ultralight/main.py,sha256=6oNkZfD27UMdP-oYqp5agS_IGcYb8NkUZwM9Zdyb3SA,7287
|
|
|
6
6
|
svg_ultralight/metadata.py,sha256=xR3ObM0QV7OQ90IKvfigR5B6e0JW6GGVGvTlL5NswWI,4211
|
|
7
7
|
svg_ultralight/nsmap.py,sha256=y63upO78Rr-JJT56RWWZuyrsILh6HPoY4GhbYnK1A0g,1244
|
|
8
8
|
svg_ultralight/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
svg_ultralight/query.py,sha256=
|
|
9
|
+
svg_ultralight/query.py,sha256=SufFumN11VTWloqjMpSuQ5eghAYx4ABQRIMXRJGs70o,9428
|
|
10
10
|
svg_ultralight/root_elements.py,sha256=pt9J6mPrnoTAZVF6vKTZoM_o947I8UCj6MbGcD2JUCk,2869
|
|
11
11
|
svg_ultralight/string_conversion.py,sha256=WEmpf75RJmJ2lfJluagAz2wPsz6wM8XvTEwkq4U0vEc,7353
|
|
12
12
|
svg_ultralight/transformations.py,sha256=7-6NNh6xZ45mM_933fMuQfRGpI7q9Qrt5qse9e6FUek,4036
|
|
13
13
|
svg_ultralight/unit_conversion.py,sha256=g07nhzXdjPvGcJmkhLdFbeDLrSmbI8uFoVgPo7G62Bg,9258
|
|
14
14
|
svg_ultralight/bounding_boxes/__init__.py,sha256=qUEn3r4s-1QNHaguhWhhaNfdP4tl_B6YEqxtiTFuzhQ,78
|
|
15
|
-
svg_ultralight/bounding_boxes/bound_helpers.py,sha256=
|
|
15
|
+
svg_ultralight/bounding_boxes/bound_helpers.py,sha256=V0BlBHDZ9xksVG5dGLPfcyRwPP3jSj6ODdtIpqT-FcI,7273
|
|
16
16
|
svg_ultralight/bounding_boxes/supports_bounds.py,sha256=fbHV6mGdeIVV3lS15vBKSrHiHKR7DMg4K5X__4LLmCE,4569
|
|
17
17
|
svg_ultralight/bounding_boxes/type_bound_collection.py,sha256=b89TM2UsdaeApyjTQeMbx_FG_WcCiLAImEiHiZ6EWPI,2600
|
|
18
18
|
svg_ultralight/bounding_boxes/type_bound_element.py,sha256=9RdxH8osOlAvPdWR0Ww9NsasHLPYFDs-MbydoV48x4E,2239
|
|
19
19
|
svg_ultralight/bounding_boxes/type_bounding_box.py,sha256=cDrMp6uwaA--KJIQS2puG10qh8n3TBmiscg-cfk1f3w,16149
|
|
20
20
|
svg_ultralight/bounding_boxes/type_padded_text.py,sha256=QA6PfeO_sQYc5pEXuyfyQ3lRUcZAc4B2BthWXpdt3qQ,14848
|
|
21
|
-
svg_ultralight/constructors/__init__.py,sha256=
|
|
22
|
-
svg_ultralight/constructors/new_element.py,sha256=
|
|
23
|
-
svg_ultralight/strings/__init__.py,sha256=
|
|
21
|
+
svg_ultralight/constructors/__init__.py,sha256=XLOInLhzMERWNnFAs-itMs-OZrBOpvQthZJ2T5duqBE,327
|
|
22
|
+
svg_ultralight/constructors/new_element.py,sha256=8nqmOEgt3j-aOVeRaMLFHqrwKg2Dm5w0AfuK9MP4ak8,3433
|
|
23
|
+
svg_ultralight/strings/__init__.py,sha256=BMGhF1pulscIgkiYvZLr6kPRR0L4lW0jUNFxkul4_EM,295
|
|
24
24
|
svg_ultralight/strings/svg_strings.py,sha256=RYKMxOHq9abbZyGcFqsElBGLrBX-EjjNxln3s_ibi30,1296
|
|
25
|
-
svg_ultralight-0.
|
|
26
|
-
svg_ultralight-0.
|
|
27
|
-
svg_ultralight-0.
|
|
28
|
-
svg_ultralight-0.
|
|
25
|
+
svg_ultralight-0.35.1.dist-info/METADATA,sha256=PRuCkp6xtBx_t8pkPEJR00TZRcb82eygu1EQTuROHaM,8867
|
|
26
|
+
svg_ultralight-0.35.1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
27
|
+
svg_ultralight-0.35.1.dist-info/top_level.txt,sha256=se-6yqM_0Yg5orJKvKWdjQZ4iR4G_EjhL7oRgju-fdY,15
|
|
28
|
+
svg_ultralight-0.35.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|