File: //lib/python3/dist-packages/sphinx/util/__pycache__/nodes.cpython-310.pyc
o
�$�a?Y � @ s d Z ddlZddlZddlmZmZmZmZmZm Z m
Z
mZmZm
Z
mZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd lmZ dd
lmZ ddlmZ erpddl m!Z! dd
l"m#Z# ddl$m%Z% ddl&m'Z' e�(e)�Z*e�+dej,�Z-e-Z.G dd� d�Z/dede0fdd�Z1d�dede2de0fdd�Z3deddfdd�Z4ej5ej6ej7ej8fZ9dede:fdd�Z;dede:fdd �Z<ej6ej7ej=ej>fZ?ej@fZAejBfZCd!edeeee0f fd"d#�ZDdede e0 fd$d%�ZEdede e2 fd&d'�ZFd�ded(edee fd)d*�ZGdede e fd+d,�ZHd!edeeeed- f fd.d/�ZId0ed1edede0fd2d3�ZJdede0fd4d5�ZKd6e0dee:e0e0f fd7d8�ZLg d9�ZMd:e0d;e0deee0e0e0e0e e0 f fd<d=�ZNd>d?d@e
e0 dAe0dBejOdCedDee0 dejOfdEdF�ZPdGe0de0fdHdI�ZQe�+dJ�ZRe�+dK�ZSi dLdM�dNdO�dPdQ�dRdS�dTdU�dVdW�dXdY�dZdY�d[d\�d]dO�d^d_�d`da�dbdU�dcdd�dedf�dgdW�dhdW�i didj�dkdl�dmdn�dodl�dpdU�dqdd�drdW�dsdt�dud\�dvdw�dxdl�dydz�d{dt�d|d}�d~d�d�dj��ZTd�d�d�d�d�d��ZU d�d�d�d�ejOd�e0d�e0de0f
d�d��ZVdejWd�e0de e fd�d��ZX d�d>d?d�e0d�e0d;e0d�e
eee f d�e0dejYfd�d��ZZd�ededdfd�d��Z[d�ed�e2deddfd�d��Z\d�ed�eddfd�d��Z]ej^ej_ej`ej@ej>ejaejbfZcdede:fd�d��Zdd�ed�d�ddfd�d��Zed�edefd�d��Zfefej_gdS )�z�
sphinx.util.nodes
~~~~~~~~~~~~~~~~~
Docutils node-related utility functions for Sphinx.
:copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
� N)�
TYPE_CHECKING�Any�Callable�Iterable�List�Optional�Set�Tuple�Type�Union�cast)�nodes)�Element�Node)� Directive)�Inliner)�
StringList)�addnodes)�__)�logging)�Builder)�
IndexEntry)�BuildEnvironment)�Tagsz^(.+?)\s*(?<!\x00)<([^<]*?)>$c @ sN e Zd ZdZdee deddfdd�Zdedefd d
�Z dedefdd�Z
dS )
�NodeMatchera% A helper class for Node.traverse().
It checks that the given node is an instance of the specified node-classes and
has the specified node-attributes.
For example, following example searches ``reference`` node having ``refdomain``
and ``reftype`` attributes::
matcher = NodeMatcher(nodes.reference, refdomain='std', reftype='citation')
doctree.traverse(matcher)
# => [<reference ...>, <reference ...>, ...]
A special value ``typing.Any`` matches any kind of node-attributes. For example,
following example searches ``reference`` node having ``refdomain`` attributes::
from typing import Any
matcher = NodeMatcher(nodes.reference, refdomain=Any)
doctree.traverse(matcher)
# => [<reference ...>, <reference ...>, ...]
�node_classes�attrs�returnNc O s || _ || _d S �N)�classesr )�selfr r � r! �3/usr/lib/python3/dist-packages/sphinx/util/nodes.py�__init__>