§
    èŽ’j8%  ã                  ó"  — d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
 ddlmZmZmZ ddlmZmZmZmZ erdd	lmZ g d
¢Zd„ eeefD ¦   «         Zd*d„Z	 	 d+d,d„Zd-d.d„Zd-d/d„Z	 	 d+d0d!„Z	 	 d+d1d"„Z	 	 d+d2d'„Zd3d4d(„Z G d)„ d e¦  «        Z dS )5zB
Python Frontmatter: Parse and manage posts with YAML frontmatter
é    )ÚannotationsN)ÚPathLike)ÚTYPE_CHECKINGÚIterableÚTextIOé   )ÚJSONHandlerÚTOMLHandlerÚYAMLHandler)Úcan_openÚis_readableÚis_writableÚu)ÚBaseHandler)ÚparseÚloadÚloadsÚdumpÚdumpsc                ó&   — g | ]}|® |¦   «         ‘ŒS ©N© )Ú.0ÚHandlers     úBC:\Projects\DSCons\.venv\Lib\site-packages\frontmatter\__init__.pyú
<listcomp>r      s.   € ð ð ð àØÐð €G�I„IàÐÐó    ÚtextÚstrÚhandlersúIterable[BaseHandler]ÚreturnúBaseHandler | Nonec                óB   — |D ]}|                      | ¦  «        r|c S ŒdS )a  
    Figure out which handler to use, based on metadata.
    Returns a handler instance or None.

    ``text`` should be unicode text about to be parsed.

    ``handlers`` is a dictionary where keys are opening delimiters
    and values are handler instances.
    N)Údetect)r   r    Úhandlers      r   Údetect_formatr'      s<   € ð ð ð ˆØ�>Š>˜$ÑÔð 	ØˆNˆNˆNð	ð ˆ4r   úutf-8Úencodingr&   ÚdefaultsÚobjectútuple[dict[str, object], str]c                ó®  — t          | |¦  «                             ¦   «         } |                     ¦   «         }|pt          | t          ¦  «        }|€|| fS 	 |                     | ¦  «        \  }}n# t          $ r || fcY S w xY w|                     |¦  «        }t          |t          ¦  «        r| 
                    |¦  «         ||                     ¦   «         fS )aî  
    Parse text with frontmatter, return metadata and content.
    Pass in optional metadata defaults as keyword args.

    If frontmatter is not found, returns an empty metadata dictionary
    (or defaults) and original text content.

    .. testsetup:: *

        >>> import frontmatter

    .. doctest::

        >>> with open('tests/yaml/hello-world.txt') as f:
        ...     metadata, content = frontmatter.parse(f.read())
        >>> print(metadata['title'])
        Hello, world!

    )r   ÚstripÚcopyr'   r    ÚsplitÚ
ValueErrorr   Ú
isinstanceÚdictÚupdate)r   r)   r&   r*   ÚmetadataÚfmÚcontentÚfm_datas           r   r   r   1   sä   € õ4 ˆT�8ÑÔ×"Ò"Ñ$Ô$€Dð �}Š}‰Œ€Hð Ð6� t­XÑ6Ô6€GØ€Ø˜ˆ~ÐðØ—m’m DÑ)Ô)‰ˆˆGˆGøÝð ð ð à˜ˆ~ÐÐÐðøøøð
 �lŠl˜2ÑÔ€GÝ�'�4Ñ Ô ð !Ø�Š˜Ñ Ô Ð à�W—]’]‘_”_Ð$Ð$s   ÁA. Á.A?Á>A?ÚfdúTextIO | PathLike[str] | strÚboolc                ó
  — t          | ¦  «        r|                      ¦   «         }nPt          | ¦  «        r?t          | d|¬¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   ndS t	          ||¦  «        S )a  
    Check if a file-like object or filename has a frontmatter,
    return True if exists, False otherwise.

    If it contains a frontmatter but it is empty, return True as well.

    .. doctest::

        >>> frontmatter.check('tests/yaml/hello-world.txt')
        True

    Úr©r)   NF)r   Úreadr   ÚopenÚchecks)r9   r)   r   Úfs       r   ÚcheckrC   d   s»   € õ �2�„ð 	Ø�wŠw‰yŒyˆˆå	�"‰Œð Ý�"�c HÐ-Ñ-Ô-ð 	°Ø—6’6‘8”8ˆDð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	øð
 ˆuå�$˜Ñ!Ô!Ð!ó   ÁA'Á'A+Á.A+c                óT   — t          | |¦  «        } t          | t          ¦  «        dk    S )a<  
    Check if a text (binary or unicode) has a frontmatter,
    return True if exists, False otherwise.

    If it contains a frontmatter but it is empty, return True as well.

    .. doctest::

        >>> with open('tests/yaml/hello-world.txt') as f:
        ...     frontmatter.checks(f.read())
        True

    N)r   r'   r    )r   r)   s     r   rA   rA      s(   € õ ˆT�8ÑÔ€DÝ˜�xÑ(Ô(¨DÒ0Ð0r   ústr | io.IOBase | pathlib.PathÚPostc                óp  — t          | ¦  «        r|                      ¦   «         }nmt          | ¦  «        r?t          | d|¬¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   nt	          dt          | ¦  «        › �¦  «        ‚|pt          |t          ¦  «        }t          |||fi |¤ŽS )a%  
    Load and parse a file-like object or filename,
    return a :py:class:`post <frontmatter.Post>`.

    .. doctest::

        >>> post = frontmatter.load('tests/yaml/hello-world.txt')
        >>> with open('tests/yaml/hello-world.txt') as f:
        ...     post = frontmatter.load(f)

    r=   r>   Nú Cannot open filename using type )	r   r?   r   r@   r1   Útyper'   r    r   )r9   r)   r&   r*   r   rB   s         r   r   r   ‘   só   € õ" �2�„ð HØ�wŠw‰yŒyˆˆå	�"‰Œð HÝ�"�c HÐ-Ñ-Ô-ð 	°Ø—6’6‘8”8ˆDð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	øõ ÐF½DÀ¹H¼HÐFÐFÑGÔGÐGàÐ6� t­XÑ6Ô6€GÝ��x Ð5Ð5¨HÐ5Ð5Ð5rD   c                ó�   — t          | |¦  «        } |pt          | t          ¦  «        }t          | ||fi |¤Ž\  }}t	          ||fi |¤ŽS )zÛ
    Parse text (binary or unicode) and return a :py:class:`post <frontmatter.Post>`.

    .. doctest::

        >>> with open('tests/yaml/hello-world.txt') as f:
        ...     post = frontmatter.loads(f.read())

    )r   r'   r    r   rG   )r   r)   r&   r*   r5   r7   s         r   r   r   °   s]   € õ ˆT�8ÑÔ€DØÐ6� t­XÑ6Ô6€GÝ˜d H¨gÐBÐB¸ÐBÐBÑ€HˆgÝ�˜Ð-Ð- HÐ-Ð-Ð-r   Úpostústr | PathLike[str] | TextIOÚkwargsÚNonec                óJ  — t          | |fi |¤Ž}t          |¦  «        r|                     |¦  «         dS t          |¦  «        rBt	          |d|¬¦  «        5 }|                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS t          dt          |¦  «        › �¦  «        ‚)aO  
    Serialize :py:class:`post <frontmatter.Post>` to a string and write to a file-like object.
    Text will be encoded on the way out (utf-8 by default).

    ::

        >>> from io import StringIO
        >>> post = frontmatter.load('tests/yaml/hello-world.txt')
        >>> f = StringIO()
        >>> frontmatter.dump(post, f)
        >>> print(f.getvalue())
        ---
        layout: post
        title: Hello, world!
        ---
        <BLANKLINE>
        Well, hello there, world.


    .. testcode::

        from io import StringIO
        post = frontmatter.load('tests/yaml/hello-world.txt')
        f = StringIO()
        frontmatter.dump(post, f)
        print(f.getvalue())

    .. testoutput::

        ---
        layout: post
        title: Hello, world!
        ---
        <BLANKLINE>
        Well, hello there, world.

    Úwr>   NrI   )r   r   Úwriter   r@   r1   rJ   )rL   r9   r)   r&   rN   r7   rB   s          r   r   r   Å   sù   € õX �D˜'Ð,Ð, VÐ,Ð,€GÝ�2�„ð HØ
�Š�ÑÔÐÐÐå	�"‰Œð HÝ�"�c HÐ-Ñ-Ô-ð 	°Ø�GŠG�GÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	õ ÐF½DÀ¹H¼HÐFÐFÑGÔGÐGs   ÁA9Á9A=Â A=c                óh   — |€t          | dd¦  «        pt          ¦   «         }|€J ‚ |j        | fi |¤ŽS )a™  
    Serialize a :py:class:`post <frontmatter.Post>` to a string and return text.
    This always returns unicode text, which can then be encoded.

    Passing ``handler`` will change how metadata is turned into text. A handler
    passed as an argument will override ``post.handler``, with
    :py:class:`YAMLHandler <frontmatter.default_handlers.YAMLHandler>` used as
    a default.

    ::

        >>> post = frontmatter.load('tests/yaml/hello-world.txt')
        >>> print(frontmatter.dumps(post)) # doctest: +NORMALIZE_WHITESPACE
        ---
        layout: post
        title: Hello, world!
        ---
        <BLANKLINE>
        Well, hello there, world.

    .. testcode::

        post = frontmatter.load('tests/yaml/hello-world.txt')
        print(frontmatter.dumps(post))

    .. testoutput::

        ---
        layout: post
        title: Hello, world!
        ---

        Well, hello there, world.

    Nr&   )Úgetattrr   Úformat)rL   r&   rN   s      r   r   r   ý   sJ   € ðH €Ý˜$ 	¨4Ñ0Ô0ÐAµK±M´MˆàÐÐÐØˆ7Œ>˜$Ð)Ð) &Ð)Ð)Ð)r   c                  óp   — e Zd ZdZ	 d d!d„Zd"d„Zd#d„Zd$d„Zd%d„Zd&d„Z	d'd„Z
d d(d„Zd)d„Zd*d„Zd+d„ZdS ),rG   a}  
    A post contains content and metadata from Front Matter. This is what gets
    returned by :py:func:`load <frontmatter.load>` and :py:func:`loads <frontmatter.loads>`.
    Passing this to :py:func:`dump <frontmatter.dump>` or :py:func:`dumps <frontmatter.dumps>`
    will turn it back into text.

    For convenience, metadata values are available as proxied item lookups.
    Nr7   r   r&   r#   r5   r+   r"   rO   c                óJ   — t          |¦  «        | _        || _        || _        d S r   )r   r7   r5   r&   )Úselfr7   r&   r5   s       r   Ú__init__zPost.__init__2  s#   € õ ˜7‘|”|ˆŒØ ˆŒØˆŒˆˆr   Únamec                ó   — | j         |         S )zGet metadata key©r5   ©rX   rZ   s     r   Ú__getitem__zPost.__getitem__9  s   € àŒ}˜TÔ"Ð"r   Úitemr;   c                ó   — || j         v S )zCheck metadata contains keyr\   )rX   r_   s     r   Ú__contains__zPost.__contains__=  s   € à�t”}Ð$Ð$r   Úvaluec                ó   — || j         |<   dS )zSet a metadata keyNr\   )rX   rZ   rb   s      r   Ú__setitem__zPost.__setitem__A  s   € à#ˆŒ�dÑÐÐr   c                ó   — | j         |= dS )zDelete a metadata keyNr\   r]   s     r   Ú__delitem__zPost.__delitem__E  s   € àŒM˜$ÐÐÐr   Úbytesc                ó6   — | j                              d¦  «        S )Nr(   )r7   Úencode©rX   s    r   Ú	__bytes__zPost.__bytes__I  s   € ØŒ|×"Ò" 7Ñ+Ô+Ð+r   c                ó   — | j         S r   )r7   rj   s    r   Ú__str__zPost.__str__L  s
   € ØŒ|Ðr   ÚkeyÚdefaultc                ó8   — | j                              ||¦  «        S )zGet a key, fallback to default)r5   Úget)rX   rn   ro   s      r   rq   zPost.getO  s   € àŒ}× Ò   gÑ.Ô.Ð.r   úIterable[str]c                ó4   — | j                              ¦   «         S )zReturn metadata keys)r5   Úkeysrj   s    r   rt   z	Post.keysS  s   € àŒ}×!Ò!Ñ#Ô#Ð#r   úIterable[object]c                ó4   — | j                              ¦   «         S )zReturn metadata values)r5   Úvaluesrj   s    r   rw   zPost.valuesW  s   € àŒ}×#Ò#Ñ%Ô%Ð%r   údict[str, object]c                óL   — | j                              ¦   «         }| j        |d<   |S )zPost as a dict, for serializingr7   )r5   r/   r7   )rX   Úds     r   Úto_dictzPost.to_dict[  s%   € àŒM×ÒÑ Ô ˆØ”|ˆˆ)‰Øˆr   r   )r7   r   r&   r#   r5   r+   r"   rO   )rZ   r   r"   r+   )r_   r+   r"   r;   )rZ   r   rb   r+   r"   rO   )rZ   r   r"   rO   )r"   rg   )r"   r   )rn   r   ro   r+   r"   r+   )r"   rr   )r"   ru   )r"   rx   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rY   r^   ra   rd   rf   rk   rm   rq   rt   rw   r{   r   r   r   rG   rG   (  s	  € € € € € ðð ð ;?ðð ð ð ð ð#ð #ð #ð #ð%ð %ð %ð %ð$ð $ð $ð $ð ð  ð  ð  ð,ð ,ð ,ð ,ðð ð ð ð/ð /ð /ð /ð /ð$ð $ð $ð $ð&ð &ð &ð &ðð ð ð ð ð r   )r   r   r    r!   r"   r#   )r(   N)
r   r   r)   r   r&   r#   r*   r+   r"   r,   )r(   )r9   r:   r)   r   r"   r;   )r   r   r)   r   r"   r;   )
r9   rF   r)   r   r&   r#   r*   r+   r"   rG   )
r   r   r)   r   r&   r#   r*   r+   r"   rG   )rL   rG   r9   rM   r)   r   r&   r#   rN   r+   r"   rO   r   )rL   rG   r&   r#   rN   r+   r"   r   )!r   Ú
__future__r   ÚioÚpathlibÚosr   Útypingr   r   r   Údefault_handlersr	   r
   r   Úutilr   r   r   r   r   Ú__all__r    r'   r   rC   rA   r   r   r   r   r+   rG   r   r   r   ú<module>rˆ      s  ððð ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð ð .Ø-Ð-Ð-Ð-Ð-Ð-ð 6Ð
5Ð
5€ðð à ¨kÐ:ðñ ô €ðð ð ð ð( Ø"&ð0%ð 0%ð 0%ð 0%ð 0%ðf"ð "ð "ð "ð "ð61ð 1ð 1ð 1ð 1ð( Ø"&ð6ð 6ð 6ð 6ð 6ðB Ø"&ð.ð .ð .ð .ð .ð0 Ø"&ð	5Hð 5Hð 5Hð 5Hð 5Hðp(*ð (*ð (*ð (*ð (*ðV7ð 7ð 7ð 7ð 7ˆ6ñ 7ô 7ð 7ð 7ð 7r   