diff --git a/stubs/reportlab/@tests/stubtest_allowlist.txt b/stubs/reportlab/@tests/stubtest_allowlist.txt index 3b3977c61..3d5537fa9 100644 --- a/stubs/reportlab/@tests/stubtest_allowlist.txt +++ b/stubs/reportlab/@tests/stubtest_allowlist.txt @@ -143,3 +143,6 @@ reportlab.graphics.utils.processGlyph reportlab.graphics.testdrawings reportlab.graphics.testshapes reportlab.graphics.barcode.test + +# named tuple docstring +reportlab.pdfbase.ttfonts.ShapeData.__doc__ diff --git a/stubs/reportlab/METADATA.toml b/stubs/reportlab/METADATA.toml index 1ecfcefaf..6159d1b17 100644 --- a/stubs/reportlab/METADATA.toml +++ b/stubs/reportlab/METADATA.toml @@ -1,4 +1,4 @@ -version = "4.2.5" +version = "4.3.1" # GitHub mirror of https://hg.reportlab.com/hg-public/reportlab/file upstream_repository = "https://github.com/MrBitBucket/reportlab-mirror" diff --git a/stubs/reportlab/reportlab/graphics/renderPM.pyi b/stubs/reportlab/reportlab/graphics/renderPM.pyi index 94d881b74..41974b755 100644 --- a/stubs/reportlab/reportlab/graphics/renderPM.pyi +++ b/stubs/reportlab/reportlab/graphics/renderPM.pyi @@ -72,6 +72,8 @@ class PMCanvas: def setLineJoin(self, join) -> None: ... strokeWidth: Incomplete def setLineWidth(self, width) -> None: ... + def stringWidth(self, text, fontName: Incomplete | None = None, fontSize: Incomplete | None = None): ... + def shapedText(self, text) -> tuple[Incomplete, Incomplete]: ... def drawToPMCanvas( d: Drawing, diff --git a/stubs/reportlab/reportlab/graphics/renderbase.pyi b/stubs/reportlab/reportlab/graphics/renderbase.pyi index e6276ea10..bd2c377b2 100644 --- a/stubs/reportlab/reportlab/graphics/renderbase.pyi +++ b/stubs/reportlab/reportlab/graphics/renderbase.pyi @@ -25,7 +25,7 @@ class Renderer: def drawNode(self, node) -> None: ... def getStateValue(self, key): ... def fillDerivedValues(self, node) -> None: ... - def drawNodeDispatcher(self, node) -> None: ... + def drawNodeDispatcher(self, anode) -> None: ... def drawGroup(self, group) -> None: ... def drawWedge(self, wedge) -> None: ... def drawPath(self, path) -> None: ... diff --git a/stubs/reportlab/reportlab/graphics/shapes.pyi b/stubs/reportlab/reportlab/graphics/shapes.pyi index 886ca06f3..e2fd9b268 100644 --- a/stubs/reportlab/reportlab/graphics/shapes.pyi +++ b/stubs/reportlab/reportlab/graphics/shapes.pyi @@ -125,11 +125,11 @@ class Group(Shape): def insert(self, i: int, n: Shape | UserNode, name: str | None = None) -> None: ... def expandUserNodes(self) -> Group: ... def copy(self) -> Self: ... - def rotate(self, theta: float) -> None: ... - def translate(self, dx: float, dy: float) -> None: ... - def scale(self, sx: float, sy: float) -> None: ... - def skew(self, kx: float, ky: float) -> None: ... - def shift(self, x: float, y: float) -> None: ... + def rotate(self, theta: float, cx: float = 0, cy: float = 0) -> None: ... + def translate(self, dx: float, dy: float = 0) -> None: ... + def scale(self, sx: float, sy: float = 1) -> None: ... + def skew(self, kx: float, ky: float = 0) -> None: ... + def shift(self, x: float, y: float = 0) -> None: ... # NOTE: This changes the object to a Drawing, rather than returning # a new one, which is not ideal... def asDrawing(self, width: float, height: float) -> None: ... diff --git a/stubs/reportlab/reportlab/graphics/transform.pyi b/stubs/reportlab/reportlab/graphics/transform.pyi index 3a43b2c10..4cb456df9 100644 --- a/stubs/reportlab/reportlab/graphics/transform.pyi +++ b/stubs/reportlab/reportlab/graphics/transform.pyi @@ -1,9 +1,9 @@ def nullTransform(): ... -def translate(dx, dy): ... -def scale(sx, sy): ... -def rotate(angle): ... -def skewX(angle): ... -def skewY(angle): ... +def translate(dx: float, dy: float = 0): ... +def scale(sx: float, sy: float = 1): ... +def rotate(angle: float, cx: float = 0, cy: float = 0): ... +def skewX(angle: float): ... +def skewY(angle: float): ... def mmult(A, B): ... def inverse(A): ... def zTransformPoint(A, v): ... diff --git a/stubs/reportlab/reportlab/lib/rl_accel.pyi b/stubs/reportlab/reportlab/lib/rl_accel.pyi index f408eda38..1b6971778 100644 --- a/stubs/reportlab/reportlab/lib/rl_accel.pyi +++ b/stubs/reportlab/reportlab/lib/rl_accel.pyi @@ -1,7 +1,7 @@ def fp_str(*a): ... def unicode2T1(utext, fonts): ... def instanceStringWidthT1(self, text, size, encoding: str = "utf8"): ... -def instanceStringWidthTTF(self, text, size, encoding: str = "utf-8"): ... +def instanceStringWidthTTF(self, text, size, encoding: str = "utf8"): ... def hex32(i): ... def add32(x, y): ... def calcChecksum(data): ... diff --git a/stubs/reportlab/reportlab/lib/rl_safe_eval.pyi b/stubs/reportlab/reportlab/lib/rl_safe_eval.pyi index 9b451f3d0..8f50c931b 100644 --- a/stubs/reportlab/reportlab/lib/rl_safe_eval.pyi +++ b/stubs/reportlab/reportlab/lib/rl_safe_eval.pyi @@ -10,7 +10,6 @@ eval_debug: int strTypes: tuple[type[bytes], type[str]] isPy39: bool isPy313: bool -haveNameConstant: bool class BadCode(ValueError): ... @@ -33,7 +32,6 @@ class UntrustedAstTransformer(ast.NodeTransformer): def gen_unpack_spec(self, tpl): ... def protect_unpack_sequence(self, target, value): ... def gen_unpack_wrapper(self, node, target, ctx: str = "store"): ... - def gen_none_node(self): ... def gen_lambda(self, args, body): ... def gen_del_stmt(self, name_to_del): ... def transform_slice(self, slice_): ... diff --git a/stubs/reportlab/reportlab/lib/testutils.pyi b/stubs/reportlab/reportlab/lib/testutils.pyi index 15f4bd0bb..436e93274 100644 --- a/stubs/reportlab/reportlab/lib/testutils.pyi +++ b/stubs/reportlab/reportlab/lib/testutils.pyi @@ -1,7 +1,7 @@ import unittest from _typeshed import Incomplete from configparser import ConfigParser -from typing import Final +from typing import Final, Literal __version__: Final[str] @@ -11,6 +11,11 @@ def isWritable(D): ... RL_HOME: Incomplete testsFolder: Incomplete +DEJAVUSANS: tuple[ + Literal["DejaVuSans"], Literal["DejaVuSans-Bold"], Literal["DejaVuSans-Oblique"], Literal["DejaVuSans-BoldOblique"] +] = ... + +def haveDejaVu() -> bool: ... def setOutDir(name): ... def mockUrlRead(name): ... def outputfile(fn): ... diff --git a/stubs/reportlab/reportlab/pdfbase/pdfmetrics.pyi b/stubs/reportlab/reportlab/pdfbase/pdfmetrics.pyi index 01b6bb27b..dfe023a09 100644 --- a/stubs/reportlab/reportlab/pdfbase/pdfmetrics.pyi +++ b/stubs/reportlab/reportlab/pdfbase/pdfmetrics.pyi @@ -51,6 +51,7 @@ class Font: encoding: Incomplete encName: Incomplete substitutionFonts: Incomplete + isShaped: bool def __init__(self, name, faceName, encName, substitutionFonts: Incomplete | None = None) -> None: ... def stringWidth(self, text, size, encoding: str = "utf8"): ... def addObjects(self, doc) -> None: ... diff --git a/stubs/reportlab/reportlab/pdfbase/ttfonts.pyi b/stubs/reportlab/reportlab/pdfbase/ttfonts.pyi index 81ad3b659..231744908 100644 --- a/stubs/reportlab/reportlab/pdfbase/ttfonts.pyi +++ b/stubs/reportlab/reportlab/pdfbase/ttfonts.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete from typing import Final, NamedTuple +from typing_extensions import Self from reportlab.pdfbase import pdfdoc, pdfmetrics @@ -142,9 +143,42 @@ class TTFont: encoding: Incomplete state: Incomplete def __init__( - self, name, filename, validate: int = 0, subfontIndex: int = 0, asciiReadable: Incomplete | None = None + self, + name, + filename, + validate: int = 0, + subfontIndex: int = 0, + asciiReadable: Incomplete | None = None, + shaped: Incomplete | None = None, ) -> None: ... def stringWidth(self, text, size, encoding: str = "utf8"): ... def splitString(self, text, doc, encoding: str = "utf-8"): ... def getSubsetInternalName(self, subset, doc): ... def addObjects(self, doc) -> None: ... + @property + def hbFace(self) -> Incomplete | None: ... + def hbFont(self, fontSize: float = 10): ... + @property + def isShaped(self) -> bool: ... + @isShaped.setter + def isShaped(self, v) -> None: ... + def pdfScale(self, v): ... + def unregister(self) -> None: ... + +class ShapedFragWord(list[Incomplete]): ... + +class ShapeData(NamedTuple): + cluster: int + x_advance: float + y_advance: float + x_offset: float + y_offset: float + width: float + +class ShapedStr(str): + def __new__(cls, s, shapeData: ShapeData | None = None) -> Self: ... + def __radd__(self, other) -> Self: ... + +def freshTTFont(ttfn, ttfpath, **kwds) -> TTFont: ... +def makeShapedFragWord(w, K: list[Incomplete] = [], V: list[Incomplete] = []) -> type[ShapedFragWord]: ... +def shapeFragWord(w, features: Incomplete | None = None): ... diff --git a/stubs/reportlab/reportlab/pdfgen/canvas.pyi b/stubs/reportlab/reportlab/pdfgen/canvas.pyi index 20e6e8e18..0f33d5a61 100644 --- a/stubs/reportlab/reportlab/pdfgen/canvas.pyi +++ b/stubs/reportlab/reportlab/pdfgen/canvas.pyi @@ -304,3 +304,4 @@ class Canvas(_PDFColorSetter): @property def acroForm(self): ... def drawBoundary(self, sb, x1: float, y1: float, width: float, height: float) -> None: ... + def shapedText(self, text) -> tuple[Incomplete, Incomplete]: ... diff --git a/stubs/reportlab/reportlab/rl_config.pyi b/stubs/reportlab/reportlab/rl_config.pyi index 7f5d4fe7d..965f6d0d9 100644 --- a/stubs/reportlab/reportlab/rl_config.pyi +++ b/stubs/reportlab/reportlab/rl_config.pyi @@ -69,3 +69,4 @@ defCWRF: float T1SearchPath: Incomplete TTFSearchPath: Incomplete CMapSearchPath: Incomplete +shapedFontGlob: list[Incomplete] diff --git a/stubs/reportlab/reportlab/rl_settings.pyi b/stubs/reportlab/reportlab/rl_settings.pyi index fba1461fd..da3f2cdec 100644 --- a/stubs/reportlab/reportlab/rl_settings.pyi +++ b/stubs/reportlab/reportlab/rl_settings.pyi @@ -70,3 +70,4 @@ defCWRF: Final[float] T1SearchPath: Final[Incomplete] TTFSearchPath: Final[Incomplete] CMapSearchPath: Final[Incomplete] +shapedFontGlob: Final[Incomplete | None]