diff --git a/pyrightconfig.stricter.json b/pyrightconfig.stricter.json index aa71da99ff9d..90317862373e 100644 --- a/pyrightconfig.stricter.json +++ b/pyrightconfig.stricter.json @@ -33,6 +33,7 @@ "stubs/dateparser", "stubs/docutils", "stubs/Flask", + "stubs/fpdf2", "stubs/html5lib", "stubs/httplib2", "stubs/humanfriendly", diff --git a/stubs/fpdf2/METADATA.toml b/stubs/fpdf2/METADATA.toml new file mode 100644 index 000000000000..bcb78f17fb41 --- /dev/null +++ b/stubs/fpdf2/METADATA.toml @@ -0,0 +1 @@ +version = "2.4.*" diff --git a/stubs/fpdf2/fpdf/__init__.pyi b/stubs/fpdf2/fpdf/__init__.pyi new file mode 100644 index 000000000000..2ee9dd6704d3 --- /dev/null +++ b/stubs/fpdf2/fpdf/__init__.pyi @@ -0,0 +1,10 @@ +from pathlib import Path + +from .fpdf import FPDF as FPDF, TitleStyle as TitleStyle +from .html import HTML2FPDF as HTML2FPDF, HTMLMixin as HTMLMixin +from .template import Template as Template + +__license__: str +__version__: str +FPDF_VERSION: str +FPDF_FONT_DIR: Path diff --git a/stubs/fpdf2/fpdf/actions.pyi b/stubs/fpdf2/fpdf/actions.pyi new file mode 100644 index 000000000000..69feb0a2bf21 --- /dev/null +++ b/stubs/fpdf2/fpdf/actions.pyi @@ -0,0 +1,26 @@ +from abc import ABC +from typing import Any + +class Action(ABC): + def dict_as_string(self) -> None: ... + +class NamedAction(Action): + action_name: Any + def __init__(self, action_name) -> None: ... + def dict_as_string(self): ... + +class GoToAction(Action): + dest: Any + def __init__(self, dest) -> None: ... + def dict_as_string(self): ... + +class GoToRemoteAction(Action): + file: Any + dest: Any + def __init__(self, file, dest) -> None: ... + def dict_as_string(self): ... + +class LaunchAction(Action): + file: Any + def __init__(self, file) -> None: ... + def dict_as_string(self): ... diff --git a/stubs/fpdf2/fpdf/deprecation.pyi b/stubs/fpdf2/fpdf/deprecation.pyi new file mode 100644 index 000000000000..044aa1cf795d --- /dev/null +++ b/stubs/fpdf2/fpdf/deprecation.pyi @@ -0,0 +1,5 @@ +from types import ModuleType + +class WarnOnDeprecatedModuleAttributes(ModuleType): + def __getattr__(self, name): ... + def __setattr__(self, name, value) -> None: ... diff --git a/stubs/fpdf2/fpdf/errors.pyi b/stubs/fpdf2/fpdf/errors.pyi new file mode 100644 index 000000000000..637a55e25159 --- /dev/null +++ b/stubs/fpdf2/fpdf/errors.pyi @@ -0,0 +1,9 @@ +from typing import Any + +class FPDFException(Exception): ... + +class FPDFPageFormatException(FPDFException): + argument: Any + unknown: Any + one: Any + def __init__(self, argument, unknown: bool = ..., one: bool = ...) -> None: ... diff --git a/stubs/fpdf2/fpdf/fonts.pyi b/stubs/fpdf2/fpdf/fonts.pyi new file mode 100644 index 000000000000..5a894fff6278 --- /dev/null +++ b/stubs/fpdf2/fpdf/fonts.pyi @@ -0,0 +1,4 @@ +from typing import Any + +courier: Any +fpdf_charwidths: Any diff --git a/stubs/fpdf2/fpdf/fpdf.pyi b/stubs/fpdf2/fpdf/fpdf.pyi new file mode 100644 index 000000000000..9bcad7986236 --- /dev/null +++ b/stubs/fpdf2/fpdf/fpdf.pyi @@ -0,0 +1,260 @@ +import datetime +from collections.abc import Callable, Generator +from enum import IntEnum +from pathlib import Path +from typing import Any, NamedTuple +from typing_extensions import Literal + +from .actions import Action +from .util import _Unit + +_Orientation = Literal["", "portrait", "P", "landscape", "L"] +_Format = Literal["", "a3", "A3", "a4", "A4", "a5", "A5", "letter", "Letter", "legal", "Legal"] +_FontStyle = Literal["", "B", "I"] +_FontStyles = Literal["", "B", "I", "U", "BU", "UB", "BI", "IB", "IU", "UI", "BIU", "BUI", "IBU", "IUB", "UBI", "UIB"] +PAGE_FORMATS: dict[_Format, tuple[float, float]] + +class DocumentState(IntEnum): + UNINITIALIZED: int + READY: int + GENERATING_PAGE: int + CLOSED: int + +class Annotation(NamedTuple): + type: str + x: int + y: int + width: int + height: int + contents: str | None = ... + link: str | int | None = ... + alt_text: str | None = ... + action: Action | None = ... + +class TitleStyle(NamedTuple): + font_family: str | None = ... + font_style: str | None = ... + font_size_pt: int | None = ... + color: int | tuple[int, int, int] | None = ... + underline: bool = ... + t_margin: int | None = ... + l_margin: int | None = ... + b_margin: int | None = ... + +class ToCPlaceholder(NamedTuple): + render_function: Callable[[FPDF, Any], object] + start_page: int + y: int + pages: int = ... + +class SubsetMap: + def __init__(self, identities: list[int]) -> None: ... + def pick(self, unicode: int): ... + def dict(self): ... + +def get_page_format(format: _Format | tuple[float, float], k: float | None = ...) -> tuple[float, float]: ... +def load_cache(filename: Path): ... + +class FPDF: + MARKDOWN_BOLD_MARKER: str + MARKDOWN_ITALICS_MARKER: str + MARKDOWN_UNDERLINE_MARKER: str + offsets: Any + page: int + n: int + buffer: Any + pages: Any + state: Any + fonts: Any + font_files: Any + diffs: Any + images: Any + annots: Any + links: Any + in_footer: int + lasth: int + current_font: Any + font_family: str + font_style: str + font_size_pt: int + font_stretching: int + str_alias_nb_pages: str + underline: int + draw_color: str + fill_color: str + text_color: str + ws: int + angle: int + font_cache_dir: Any + xmp_metadata: Any + image_filter: str + page_duration: int + page_transition: Any + struct_builder: Any + section_title_styles: Any + core_fonts: Any + core_fonts_encoding: str + font_aliases: Any + k: float + def_orientation: Any + font_size: Any + c_margin: Any + line_width: float + compress: bool + pdf_version: str + + x: float + y: float + t_margin: float + r_margin: float + l_margin: float + def __init__( + self, + orientation: _Orientation = ..., + unit: _Unit | float = ..., + format: _Format | tuple[float, float] = ..., + font_cache_dir: bool = ..., + ) -> None: ... + @property + def unifontsubset(self): ... + @property + def epw(self): ... + @property + def eph(self): ... + def set_margin(self, margin: float) -> None: ... + def set_margins(self, left: float, top: float, right: float = ...) -> None: ... + def set_left_margin(self, margin: float) -> None: ... + def set_top_margin(self, margin: float) -> None: ... + def set_right_margin(self, margin: float) -> None: ... + auto_page_break: Any + b_margin: Any + page_break_trigger: Any + def set_auto_page_break(self, auto: bool, margin: float = ...) -> None: ... + zoom_mode: Any + layout_mode: Any + def set_display_mode(self, zoom, layout: str = ...) -> None: ... + def set_compression(self, compress) -> None: ... + title: Any + def set_title(self, title: str) -> None: ... + lang: Any + def set_lang(self, lang: str) -> None: ... + subject: Any + def set_subject(self, subject: str) -> None: ... + author: Any + def set_author(self, author: str) -> None: ... + keywords: Any + def set_keywords(self, keywords: str) -> None: ... + creator: Any + def set_creator(self, creator: str) -> None: ... + producer: Any + def set_producer(self, producer: str) -> None: ... + creation_date: Any + def set_creation_date(self, date: datetime.datetime | None = ...) -> None: ... + def set_xmp_metadata(self, xmp_metadata) -> None: ... + def set_doc_option(self, opt, value) -> None: ... + def set_image_filter(self, image_filter) -> None: ... + def alias_nb_pages(self, alias: str = ...) -> None: ... + def open(self) -> None: ... + def close(self) -> None: ... + def add_page( + self, + orientation: _Orientation = ..., + format: _Format | tuple[float, float] = ..., + same: bool = ..., + duration: int = ..., + transition: Any | None = ..., + ) -> None: ... + def header(self) -> None: ... + def footer(self) -> None: ... + def page_no(self): ... + def set_draw_color(self, r, g: int = ..., b: int = ...) -> None: ... + def set_fill_color(self, r, g: int = ..., b: int = ...) -> None: ... + def set_text_color(self, r, g: int = ..., b: int = ...) -> None: ... + def get_string_width(self, s, normalized: bool = ..., markdown: bool = ...): ... + def set_line_width(self, width: float) -> None: ... + def line(self, x1: float, y1: float, x2: float, y2: float) -> None: ... + def polyline(self, point_list, fill: bool = ..., polygon: bool = ...) -> None: ... + def polygon(self, point_list, fill: bool = ...) -> None: ... + def dashed_line(self, x1, y1, x2, y2, dash_length: int = ..., space_length: int = ...) -> None: ... + def rect(self, x, y, w, h, style: Any | None = ...) -> None: ... + def ellipse(self, x, y, w, h, style: Any | None = ...) -> None: ... + def circle(self, x, y, r, style: Any | None = ...) -> None: ... + def add_font(self, family: str, style: _FontStyle = ..., fname: str | None = ..., uni: bool = ...) -> None: ... + def set_font(self, family: str | None = ..., style: _FontStyles = ..., size: int = ...) -> None: ... + def set_font_size(self, size: int) -> None: ... + def set_stretching(self, stretching) -> None: ... + def add_link(self): ... + def set_link(self, link, y: int = ..., x: int = ..., page: int = ..., zoom: str = ...) -> None: ... + def link(self, x, y, w, h, link, alt_text: Any | None = ...) -> None: ... + def text_annotation(self, x, y, text) -> None: ... + def add_action(self, action, x, y, w, h) -> None: ... + def text(self, x, y, txt: str = ...) -> None: ... + def rotate(self, angle, x: Any | None = ..., y: Any | None = ...) -> None: ... + def rotation(self, angle, x: Any | None = ..., y: Any | None = ...) -> Generator[None, None, None]: ... + @property + def accept_page_break(self): ... + def cell( + self, + w: float | None = ..., + h: float | None = ..., + txt: str = ..., + border: bool | Literal[0, 1] | str = ..., + ln: int = ..., + align: str = ..., + fill: bool = ..., + link: str = ..., + center: bool = ..., + markdown: bool = ..., + ): ... + def will_page_break(self, height): ... + def multi_cell( + self, + w: float, + h: float | None = ..., + txt: str = ..., + border: bool | Literal[0, 1] | str = ..., + align: str = ..., + fill: bool = ..., + split_only: bool = ..., + link: str = ..., + ln: int = ..., + max_line_height: Any | None = ..., + markdown: bool = ..., + ): ... + def write(self, h: Any | None = ..., txt: str = ..., link: str = ...) -> None: ... + def image( + self, + name, + x: float | None = ..., + y: float | None = ..., + w: float = ..., + h: float = ..., + type: str = ..., + link: str = ..., + title: str | None = ..., + alt_text: str | None = ..., + ): ... + def ln(self, h: Any | None = ...) -> None: ... + def get_x(self) -> float: ... + def set_x(self, x: float) -> None: ... + def get_y(self) -> float: ... + def set_y(self, y: float) -> None: ... + def set_xy(self, x: float, y: float) -> None: ... + def output(self, name: str = ..., dest: str = ...): ... + def normalize_text(self, txt): ... + def interleaved2of5(self, txt, x, y, w: int = ..., h: int = ...) -> None: ... + def code39(self, txt, x, y, w: float = ..., h: int = ...) -> None: ... + def rect_clip(self, x, y, w, h) -> Generator[None, None, None]: ... + def unbreakable(self) -> Generator[Any, None, None]: ... + def insert_toc_placeholder(self, render_toc_function, pages: int = ...) -> None: ... + def set_section_title_styles( + self, + level0, + level1: Any | None = ..., + level2: Any | None = ..., + level3: Any | None = ..., + level4: Any | None = ..., + level5: Any | None = ..., + level6: Any | None = ..., + ) -> None: ... + def start_section(self, name, level: int = ...) -> None: ... diff --git a/stubs/fpdf2/fpdf/html.pyi b/stubs/fpdf2/fpdf/html.pyi new file mode 100644 index 000000000000..2b1436240e3c --- /dev/null +++ b/stubs/fpdf2/fpdf/html.pyi @@ -0,0 +1,74 @@ +from html.parser import HTMLParser +from typing import Any + +LOGGER: Any +BULLET_WIN1252: str +DEFAULT_HEADING_SIZES: Any +COLOR_DICT: Any + +def px2mm(px): ... +def color_as_decimal(color: str = ...): ... + +class HTML2FPDF(HTMLParser): + pdf: Any + image_map: Any + li_tag_indent: Any + table_line_separators: Any + ul_bullet_char: Any + style: Any + href: str + align: str + page_links: Any + font_stack: Any + indent: int + bullet: Any + font_size: Any + font_color: Any + table: Any + table_col_width: Any + table_col_index: Any + td: Any + th: Any + tr: Any + thead: Any + tfoot: Any + tr_index: Any + theader: Any + tfooter: Any + theader_out: bool + table_row_height: int + heading_level: Any + heading_sizes: Any + def __init__( + self, + pdf, + image_map: Any | None = ..., + li_tag_indent: int = ..., + table_line_separators: bool = ..., + ul_bullet_char=..., + heading_sizes: Any | None = ..., + **_, + ): ... + def width2unit(self, length): ... + def handle_data(self, data) -> None: ... + def box_shadow(self, w, h, bgcolor) -> None: ... + def output_table_header(self) -> None: ... + tfooter_out: bool + def output_table_footer(self) -> None: ... + def output_table_sep(self) -> None: ... + font_face: Any + table_offset: Any + def handle_starttag(self, tag, attrs) -> None: ... + tbody: Any + def handle_endtag(self, tag) -> None: ... + h: Any + def set_font(self, face: Any | None = ..., size: Any | None = ...) -> None: ... + def set_style(self, tag: Any | None = ..., enable: bool = ...) -> None: ... + def set_text_color(self, r: Any | None = ..., g: int = ..., b: int = ...) -> None: ... + def put_link(self, txt) -> None: ... + def render_toc(self, pdf, outline) -> None: ... + def error(self, message) -> None: ... + +class HTMLMixin: + HTML2FPDF_CLASS: Any + def write_html(self, text, *args, **kwargs) -> None: ... diff --git a/stubs/fpdf2/fpdf/image_parsing.pyi b/stubs/fpdf2/fpdf/image_parsing.pyi new file mode 100644 index 000000000000..ba17b8a8df11 --- /dev/null +++ b/stubs/fpdf2/fpdf/image_parsing.pyi @@ -0,0 +1,6 @@ +from typing import Any + +SUPPORTED_IMAGE_FILTERS: Any + +def load_image(filename): ... +def get_img_info(img, image_filter: str = ...): ... diff --git a/stubs/fpdf2/fpdf/outline.pyi b/stubs/fpdf2/fpdf/outline.pyi new file mode 100644 index 000000000000..0df21fb1a58b --- /dev/null +++ b/stubs/fpdf2/fpdf/outline.pyi @@ -0,0 +1,32 @@ +from typing import Any, NamedTuple + +from .structure_tree import StructElem +from .syntax import Destination, PDFObject + +class OutlineSection(NamedTuple): + name: str + level: str + page_number: int + dest: Destination + struct_elem: StructElem | None = ... + +class OutlineItemDictionary(PDFObject): + title: str + parent: Any | None + prev: Any | None + next: Any | None + first: Any | None + last: Any | None + count: int + dest: str | None + struct_elem: StructElem | None + def __init__(self, title: str, dest: str | None = ..., struct_elem: StructElem | None = ..., **kwargs) -> None: ... + +class OutlineDictionary(PDFObject): + type: str + first: Any | None + last: Any | None + count: int + def __init__(self, **kwargs) -> None: ... + +def serialize_outline(sections, first_object_id: int = ..., fpdf: Any | None = ...): ... diff --git a/stubs/fpdf2/fpdf/recorder.pyi b/stubs/fpdf2/fpdf/recorder.pyi new file mode 100644 index 000000000000..6401da5362ed --- /dev/null +++ b/stubs/fpdf2/fpdf/recorder.pyi @@ -0,0 +1,13 @@ +from typing import Any + +class FPDFRecorder: + pdf: Any + accept_page_break: bool + def __init__(self, pdf, accept_page_break: bool = ...) -> None: ... + def __getattr__(self, name): ... + def rewind(self) -> None: ... + def replay(self) -> None: ... + +class CallRecorder: + def __init__(self, func, calls) -> None: ... + def __call__(self, *args, **kwargs): ... diff --git a/stubs/fpdf2/fpdf/structure_tree.pyi b/stubs/fpdf2/fpdf/structure_tree.pyi new file mode 100644 index 000000000000..b8bc849b3d19 --- /dev/null +++ b/stubs/fpdf2/fpdf/structure_tree.pyi @@ -0,0 +1,52 @@ +from typing import Any, NamedTuple + +from .syntax import PDFObject + +class MarkedContent(NamedTuple): + page_object_id: int + struct_parents_id: int + struct_type: str + mcid: int | None = ... + title: str | None = ... + alt_text: str | None = ... + +class NumberTree(PDFObject): + nums: Any + def __init__(self, **kwargs) -> None: ... + def serialize(self, fpdf: Any | None = ..., obj_dict: Any | None = ...): ... + +class StructTreeRoot(PDFObject): + type: str + parent_tree: Any + k: Any + def __init__(self, **kwargs) -> None: ... + +class StructElem(PDFObject): + type: str + s: Any + p: Any + k: Any + pg: Any + t: Any + alt: Any + def __init__( + self, + struct_type: str, + parent: PDFObject, + kids: list[int] | list[StructElem], + page: PDFObject | None = ..., + title: str | None = ..., + alt: str | None = ..., + **kwargs, + ) -> None: ... + +class StructureTreeBuilder: + struct_tree_root: Any + doc_struct_elem: Any + struct_elem_per_mc: Any + def __init__(self) -> None: ... + def add_marked_content(self, marked_content) -> None: ... + def next_mcid_for_page(self, page_object_id): ... + def empty(self): ... + def serialize(self, first_object_id: int = ..., fpdf: Any | None = ...): ... + def assign_ids(self, n): ... diff --git a/stubs/fpdf2/fpdf/syntax.pyi b/stubs/fpdf2/fpdf/syntax.pyi new file mode 100644 index 000000000000..54788032540a --- /dev/null +++ b/stubs/fpdf2/fpdf/syntax.pyi @@ -0,0 +1,45 @@ +from abc import ABC +from typing import Any, List + +def clear_empty_fields(d): ... +def create_dictionary_string( + dict_, + open_dict: str = ..., + close_dict: str = ..., + field_join: str = ..., + key_value_join: str = ..., + has_empty_fields: bool = ..., +): ... +def create_list_string(list_): ... +def iobj_ref(n): ... +def create_stream(stream): ... + +class PDFObject: + def __init__(self, id: Any | None = ...) -> None: ... + @property + def id(self): ... + @id.setter + def id(self, n) -> None: ... + @property + def ref(self): ... + def serialize(self, fpdf: Any | None = ..., obj_dict: Any | None = ...): ... + +def camel_case(property_name): ... + +class PDFString(str): + def serialize(self): ... + +class PDFArray(List[Any]): + def serialize(self): ... + +class Destination(ABC): + def as_str(self, pdf: Any | None = ...) -> None: ... + +class DestinationXYZ(Destination): + page: Any + x: Any + y: Any + zoom: Any + page_as_obj_id: Any + def __init__(self, page, x: int = ..., y: int = ..., zoom: str = ..., page_as_obj_id: bool = ...) -> None: ... + def as_str(self, pdf: Any | None = ...): ... diff --git a/stubs/fpdf2/fpdf/template.pyi b/stubs/fpdf2/fpdf/template.pyi new file mode 100644 index 000000000000..7badad2577dc --- /dev/null +++ b/stubs/fpdf2/fpdf/template.pyi @@ -0,0 +1,35 @@ +from typing import Any + +class FlexTemplate: + pdf: Any + splitting_pdf: Any + handlers: Any + texts: Any + def __init__(self, pdf, elements: Any | None = ...) -> None: ... + elements: Any + keys: Any + def load_elements(self, elements) -> None: ... + def parse_csv(self, infile, delimiter: str = ..., decimal_sep: str = ..., encoding: Any | None = ...): ... + def __setitem__(self, name, value) -> None: ... + set: Any + def __contains__(self, name): ... + def __getitem__(self, name): ... + def split_multicell(self, text, element_name): ... + def render(self, offsetx: float = ..., offsety: float = ..., rotate: float = ..., scale: float = ...): ... + +class Template(FlexTemplate): + def __init__( + self, + infile: Any | None = ..., + elements: Any | None = ..., + format: str = ..., + orientation: str = ..., + unit: str = ..., + title: str = ..., + author: str = ..., + subject: str = ..., + creator: str = ..., + keywords: str = ..., + ) -> None: ... + def add_page(self) -> None: ... + def render(self, outfile: Any | None = ..., dest: Any | None = ...) -> None: ... # type: ignore diff --git a/stubs/fpdf2/fpdf/transitions.pyi b/stubs/fpdf2/fpdf/transitions.pyi new file mode 100644 index 000000000000..c1d692275e78 --- /dev/null +++ b/stubs/fpdf2/fpdf/transitions.pyi @@ -0,0 +1,58 @@ +from abc import ABC +from typing import Any + +class Transition(ABC): + def dict_as_string(self) -> None: ... + +class SplitTransition(Transition): + dimension: Any + direction: Any + def __init__(self, dimension, direction) -> None: ... + def dict_as_string(self): ... + +class BlindsTransition(Transition): + dimension: Any + def __init__(self, dimension) -> None: ... + def dict_as_string(self): ... + +class BoxTransition(Transition): + direction: Any + def __init__(self, direction) -> None: ... + def dict_as_string(self): ... + +class WipeTransition(Transition): + direction: Any + def __init__(self, direction) -> None: ... + def dict_as_string(self): ... + +class DissolveTransition(Transition): + def dict_as_string(self): ... + +class GlitterTransition(Transition): + direction: Any + def __init__(self, direction) -> None: ... + def dict_as_string(self): ... + +class FlyTransition(Transition): + dimension: Any + direction: Any + def __init__(self, dimension, direction: Any | None = ...) -> None: ... + def dict_as_string(self): ... + +class PushTransition(Transition): + direction: Any + def __init__(self, direction) -> None: ... + def dict_as_string(self): ... + +class CoverTransition(Transition): + direction: Any + def __init__(self, direction) -> None: ... + def dict_as_string(self): ... + +class UncoverTransition(Transition): + direction: Any + def __init__(self, direction) -> None: ... + def dict_as_string(self): ... + +class FadeTransition(Transition): + def dict_as_string(self): ... diff --git a/stubs/fpdf2/fpdf/ttfonts.pyi b/stubs/fpdf2/fpdf/ttfonts.pyi new file mode 100644 index 000000000000..84990f260693 --- /dev/null +++ b/stubs/fpdf2/fpdf/ttfonts.pyi @@ -0,0 +1,72 @@ +from typing import Any + +GF_WORDS: Any +GF_SCALE: Any +GF_MORE: Any +GF_XYSCALE: Any +GF_TWOBYTWO: Any + +def sub32(x, y): ... +def calcChecksum(data): ... + +class TTFontFile: + maxStrLenRead: int + def __init__(self) -> None: ... + filename: Any + charWidths: Any + glyphPos: Any + charToGlyph: Any + tables: Any + otables: Any + ascent: int + descent: int + version: Any + def getMetrics(self, file) -> None: ... + numTables: Any + searchRange: Any + entrySelector: Any + rangeShift: Any + def readTableDirectory(self) -> None: ... + def get_table_pos(self, tag): ... + def seek(self, pos) -> None: ... + def skip(self, delta) -> None: ... + def seek_table(self, tag, offset_in_table: int = ...): ... + def read_tag(self): ... + def read_short(self): ... + def read_ushort(self): ... + def read_ulong(self): ... + def get_ushort(self, pos): ... + @staticmethod + def splice(stream, offset, value): ... + def get_chunk(self, pos, length): ... + def get_table(self, tag): ... + def add(self, tag, data) -> None: ... + sFamilyClass: int + sFamilySubClass: int + name: Any + familyName: Any + styleName: Any + fullName: Any + uniqueFontID: Any + unitsPerEm: Any + bbox: Any + capHeight: Any + stemV: Any + italicAngle: Any + underlinePosition: Any + underlineThickness: Any + flags: int + def extractInfo(self) -> None: ... + maxUni: int + codeToGlyph: Any + glyphdata: Any + def makeSubset(self, file, subset): ... + def getGlyphs(self, originalGlyphIdx, nonlocals) -> None: ... + defaultWidth: Any + def getHMTX(self, numberOfHMetrics, numGlyphs, glyphToChar, scale) -> None: ... + def getHMetric(self, numberOfHMetrics, gid): ... + def getLOCA(self, indexToLocFormat, numGlyphs) -> None: ... + maxUniChar: int + def getCMAP4(self, unicode_cmap_offset, glyphToChar, charToGlyph) -> None: ... + def getCMAP12(self, unicode_cmap_offset, glyphToChar, charToGlyph) -> None: ... + def endTTFile(self, stm): ... diff --git a/stubs/fpdf2/fpdf/util.pyi b/stubs/fpdf2/fpdf/util.pyi new file mode 100644 index 000000000000..0455c3f2a6b8 --- /dev/null +++ b/stubs/fpdf2/fpdf/util.pyi @@ -0,0 +1,18 @@ +from collections.abc import Iterable +from typing import Any, Tuple +from typing_extensions import Literal + +_Unit = Literal["pt", "mm", "cm", "in"] + +def substr(s, start, length: int = ...): ... +def enclose_in_parens(s): ... +def escape_parens(s): ... +def b(s): ... +def get_scale_factor(unit: _Unit | float) -> float: ... +def convert_unit( + # to_convert has a recursive type + to_convert: float | Iterable[float | Iterable[Any]], + old_unit: str | float, + new_unit: str | float, +) -> float | Tuple[float, ...]: ... +def dochecks() -> None: ...