from html.parser import HTMLParser
from typing import Any, List, Tuple

from botocore.docs.bcdoc.restdoc import ReSTDocument

PRIORITY_PARENT_TAGS: Tuple[str, ...] = ...
OMIT_NESTED_TAGS: Tuple[str, ...] = ...
OMIT_SELF_TAGS: Tuple[str, ...] = ...
HTML_BLOCK_DISPLAY_TAGS: Tuple[str, ...] = ...

class DocStringParser(HTMLParser):
    def __init__(self, doc: Any) -> None: ...
    def reset(self) -> None: ...
    def feed(self, data: Any) -> None: ...
    def close(self) -> None: ...
    def handle_starttag(self, tag: Any, attrs: Any) -> None: ...
    def handle_endtag(self, tag: Any) -> None: ...
    def handle_data(self, data: Any) -> None: ...

class HTMLTree:
    def __init__(self, doc: ReSTDocument) -> None: ...
    def add_tag(self, tag: Any, attrs: Any = ..., is_start: bool = ...) -> None: ...
    def add_data(self, data: Any) -> None: ...
    def write(self) -> None: ...

class Node:
    def __init__(self, parent: Any = ...) -> None: ...
    def write(self, doc: ReSTDocument) -> None: ...

class StemNode(Node):
    def __init__(self, parent: Any = ...) -> None: ...
    def add_child(self, child: Any) -> None: ...
    def write(self, doc: ReSTDocument) -> None: ...
    def is_whitespace(self) -> bool: ...
    def startswith_whitespace(self) -> List[Any]: ...
    def endswith_whitespace(self) -> List[Any]: ...
    def lstrip(self) -> None: ...
    def rstrip(self) -> None: ...
    def collapse_whitespace(self) -> None: ...

class TagNode(StemNode):
    def __init__(self, tag: str, attrs: Any = ..., parent: Any = ...) -> None: ...
    def write(self, doc: ReSTDocument, next_child: Any = ...) -> None: ...
    def collapse_whitespace(self) -> None: ...

class DataNode(Node):
    def __init__(self, data: Any, parent: Any = ...) -> None: ...
    @property
    def data(self) -> str: ...
    def is_whitespace(self) -> bool: ...
    def startswith_whitespace(self) -> bool: ...
    def endswith_whitespace(self) -> bool: ...
    def lstrip(self) -> None: ...
    def rstrip(self) -> None: ...
    def collapse_whitespace(self) -> None: ...
    def write(self, doc: ReSTDocument) -> None: ...
