# Copyright (c) 2026 Chris Pressey, Cat's Eye Technologies
# This file is distributed under an MIT license. See LICENSES/ directory.
# SPDX-License-Identifier: LicenseRef-MIT-X-Feedmark
from collections import OrderedDict
from datetime import datetime
from typing import Any, Iterator, Mapping, TypeAlias, TypedDict
from marko.block import LinkRefDefs
from marko.element import Element
from marko.md_renderer import MarkdownRenderer
JSONObject: TypeAlias = dict[str, Any]
Refdex: TypeAlias = JSONObject
RefdexMapping: TypeAlias = Mapping[str, Mapping[str, Any]]
Properties: TypeAlias = OrderedDict[str, str | list[str]]
class _ImageRecordBase(TypedDict):
description: str
source: str
class ImageRecord(_ImageRecordBase, total=False):
link: str
def rewrite_link_ref_defs(
refdex: RefdexMapping, link_ref_defs: LinkRefDefs
) -> LinkRefDefs: ...
class PropertyCollection:
renderer: MarkdownRenderer
properties: Properties
def __init__(self) -> None: ...
def add_property(self, kind: str, key: str, value: str) -> None: ...
def parse_property(self, listitem_text: str) -> tuple[str, str, str]: ...
def add_property_listitem(self, element: Element) -> None: ...
class Document(PropertyCollection):
filename: str
title: str
sections: list[Section]
link_ref_defs: LinkRefDefs
def __init__(
self,
*args: Any,
renderer: MarkdownRenderer | None = None,
filename: str | None = None,
**kwargs: Any,
) -> None: ...
def set_title(self, title: str) -> None: ...
@property
def header_comment(self) -> str: ...
def has_header_comment(self) -> bool: ...
def add_to_header_comment(self, element: Element) -> None: ...
@property
def preamble(self) -> str: ...
def add_to_preamble(self, element: Element) -> None: ...
def has_preamble(self) -> bool: ...
def rewrite_link_ref_defs(self, refdex: RefdexMapping) -> None: ...
def global_link_ref_defs(self) -> LinkRefDefs: ...
def to_json_data(
self,
htmlize: bool = False,
ordered: bool = False,
link_ref_defs: LinkRefDefs | None = None,
) -> dict[str, Any]: ...
class Section(PropertyCollection):
document: Document | None
title: str
images: list[ImageRecord]
def __init__(
self,
title: str,
*args: Any,
renderer: MarkdownRenderer | None = None,
**kwargs: Any,
) -> None: ...
def collect_image_children(self, element: Element) -> Iterator[ImageRecord]: ...
def add_image_paragraph(self, element: Element) -> None: ...
@property
def body(self) -> str: ...
def add_to_body(self, element: Element) -> None: ...
@property
def publication_date(self) -> datetime: ...
@property
def anchor(self) -> str: ...
def to_json_data(
self,
htmlize: bool = False,
ordered: bool = False,
link_ref_defs: LinkRefDefs | None = None,
) -> dict[str, Any]: ...