Ë GÛÐzìtãó�—ddlZddlZddlZddlZddlZddlmZmZmZm Z ddl Z dee fd„Z de fd„Zd„Zde de fd„Zde fd „Zd edefd „Zde eefde eeffd „Zde eefde eeffd „Zde eefde eeffd„Zde fd„Zd„Zd„Zdde eefdedefd„ZdddddddœZ de defd„Zdedee e ffd„Zd„Zd„Z d„Z!y)éN)ÚListÚOptionalÚTupleÚUnionÚreturncóR—tjjd«}|dk(rd}|S)zD Return user's home directory or None if it is not defined. Ú~N)ÚosÚpathÚ expanduser)Úresults ú3/usr/lib/python3.12/site-packages/asciidoc/utils.pyÚuserdirr s)€ô�W‰W× Ñ  Ó $€FØ �‚}ØˆØ €Mócó~—tjj|«sJ‚|dk(rtj«}n@tjj |«sJ‚tjj |«}tjj |«}tjj ||f«|k(S)z3Return True if file fname resides inside directory.Ú)r r ÚisfileÚgetcwdÚisdirÚrealpathÚ commonprefix)ÚfnameÚ directorys rÚfile_inrs‡€ä �7‰7�>‰>˜%Ô Ð Ð à�B‚Ü—I‘I“K‰ ä�w‰w�}‰}˜YÔ'Ð'Ð'Ü—G‘G×$Ñ$ YÓ/ˆ Ü �G‰G× Ñ ˜UÓ #€EÜ �7‰7× Ñ  ¨EÐ 2Ó 3°yÑ @Ð@rcót—t|jj««D]\}}t|||«Œy)z8Assign all attributes from 'src' object to 'dst' object.N)ÚlistÚ__dict__ÚitemsÚsetattr)ÚdstÚsrcÚaÚvs rÚassignr$!s.€ä�S—\‘\×'Ñ'Ó)Ö*‰ˆˆ1Ü��Q˜Õñ+rÚscól—|j«}t|«dk\r|ddk(r |ddk(r|dd}|S)zrz)|(Ú(Ú))r,Úappendr0ÚsubÚjoin)r4r r%s rÚre_joinr;9s\€ô ˆ6ƒ{�aÒØØ €Fã ˆØ� ‰ ”b—f‘f˜\¨2¨qÓ1Õ2ðà �Z‰Z˜Ó €FØ �6‰\˜CÑ €FØ €MrcóP—tt|««D] }||sŒ ngS||dS)zB Return list with empty items from start of list removed. N©Úranger,©r%Úis rÚ lstrip_listrAGs2€ô”3�q“6Ž]ˆØ ˆQ‹4Ù ððˆ Ø ˆQˆRˆ5€Lrcó`—tt|«dz dd«D] }||sŒ ngS|d|dzS)z@ Return list with empty items from end of list removed. r*r)Nr=r?s rÚ rstrip_listrCSs@€ô”3�q“6˜A‘:˜r 2Ö &ˆØ ˆQ‹4Ù ð'ðˆ Ø ˆVˆa�!‰eˆ9Ðrcó2—t|«}t|«}|S)zJ Return list with empty items from start and end of list removed. )rArCr-s rÚ strip_listrE_s€ô �A‹€AÜ�A‹€AØ €HrcóF—t|t«xst|t«S)z6 Return True if object is list or tuple type. )Ú isinstancerÚtuple)Úobjs rÚis_arrayrJhs€ô �cœ4Ó Ò :¤J¨s´EÓ$:Ð:rcó—t|«sJ‚t|«sJ‚t|«}t|«}|r|st|«t|«zSt|dd«}|j|d|dz«|t|dd«z }|S)z¶ Append list or tuple of strings 'lines2' to list 'lines1'. Join the last non-blank item in 'lines1' with the first non-blank item in 'lines2' into a single string. Nr)rr*)rJrErr8)Úlines1Úlines2r s rÚdovetailrNos�€ô �FÔ ÐÐ Ü �FÔ ÐÐ Ü ˜Ó €FÜ ˜Ó €FÙ ™Ü�F‹|œd 6›lÑ*Ð*Ü �&˜˜"�+Ó €FØ ‡M�M�&˜‘*˜v a™yÑ(Ô)Ø Œd�6˜!˜"�:ÓÑ€FØ €Mrcó.—tt||«|«S)zºMerge the end tag with the first content line and the last content line with the end tag. This ensures verbatim elements don't include extraneous opening and closing line breaks.)rN)ÚstagÚcontentÚetags rÚ dovetail_tagsrS�s€ô ”H˜T 7Ó+¨TÓ 2Ð2rÚnÚdc ó‚—d|z}ttj||ztjd|«z««|z S)a Utility function to get python2 rounding in python3. Python3 changed it such that given two equally close multiples, it'll round towards the even choice. For example, round(42.5) == 42 instead of the expected round(42.5) == 43). This function gives us back that functionality.é gà?)ÚfloatÚmathÚfloorÚcopysign)rTrUÚps rÚpy2roundr]ˆs:€ð ˆa‰€AÜ ”—‘˜Q ™U¤d§m¡m°C¸Ó&;Ñ;Ó<Ó =ÀÑ AÐArér*)ÚWÚFÚNaÚHÚNÚAcóV—d}|D]!}|ttj|«z }Œ#|S)Nr)Úeast_asian_widthsÚ unicodedataÚeast_asian_width)r%ÚwidthÚcs rÚ column_widthrkžs1€Ø €EÛ ˆØ Ô"¤;×#?Ñ#?ÀÓ#BÑCÑC‰ðà €LrÚtcóà—tjjd«}|�)tjt |t |«««}ntj|«}tjd|«}tjd|«}|� |dz }||fStjr,|jdk(r|dtjdzz }||fS|dtjdzz }||fS)zIConvert seconds since the Epoch to formatted local date and time strings.ÚSOURCE_DATE_EPOCHz%Y-%m-%dz%H:%M:%Sz UTCr*Ú r) r ÚenvironÚgetÚtimeÚgmtimeÚminÚintÚ localtimeÚstrftimeÚdaylightÚtm_isdstÚtzname)rlÚsource_date_epochÚdate_strÚtime_strs rÚ date_time_strr~¥sÝ€äŸ ™ Ÿ™Ð':Ó;ÐØÐ$Ü �K‰Kœ˜AœsÐ#4Ó5Ó6Ó 7‰ä �N‰N˜1Ó ˆÜ�}‰}˜Z¨Ó+€HÜ�}‰}˜Z¨Ó+€HØÐ$Ø�Fшð �XÐ Ðô �Š˜1Ÿ:™:¨š?Ø�Cœ$Ÿ+™+ a™.Ñ(Ñ(ˆð �XÐ Ðð �Cœ$Ÿ+™+ a™.Ñ(Ñ(ˆØ �XÐ ÐrcóV—i}tjd|zdzd¬«jj}d}|D]n}t |tj «r,tj |j«|t|«<n!tj |«|t|«<|dz }Œp|S)Núd(r7Úeval©Úmoder*) ÚastÚparseÚbodyÚargsrGÚNameÚ literal_evalÚidÚstr)ÚvalrUr‡r@Úargs rÚget_argsrŽ·s�€Ø €AÜ �9‰9�T˜C‘Z #Ñ%¨FÔ 3× 8Ñ 8× =Ñ =€DØ €AÛˆÜ �cœ3Ÿ8™8Ô $Ü×(Ñ(¨¯©Ó0ˆAŒc�!‹fŠIä×(Ñ(¨Ó-ˆAŒc�!‹f‰IØ ˆQ‰‰ð ð €HrcóÒ—i}tjd|zdzd¬«jj}|D].}tj|j «||j <Œ0|S)Nr€r7r�r‚)r„r…r†Úkeywordsr‰Úvaluer�)rŒrUr‡r�s rÚ get_kwargsr’ÄsW€Ø €AÜ �9‰9�T˜C‘Z #Ñ%¨FÔ 3× 8Ñ 8× AÑ A€DÛˆÜ×%Ñ% c§i¡iÓ0ˆˆ#�'‰'Š ðà €Hrcó´—tjd|zdzd¬«jj}|D�cgc]}tj|«‘Œc}Scc}w)NÚ[Ú]r�r‚)r„r…r†Úeltsr‰)rŒÚvaluesr#s rÚ parse_to_listr˜ÌsI€Ü �Y‰Y�s˜S‘y 3‘¨VÔ 4× 9Ñ 9× >Ñ >€FÙ)/Ó 0© AŒC× Ñ ˜QÕ ¨Ñ 0Ð0ùÒ 0s¶A)r)"r„rYr r0rrÚtypingrrrrrgr‹rÚboolrr$r.r3r;rArCrErJrNrSrXrur]rfrkr~rŽr’r˜©rrÚrœs|ðÛ Û Û Û Û ß/Ó/Ûð�˜#‘óð A ó Aòð  �Cð ˜Có ð�óð �Dð ˜Tó ð �5˜˜u˜Ñ%ð ¨%°°e° Ñ*<ó ð �5˜˜u˜Ñ%ð ¨%°°e° Ñ*<ó ð �%˜˜e˜ Ñ$𠨨t°U¨{Ñ);ó ð;�Tó;òò$3ñB��e˜S�jÑ!ðB cðB°#óBð Ø Ø Ø Ø Ø ñ Ððð�Cð˜Cóð�Uð˜u S¨# X™óò$  ò ó1r