import re
from collections.abc import Mapping
from typing import Final

from _typeshed import StrOrBytesPath

routine_start_re: Final[re.Pattern[str]] = ...
routine_end_re: Final[re.Pattern[str]] = ...
function_start_re: Final[re.Pattern[str]] = ...
template_re: Final[re.Pattern[str]] = ...
named_re: Final[re.Pattern[str]] = ...
list_re: Final[re.Pattern[str]] = ...
item_re: Final[re.Pattern[str]] = ...
template_name_re: Final[re.Pattern[str]] = ...
include_src_re: Final[re.Pattern[str]] = ...

def parse_structure(astr: str) -> list[tuple[int, int]]: ...
def find_repl_patterns(astr: str) -> dict[str, str]: ...
def find_and_remove_repl_patterns(astr: str) -> tuple[str, dict[str, str]]: ...
def conv(astr: str) -> str: ...

#
def unique_key(adict: Mapping[str, object]) -> str: ...
def expand_sub(substr: str, names: dict[str, str]) -> str: ...
def process_str(allstr: str) -> str: ...

#
def resolve_includes(source: StrOrBytesPath) -> list[str]: ...
def process_file(source: StrOrBytesPath) -> str: ...
