
    /Vh+              
      ^   d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZ dd	lmZmZ erdd
lmZ ddlmZ ddlZddlmc mZ dZdZdZdZdddddddddd	Zdez  Zdez  ZdZdZdez  Zd ez  Zd!Z d"ez  Z!d#Z"d$ez  Z#d%ez  Z$d&ez  Z%d'Z&d(Z'd)Z(ed*z   Z) G d+ d,e      Z* G d- d.e      Z+d/ Z,y)0z
Convert ASCII dashes, quotes and ellipses to their HTML entity equivalents.

See the [documentation](https://Python-Markdown.github.io/extensions/smarty)
for details.
    )annotations   )	Extension   )HtmlInlineProcessorHTML_RE)InlineProcessor)Registry)TYPE_CHECKINGSequence)Markdown)inlinepatternsNz)[!"#\$\%'()*+,-.\/:;<=>?\@\[\\\]\^_`{|}~]z[\s.,;:!?)]z[^\ \t\r\n\[\{\(\-\u0002\u0003]u1   (\s|&nbsp;|--|–|—|&[mn]dash;|&#8211;|&#8212;)z&mdash;z&ndash;z&hellip;z&laquo;z&raquo;z&lsquo;z&rsquo;z&ldquo;z&rdquo;)	mdashndashellipsisleft-angle-quoteright-angle-quoteleft-single-quoteright-single-quoteleft-double-quoteright-double-quotez
^'(?=%s\B)z
^"(?=%s\B)z"'(?=\w)z'"(?=\w)z
(?<=%s)\'"z
(?<=%s)\"'z(?<!\w)'(?=\d{2}s)z	%s"(?=\w)z"(?=\s)z(?<=%s)"z	%s'(?=\w)z(?<=%s)'(?!\s|s\b|\d)z	'(\s|s\b)'"z(?!\>)c                      e Zd ZddZddZy)SubstituteTextPatternc                L    t        j                  | |       || _        || _        y)z" Replaces matches with some text. N)r   __init__replacemd)selfpatternr   r   s       J/home/dcms/DCMS/lib/python3.12/site-packages/markdown/extensions/smarty.pyr   zSubstituteTextPattern.__init__   s     $$T73    c                   d}| j                   D ]O  }t        |t              r||j                  |      z  }(|| j                  j
                  j                  |      z  }Q ||j                  d      |j                  d      fS )N r   )	r   
isinstanceintgroupr   	htmlStashstorestartend)r    mdataresultparts        r"   handleMatchz!SubstituteTextPattern.handleMatch   st    LL 	8D$$!''$-'$''++11$77		8
 qwwqz1558++r#   N)r!   strr   z#Sequence[int | str | etree.Element]r   r   )r-   zre.Match[str]r.   r2   returnztuple[str, int, int])__name__
__module____qualname__r   r1    r#   r"   r   r      s    ,r#   r   c                  `     e Zd ZdZ fdZ	 	 	 	 	 	 	 	 d	dZd
dZd
dZd
dZd
dZ	d Z
 xZS )SmartyExtensionz Add Smarty to Markdown. c                    ddgddgddgddgi dgd| _         	 t        |   di | t        t              | _        | j                  j                  | j                  d	i 
             y )NTzEducate quotesFzEducate angled quoteszEducate dasheszEducate ellipseszOverwrite default substitutions)smart_quotessmart_angled_quotessmart_dashessmart_ellipsessubstitutionsr?   )defaultr7   )configsuperr   dictr?   update	getConfig)r    kwargs	__class__s     r"   r   zSmartyExtension.__init__   s|    !#34$)+B#C!#34#%78 "CD
 	/"6"-1--@!!$.."."MNr#   c                    t        |      D ]:  \  }}||fz  }t        | }d||fz  }| j                  j                  ||||z
         < y )Nzsmarty-%s-%d)	enumerater   inlinePatternsregister)r    r   patternsseriepriorityindr!   names           r"   _addPatternszSmartyExtension._addPatterns   s^     &h/ 	FLCuG+W5G!UCL0D(($E		Fr#   c                    t        d| j                  d   f|      }t        d| j                  d   f|      }| j                  j                  |dd       | j                  j                  |dd       y )	Nz(?<!-)---(?!-)r   z(?<!-)--(?!-)r   zsmarty-em-dashes2   zsmarty-en-dashes-   r   r?   rJ   rK   )r    r   emDashesPatternenDashesPatterns       r"   educateDasheszSmartyExtension.educateDashes   sv    / 2 27 ;=r
 0t11':<b
 	$$_6H"M$$_6H"Mr#   c                t    t        d| j                  d   f|      }| j                  j                  |dd       y )Nz(?<!\.)\.{3}(?!\.)r   zsmarty-ellipses
   rU   )r    r   ellipsesPatterns      r"   educateEllipseszSmartyExtension.educateEllipses   s<    /!D$6$6z$B#Db
 	$$_6GLr#   c                    t        d| j                  d   f|      }t        d| j                  d   f|      }| j                  j                  |dd       | j                  j                  |dd       y )	Nz\<\<r   z\>\>r   zsmarty-left-angle-quotes(   zsmarty-right-angle-quotes#   rU   )r    r   leftAngledQuotePatternrightAngledQuotePatterns       r"   educateAngledQuotesz#SmartyExtension.educateAngledQuotes   s~    !6d(();<>"
 #8d(()<=?#
 	$$%;=WY[\$$%<>Y[]^r#   c                   | j                   d   }| j                   d   }| j                   d   }| j                   d   }t        |fft        |fft        ||z   fft        ||z   fft
        ||z   fft        ||z   fft        |fft        d|fft        |fft        |dfft        |fft        d|fft        |fft        |fft        |fff}| j!                  ||dd       y )Nr   r   r   r   r   quotes   )r?   singleQuoteStartRedoubleQuoteStartRedoubleQuoteSetsResingleQuoteSetsRedoubleQuoteSetsRe2singleQuoteSetsRe2decadeAbbrReopeningSingleQuotesRegexclosingSingleQuotesRegexclosingSingleQuotesRegex2remainingSingleQuotesRegexopeningDoubleQuotesRegexclosingDoubleQuotesRegexclosingDoubleQuotesRegex2remainingDoubleQuotesRegexrQ   )r    r   lsquorsquoldquordquorL   s          r"   educateQuoteszSmartyExtension.educateQuotes   s   ""#67""#78""#67""#78%*%* 01 01%%-!12%%-!12E8$%5z2%x0&
3'%2%5z2%x0&1'%2
" 	"h"5r#   c                   | j                         }t               | _        |d   r| j                  |       |d   r| j	                  |       |d   r<| j                  |       |j                  j                  t        t        |      dd       |d   r| j                  |       t        |      }| j                  |_        |j                  j                  |dd       |j                  j                  d	d
g       y )Nr>   r;   r<   htmlZ   r=   smarty   r   r   )
getConfigsr
   rJ   r\   ry   rb   rK   r   HTML_STRICT_RErX   r	   treeprocessorsESCAPED_CHARSextend)r    r   configsinlineProcessors       r"   extendMarkdownzSmartyExtension.extendMarkdown  s    //#HP
#$  $>"r"()$$R( &&':>2'NPVXZ[>"r")"-)-)<)<&
""?Ha@
c
+r#   )r   r   rL   z9Sequence[tuple[str, Sequence[int | str | etree.Element]]]rM   r2   rN   r'   )r   r   r3   None)r4   r5   r6   __doc__r   rQ   rX   r\   rb   ry   r   __classcell__)rG   s   @r"   r9   r9      sY    #OFF LF 	F
 FNM_60,r#   r9   c                     t        di | S )Nr7   )r9   )rF   s    r"   makeExtensionr     s    $V$$r#   )-r   
__future__r   r%   r   r   r   r   r   r	   utilr
   typingr   r   markdownr   rexml.etree.ElementTreeetreeElementTree
punctClassendOfWordClass
closeClassopeningQuotesBaser?   rf   rg   rh   ri   rj   rk   rl   rq   rr   rs   rm   rn   ro   rp   rt   r   r   r9   r   r7   r#   r"   <module>r      s.  ^ #  9 ,  *!!)) >
/
	  !""#"#
 #Z/ "Z/  $ # "Z/ "Z/  % (*;;  & '*4  (*;;  4j@ (  " ! 9$,/ ,"_,i _,D%r#   