o
    >hWS                     @  s
  d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlmZ erhd dl m!Z! g dZ"e#dZ$G dd dZ%	 dddZ&dddZ'dS )    )annotationsN)TYPE_CHECKINGAnyBinaryIOCallableClassVarMappingSequence   )util)build_preprocessors)build_block_parser)build_treeprocessors)build_inlinepatterns)build_postprocessors)	Extension)to_html_stringto_xhtml_string)BLOCK_LEVEL_ELEMENTS)Element)MarkdownmarkdownmarkdownFromFileMARKDOWNc                   @  s   e Zd ZU dZdZeedZded< 	 dd Z	d/d	d
Z
d0ddZd1ddZd2ddZd/ddZd3ddZd4d"d#Zd5d%d&Z	'	'	'd6d7d-d.Zd'S )8r   a	  
    A parser which converts Markdown to HTML.

    Attributes:
        Markdown.tab_length (int): The number of spaces which correspond to a single tab. Default: `4`.
        Markdown.ESCAPED_CHARS (list[str]): List of characters which get the backslash escape treatment.
        Markdown.block_level_elements (list[str]): List of HTML tags which get treated as block-level elements.
            See [`markdown.util.BLOCK_LEVEL_ELEMENTS`][] for the full list of elements.
        Markdown.registeredExtensions (list[Extension]): List of extensions which have called
            [`registerExtension`][markdown.Markdown.registerExtension] during setup.
        Markdown.doc_tag (str): Element used to wrap document. Default: `div`.
        Markdown.stripTopLevelTags (bool): Indicates whether the `doc_tag` should be removed. Default: 'True'.
        Markdown.references (dict[str, tuple[str, str]]): A mapping of link references found in a parsed document
             where the key is the reference name and the value is a tuple of the URL and title.
        Markdown.htmlStash (util.HtmlStash): The instance of the `HtmlStash` used by an instance of this class.
        Markdown.output_formats (dict[str, Callable[xml.etree.ElementTree.Element]]): A mapping of known output
             formats by name and their respective serializers. Each serializer must be a callable which accepts an
            [`Element`][xml.etree.ElementTree.Element] and returns a `str`.
        Markdown.output_format (str): The output format set by
            [`set_output_format`][markdown.Markdown.set_output_format].
        Markdown.serializer (Callable[xml.etree.ElementTree.Element]): The serializer set by
            [`set_output_format`][markdown.Markdown.set_output_format].
        Markdown.preprocessors (util.Registry): A collection of [`preprocessors`][markdown.preprocessors].
        Markdown.parser (blockparser.BlockParser): A collection of [`blockprocessors`][markdown.blockprocessors].
        Markdown.inlinePatterns (util.Registry): A collection of [`inlinepatterns`][markdown.inlinepatterns].
        Markdown.treeprocessors (util.Registry): A collection of [`treeprocessors`][markdown.treeprocessors].
        Markdown.postprocessors (util.Registry): A collection of [`postprocessors`][markdown.postprocessors].

    div)htmlxhtmlz-ClassVar[dict[str, Callable[[Element], str]]]output_formatsc                 K  s   | dd| _g d| _	 t | _g | _d| _d| _| 	  i | _
t | _| j| dg | di d | | d	d
 |   dS )a  
        Creates a new Markdown instance.

        Keyword Arguments:
            extensions (list[Extension | str]): A list of extensions.

                If an item is an instance of a subclass of [`markdown.extensions.Extension`][],
                the instance will be used as-is. If an item is of type `str`, it is passed
                to [`build_extension`][markdown.Markdown.build_extension] with its corresponding
                `extension_configs` and the returned instance  of [`markdown.extensions.Extension`][]
                is used.
            extension_configs (dict[str, dict[str, Any]]): Configuration settings for extensions.
            output_format (str): Format of output. Supported formats are:

                * `xhtml`: Outputs XHTML style tags. Default.
                * `html`: Outputs HTML style tags.
            tab_length (int): Length of tabs in the source. Default: `4`

        
tab_length   )\`*_{}[]()>#+-.! T
extensionsextension_configs)r1   configsoutput_formatr   N)getr   ESCAPED_CHARSr   copyblock_level_elementsregisteredExtensionsdocTypestripTopLevelTagsbuild_parser
referencesr   	HtmlStash	htmlStashregisterExtensionsset_output_formatreset)selfkwargs rE   m/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/markdown/core.py__init__X   s   



zMarkdown.__init__returnc                 C  s6   t | | _t| | _t| | _t| | _t| | _	| S )a0  
        Build the parser from the various parts.

        Assigns a value to each of the following attributes on the class instance:

        * **`Markdown.preprocessors`** ([`Registry`][markdown.util.Registry]) -- A collection of
          [`preprocessors`][markdown.preprocessors].
        * **`Markdown.parser`** ([`BlockParser`][markdown.blockparser.BlockParser]) -- A collection of
          [`blockprocessors`][markdown.blockprocessors].
        * **`Markdown.inlinePatterns`** ([`Registry`][markdown.util.Registry]) -- A collection of
          [`inlinepatterns`][markdown.inlinepatterns].
        * **`Markdown.treeprocessors`** ([`Registry`][markdown.util.Registry]) -- A collection of
          [`treeprocessors`][markdown.treeprocessors].
        * **`Markdown.postprocessors`** ([`Registry`][markdown.util.Registry]) -- A collection of
          [`postprocessors`][markdown.postprocessors].

        This method could be redefined in a subclass to build a custom parser which is made up of a different
        combination of processors and patterns.

        )
r   preprocessorsr   parserr   inlinePatternsr   treeprocessorsr   postprocessors)rC   rE   rE   rF   r<      s   




zMarkdown.build_parserr1   Sequence[Extension | str]r3   Mapping[str, dict[str, Any]]c                 C  s   |D ]=}t |tr| |||i }t |tr+||  td|jj	|jj
f  q|dur?td|jj	|jj
tj	tj
q| S )a  
        Load a list of extensions into an instance of the `Markdown` class.

        Arguments:
            extensions (list[Extension | str]): A list of extensions.

                If an item is an instance of a subclass of [`markdown.extensions.Extension`][],
                the instance will be used as-is. If an item is of type `str`, it is passed
                to [`build_extension`][markdown.Markdown.build_extension] with its corresponding `configs` and the
                returned instance  of [`markdown.extensions.Extension`][] is used.
            configs (dict[str, dict[str, Any]]): Configuration settings for extensions.

        z&Successfully loaded extension "%s.%s".Nz*Extension "{}.{}" must be of type: "{}.{}")
isinstancestrbuild_extensionr5   r   extendMarkdownloggerdebug	__class__
__module____name__	TypeErrorformat)rC   r1   r3   extrE   rE   rF   r@      s&   


zMarkdown.registerExtensionsext_namerQ   Mapping[str, Any]r   c           	   
     s$  t |} fddt D }|r|d  }|di |S d v r( ddn df\ }zt }td   W n t	yX } zd  }|f|j
dd	  |_
 d	}~ww |ret||di |S z	|jdi |W S  ty } z|j
d }d
 |f }|f|j
dd	  |_
 d	}~ww )a  
        Build extension from a string name, then return an instance using the given `configs`.

        Arguments:
            ext_name: Name of extension as a string.
            configs: Configuration settings for extension.

        Returns:
            An instance of the extension with the given configuration settings.

        First attempt to load an entry point. The string name must be registered as an entry point in the
        `markdown.extensions` group which points to a subclass of the [`markdown.extensions.Extension`][] class.
        If multiple distributions have registered the same name, the first one found is returned.

        If no entry point is found, assume dot notation (`path.to.module:ClassName`). Load the specified class and
        return an instance. If no class is specified, import the module and call a `makeExtension` function and return
        the [`markdown.extensions.Extension`][] instance returned by that function.
        c                   s   g | ]	}|j  kr|qS rE   )name).0epr\   rE   rF   
<listcomp>   s    z,Markdown.build_extension.<locals>.<listcomp>r   :r
   r0   z,Successfully imported extension module "%s".zFailed loading extension "%s".Nz%Failed to initiate extension '%s': %srE   )dictr   get_installed_extensionsloadsplit	importlibimport_modulerT   rU   ImportErrorargsgetattrmakeExtensionAttributeError)	rC   r\   r3   entry_pointsr[   
class_namemoduleemessagerE   ra   rF   rR      s<    

zMarkdown.build_extension	extensionc                 C  s   | j | | S )a  
        Register an extension as having a resettable state.

        Arguments:
            extension: An instance of the extension to register.

        This should get called once by an extension during setup. A "registered" extension's
        `reset` method is called by [`Markdown.reset()`][markdown.Markdown.reset]. Not all extensions have or need a
        resettable state, and so it should not be assumed that all extensions are "registered."

        )r9   appendrC   rt   rE   rE   rF   registerExtension   s   zMarkdown.registerExtensionc                 C  s6   | j   | j  | jD ]}t|dr|  q| S )z
        Resets all state variables to prepare the parser instance for new input.

        Called once upon creation of a class instance. Should be called manually between calls
        to [`Markdown.convert`][markdown.Markdown.convert].
        rB   )r?   rB   r=   clearr9   hasattrrv   rE   rE   rF   rB     s   



zMarkdown.resetrZ   c              
   C  s   |  d| _z
| j| j | _W | S  tyC } z%t| j }|  d| jdd	| d f }|f|j
dd  |_
 d}~ww )z
        Set the output format for the class instance.

        Arguments:
            format: Must be a known value in `Markdown.output_formats`.

        145z+Invalid Output Format: "%s". Use one of %s."z", "r
   N)lowerrstripr4   r   
serializerKeyErrorlistkeyssortjoinrk   )rC   rZ   rr   valid_formatsrs   rE   rE   rF   rA     s    	zMarkdown.set_output_formattagr   boolc                 C  s"   t |tr| d| jv S dS )z
        Check if the given `tag` is a block level HTML tag.

        Returns `True` for any string listed in `Markdown.block_level_elements`. A `tag` which is
        not a string always returns `False`.

        /F)rP   rQ   r|   r}   r8   )rC   r   rE   rE   rF   is_block_level.  s   
zMarkdown.is_block_levelsourcec              
   C  s^  |  sdS zt|}W n ty  } z| jd7  _ d}~ww |d| _| jD ]	}|| j| _q*| j	| j
 }| jD ]}||}|durM|}q@| |}| jrz!|d| j t| j d }|d| j }	|||	   }W n( ty } z|  d| j rd}n	td	|   |W Y d}~nd}~ww | jD ]}
|
|}q|  S )
a  
        Convert a Markdown string to a string in the specified output format.

        Arguments:
            source: Markdown formatted text as Unicode or ASCII string.

        Returns:
            A string in the specified output format.

        Markdown parsing takes place in five steps:

        1. A bunch of [`preprocessors`][markdown.preprocessors] munge the input text.
        2. A [`BlockParser`][markdown.blockparser.BlockParser] parses the high-level structural elements of the
           pre-processed text into an [`ElementTree`][xml.etree.ElementTree.ElementTree] object.
        3. A bunch of [`treeprocessors`][markdown.treeprocessors] are run against the
           [`ElementTree`][xml.etree.ElementTree.ElementTree] object. One such `treeprocessor`
           ([`markdown.treeprocessors.InlineProcessor`][]) runs [`inlinepatterns`][markdown.inlinepatterns]
           against the [`ElementTree`][xml.etree.ElementTree.ElementTree] object, parsing inline markup.
        4. Some [`postprocessors`][markdown.postprocessors] are run against the text after the
           [`ElementTree`][xml.etree.ElementTree.ElementTree] object has been serialized into text.
        5. The output is returned as a string.

        r0   z/. -- Note: Markdown only accepts Unicode input!N
z<%s>   z</%s>z<%s />z4Markdown failed to strip top-level tags. Document=%r)striprQ   UnicodeDecodeErrorreasonrg   linesrI   runrJ   parseDocumentgetrootrL   r~   r;   indexdoc_taglenrindex
ValueErrorendswithrM   )rC   r   rr   preproottreeprocessornewRootoutputstartendpprE   rE   rF   convert;  sX   





zMarkdown.convertNinputstr | BinaryIO | Noner   encoding
str | Nonec           	      C  s   |pd}|r$t |trtj|d|d}nt||}| }|  ntj }|	d}| 
|}|r`t |trNtj|d|dd}|| |  | S t|}||dd}|| | S ||d}tjj| | S )	a  
        Converts a Markdown file and returns the HTML as a Unicode string.

        Decodes the file using the provided encoding (defaults to `utf-8`),
        passes the file content to markdown, and outputs the HTML to either
        the provided stream or the file with provided name, using the same
        encoding as the source file. The
        [`xmlcharrefreplace`](https://docs.python.org/3/library/codecs.html#error-handlers)
        error handler is used when encoding the output.

        **Note:** This is the only place that decoding and encoding of Unicode
        takes place in Python-Markdown.  (All other code is Unicode-in /
        Unicode-out.)

        Arguments:
            input: File object or path. Reads from `stdin` if `None`.
            output: File object or path. Writes to `stdout` if `None`.
            encoding: Encoding of input and output files. Defaults to `utf-8`.

        zutf-8r)moder   u   ﻿wxmlcharrefreplace)r   errors)r   )rP   rQ   codecsopen	getreaderreadclosesysstdinlstripr   write	getwriterencodestdoutbuffer)	rC   r   r   r   
input_filetextr   output_filewriterrE   rE   rF   convertFile  s4   








zMarkdown.convertFile)rH   r   )r1   rN   r3   rO   rH   r   )r\   rQ   r3   r]   rH   r   )rt   r   rH   r   )rZ   rQ   rH   r   )r   r   rH   r   )r   rQ   rH   rQ   )NNN)r   r   r   r   r   r   rH   r   )rX   rW   __qualname____doc__r   r   r   r   __annotations__rG   r<   r@   rR   rw   rB   rA   r   r   r   rE   rE   rE   rF   r   .   s(   
 
+

$
5



Kr   r   rQ   rD   r   rH   c                 K  s   t di |}|| S )a5  
    Convert a markdown string to HTML and return HTML as a Unicode string.

    This is a shortcut function for [`Markdown`][markdown.Markdown] class to cover the most
    basic use case.  It initializes an instance of [`Markdown`][markdown.Markdown], loads the
    necessary extensions and runs the parser on the given text.

    Arguments:
        text: Markdown formatted text as Unicode or ASCII string.

    Keyword arguments:
        **kwargs: Any arguments accepted by the Markdown class.

    Returns:
        A string in the specified output format.

    NrE   )r   r   )r   rD   mdrE   rE   rF   r     s   
r   c                  K  s8   t di | }|| dd| dd| dd dS )aE  
    Read Markdown text from a file and write output to a file or a stream.

    This is a shortcut function which initializes an instance of [`Markdown`][markdown.Markdown],
    and calls the [`convertFile`][markdown.Markdown.convertFile] method rather than
    [`convert`][markdown.Markdown.convert].

    Keyword arguments:
        input (str | BinaryIO): A file name or readable object.
        output (str | BinaryIO): A file name or writable object.
        encoding (str): Encoding of input and output.
        **kwargs: Any arguments accepted by the `Markdown` class.

    r   Nr   r   rE   )r   r   r5   )rD   r   rE   rE   rF   r     s
   

r   )r   rQ   rD   r   rH   rQ   )rD   r   )(
__future__r   r   r   loggingrh   typingr   r   r   r   r   r   r	   r0   r   rI   r   blockprocessorsr   rL   r   inlinepatternsr   rM   r   r1   r   serializersr   r   r   xml.etree.ElementTreer   __all__	getLoggerrT   r   r   r   rE   rE   rE   rF   <module>   s4   $
   
	