Ë üÀI¨Ÿÿôã ó—dZdZddlmZddlZddlZddlZddlZGd„d«ZGd„de «Z d „Z �d[d „Z Gd „d ee «Z Gd „de«ZGd„de«ZGd„de«ZGd„d«ZGd„d«ZGd„d«ZGd„d«ZGd„d«ZGd„d«ZGd„d e«ZGd!„d"«ZGd#„d$«ZGd%„d&e«ZGd'„d(e«ZGd)„d*e«ZGd+„d,e«ZGd-„d.e«ZGd/„d0«ZGd1„d2«Z Gd3„d4e«Z!Gd5„d6e«Z"Gd7„d8«Z#Gd9„d:eee«Z$Gd;„deee«Z&Gd?„d@ee«Z'GdA„dBee«Z(GdC„dDee«Z)GdE„dFee«Z*GdG„dHee«Z+GdI„dJee«Z,GdK„dLee«Z-GdM„dNee«Z.GdO„dPee«Z/GdQ„dRee«Z0GdS„dTee«Z1GdU„dVee«Z2GdW„dXee«Z3GdY„dZee«Z4Gd[„d\ee«Z5Gd]„d^ee«Z6Gd_„d`ee«Z7Gda„dbee«Z8Gdc„ddee«Z9Gde„dfee«Z:Gdg„dhee«Z;Gdi„djee«Z<Gdk„dlee«Z=Gdm„dnee«Z>Gdo„dpee«Z?Gdq„dree«Z@Gds„dtee«ZAGdu„dvee«ZBGdw„dxee«ZCGdy„dzee«ZDGd{„d|ee«ZEGd}„d~ee«ZFGd„d€ee«ZGGd�„d‚ee«ZHGdƒ„d„ee«ZIGd…„d†ee«ZJGd‡„dˆee«ZKGd‰„dŠee«ZLGd‹„dŒee«ZMGd�„dŽee«ZNGd�„d�ee«ZOGd‘„d’ee«ZPGd“„d”ee«ZQGd•„d–ee«ZRGd—„d˜ee«ZSGd™„dšee«ZTGd›„dœee«ZUGd�„džee«ZVGdŸ„d ee«ZWGd¡„d¢ee«ZXGd£„d¤ee«ZYGd¥„d¦ee«ZZGd§„d¨ee«Z[Gd©„dªee«Z\Gd«„d¬ee«Z]Gd­„d®ee«Z^Gd¯„d°ee«Z_Gd±„d²ee«Z`Gd³„d´ee«ZaGdµ„d¶eee«ZbGd·„d¸eee«ZcGd¹„dºeee ee"«ZdGd»„d¼eeee#e"«ZeGd½„d¾eeee#e"«ZfGd¿„dÀee«ZgGdÁ„dÂee«ZhGdÄdÄee«ZiGdÅ„dÆee«ZjGdÇ„dÈee«ZkGdÉ„dÊee«ZlGdË„dÌee«ZmGdÍ„dÎee«ZnGdÏ„dÐee«ZoGdÑ„dÒee«ZpGdÓ„dÔee«ZqGdÕ„dÖeeee«ZrGdׄdØeee«ZsGdÙ„dÚee ee«ZtGdÛ„dÜe e«ZuGdÝ„dÞe e«ZvGdß„dàe e«ZwGdá„dâee e!e«ZxGdã„däe e!e«ZyGdå„dæe e!e«ZzGdç„dèe e«Z{Gdé„dêe e«Z|Gdë„dìe e«Z}Gdí„dîe e«Z~Gdï„dðe e«ZGdñ„dòe e«Z€Gdó„dôe e«Z�Gdõ„döee e«Z‚Gd÷„døe e«ZƒGdù„dúe e«Z„Gdû„düe e«Z…dý�j «Z‡ Gdþ„dÿ«ZˆG�d„�deˆ«Z‰G�d„�deˆ«ZŠ�d„Z‹�d„ZŒ�d„Z��d„ZŽeŽe‡«G�d„�d eŠ«Z�G�d „�d e�«Z‘G�d „�d e‘«Z’G�d„�de‘«Z“G�d„�de‘«Z”G�d„�de‘«Z•G�d„�de‘«Z–G�d„�de‘«Z—�d„Z˜e�j2�d«Zše�j2�d«Z›i�d�d“�d�d“�d�d “�d!�d"“�d#�d$“�d%�d&“�d'�d(“�d)�d(“�d*�d+“�d,�d“�d-�d.“�d/�d0“�d1�d$“�d2�d3“�d4�d5“�d6�d&“�d7�d&“i�d8�d9“�d:�d;“�d<�d=“�d>�d;“�d?�d$“�d@�d3“�dA�d&“�dB�dC“�dD�d+“�dE�dF“�dG�d;“�dH�dI“�dJ�dC“�dK�dL“�dM�dN“�dO�d9“¥Zœ�dP�dQ�dR�dS�dT�dUœZ��dV„Zž�dW„ZŸ�dX„Z �dY„Z¡�dZ„Z¢y(\aØ Docutils document tree element class library. Classes in CamelCase are abstract base classes or auxiliary classes. The one exception is `Text`, for a text (PCDATA) node; uppercase is used to differentiate from element classes. Classes in lower_case_with_underscores are element classes, matching the XML element generic identifiers in the DTD_. The position of each node (the level at which it can occur) is significant and is represented by abstract base classes (`Root`, `Structural`, `Body`, `Inline`, etc.). Certain transformations will be easier because we can use ``isinstance(node, base_class)`` to determine the position of the node in the hierarchy. .. _DTD: https://docutils.sourceforge.io/docs/ref/docutils.dtd ÚreStructuredTexté)ÚCounterNcóÄ—eZdZdZdZ dZ dZ dZed„«Z e jd„«Z d„Z dd„Z dd„Z d„Zd „Zd „Zd „Zd „Zd „Zd„Zd„Z dd„Z dd„Z dd„Zy)ÚNodez0Abstract base class of nodes in a document tree.Ncój— |jxs|jjS#t$rYywxYw)zJReturn the `document` root node of the tree containing this Node. N)Ú _documentÚparentÚdocumentÚAttributeError©Úselfs ú3/usr/lib/python3.12/site-packages/docutils/nodes.pyr z Node.document6s2€ð Ø—>‘>Ò9 T§[¡[×%9Ñ%9Ð 9øÜò Ùð ús ‚#&¦ 2±2có—||_y©N)r)r Úvalues rr z Node.document?s €àˆ�ócó—y)a Node instances are always true, even if they're empty. A node is more than a simple container. Its boolean "truth" does not depend on having one or more subnodes in the doctree. Use `len()` to check node length. T©r s rÚ__bool__z Node.__bool__Cs€ðrcóZ—|€ ddlmcm}|j«}|j |«S)z6Return a DOM **fragment** representation of this Node.Nr)Úxml.dom.minidomÚdomÚminidomÚDocumentÚ _dom_node©r rÚdomroots rÚasdomz Node.asdomMs'€à ˆ;ß )Ð )Ø—,‘,“.ˆØ�~‰~˜gÓ&Ð&rcó—t‚)zs Return an indented pseudo-XML representation, for test purposes. Override in subclasses. ©ÚNotImplementedError)r ÚindentÚlevels rÚpformatz Node.pformatTs €ô "Ð!rcó—t‚)zReturn a copy of self.r r s rÚcopyz Node.copy\ó€ä!Ð!rcó—t‚)z3Return a deep copy of self (also copying children).r r s rÚdeepcopyz Node.deepcopy`r'rcó—t‚)z,Return a string representation of this Node.r r s rÚastextz Node.astextdr'rcóì—||_|jra|j|_|j€|jj|_|j€|jj |_yyyr)r r ÚsourceÚcurrent_sourceÚlineÚ current_line©r Úchilds rÚ setup_childzNode.setup_childhs[€ØˆŒ Ø �=Š=Ø!Ÿ]™]ˆEŒNØ�|‰|Ð#Ø#Ÿ}™}×;Ñ;�” Ø�z‰zÐ!Ø!Ÿ]™]×7Ñ7�• ð"ð rcó†—d}|jjjd|jjz« |j |«|j} |ddD]}|j|«sŒd}n|S#t tf$r|cYSt$rYŒKwxYw#t$rY|SwxYw#t$rd}Y|SwxYw)aé Traverse a tree of `Node` objects, calling the `dispatch_visit()` method of `visitor` when entering each node. (The `walkabout()` method is similar, except it also calls the `dispatch_departure()` method before exiting each node.) This tree traversal supports limited in-place tree modifications. Replacing one node with one or more nodes is OK, as is removing an element. However, if the node removed or replaced occurs after the current node, the old node will still be traversed, and any new nodes will not. Within ``visit`` methods (and ``depart`` methods for `walkabout()`), `TreePruningException` subclasses may be raised (`SkipChildren`, `SkipSiblings`, `SkipNode`, `SkipDeparture`). Parameter `visitor`: A `NodeVisitor` object, containing a ``visit`` implementation for each `Node` subclass encountered. Return true if we should stop the traversal. Fz6docutils.nodes.Node.walk calling dispatch_visit for %sNT) r ÚreporterÚdebugÚ __class__Ú__name__Údispatch_visitÚ SkipChildrenÚSkipNodeÚ SkipDepartureÚchildrenÚwalkÚ SkipSiblingsÚ StopTraversal)r ÚvisitorÚstopr=r2s rr>z Node.walkqsá€ð.ˆØ×Ñ×!Ñ!×'Ñ'Ø DØ�n‰n×%Ñ%ñ &ô 'ð ð Ø×&Ñ& tÔ,ð —}‘}ˆHð Ø%¡a›[�EØ—z‘z 'Õ*Ø#˜Ùð)ðˆ øô!¤(Ð+ò Ø’ Ü ò Ùð ûô ò Øðˆ ð  ûäò ؉D؈ ð ús`ÁBÁ B1ÁB!Á9B!ÂBÂB1ÂBÂB1ÂBÂB1Â! B.Â*B1Â-B.Â.B1Â1 CÂ?Ccó0—d}d}|jjjd|jjz« |j |«|j} |ddD]}|j|«sŒd}n|rM|jjjd|jjz«|j|«|S#t $r|cYSt$rd}YŒ–wxYw#t$rYŒywxYw#t$rYŒˆt$rd}YŒ”wxYw)a† Perform a tree traversal similarly to `Node.walk()` (which see), except also call the `dispatch_departure()` method before exiting each node. Parameter `visitor`: A `NodeVisitor` object, containing a ``visit`` and ``depart`` implementation for each `Node` subclass encountered. Return true if we should stop the traversal. TFz;docutils.nodes.Node.walkabout calling dispatch_visit for %sNz?docutils.nodes.Node.walkabout calling dispatch_departure for %s)r r5r6r7r8r9r;r<r=Ú walkaboutr?r:r@Údispatch_departure)r rAÚ call_departrBr=r2s rrDzNode.walkaboutŸs&€ðˆ ؈Ø×Ñ×!Ñ!×'Ñ'Ø IØ�n‰n×%Ñ%ñ &ô 'ð ð $Ø×&Ñ& tÔ,ð —}‘}ˆHð Ø%¡a›[�EØ—‘ wÕ/Ø#˜Ùð)ñ Ø × Ñ × %Ñ %× +Ñ +ðØŸ>™>×2Ñ2ñ3ô 4ð × &Ñ & tÔ ,؈ øô+ò Ø’ Ü ò $Ø#’ ð $ûô ò Ùð ûäò Ù Üò ØŠDð úsfÁCÁ C=Á!C.Á;C.à C+ÃC=à C+Ã(C=Ã*C+Ã+C=Ã. C:Ã7C=Ã9C:Ã:C=Ã= DÄ DÄDc#ó„K—t||«r|–—|jD]}|j|«Ed{–—†Œy7Œ­w)z3Return iterator that only supports instance checks.N)Ú isinstancer=Ú _fast_findall)r Úclsr2s rrIzNode._fast_findallÊs:èø€ä �d˜CÔ ØŠJØ—]”]ˆEØ×*Ñ*¨3Ó/× /Ñ /ñ#Ø /ús‚4A¶>·Ac#ójK—|–—|jD]}|j«Ed{–—†Œy7Œ­w)z3Return iterator that doesn't check for a condition.N)r=Ú_superfast_findallr1s rrLzNode._superfast_findallÑs0èø€ð Š Ø—]”]ˆEØ×/Ñ/Ó1× 1Ñ 1ñ#Ø 1ús ‚'3©1ª3c óv—tjdtd¬«t|j |||||««S)zyReturn list of nodes following `self`. For looping, Node.findall() is faster and more memory efficient. z5nodes.Node.traverse() is obsoleted by Node.findall().é©Ú stacklevel)ÚwarningsÚwarnÚPendingDeprecationWarningÚlistÚfindall©r Ú conditionÚ include_selfÚdescendÚsiblingsÚascends rÚtraversez Node.traverseÚs;€ô � ‰ ÐMÜ/¸Aõ ?ä�D—L‘L ¨L¸'Ø!)¨6ó3ó4ð 4rc#óK—|rd}|rI|rG|sE|€|j«Ed{–—†yt|t«r|j|«Ed{–—†yt|t«r|}|fd„}|r|�||«r|–—|r:t |j «r%|D] }|j |dddd¬«Ed{–—†Œ"|s|r¾|}|jr¯|jj|«} |j| |ur1|jj|| dz«} |j| |urŒ1|j| dzdD] } | j |d|dd¬«Ed{–—†Œ"|sy|j}|jrŒ®yyy7�ŒV7�Œ/7ŒÏ7Œ-­w)a� Return an iterator yielding nodes following `self`: * self (if `include_self` is true) * all descendants in tree traversal order (if `descend` is true) * the following siblings (if `siblings` is true) and their descendants (if also `descend` is true) * the following siblings of the parent (if `ascend` is true) and their descendants (if also `descend` is true), and so on. If `condition` is not None, the iterator yields only nodes for which ``condition(node)`` is true. If `condition` is a node class ``cls``, it is equivalent to a function consisting of ``return isinstance(node, cls)``. If `ascend` is true, assume `siblings` to be true as well. If the tree structure is modified during iteration, the result is undefined. For example, given the following tree:: <--- emphasis.traverse() and <--- strong.traverse() are called. Foo Bar Baz Then tuple(emphasis.traverse()) equals :: (, , <#text: Foo>, <#text: Bar>) and list(strong.traverse(ascend=True) equals :: [, <#text: Foo>, <#text: Bar>, , <#text: Baz>] TNcó—t||«Sr)rH)ÚnodeÚ node_classs rrWzNode.findall..conditions€Ü! $¨ Ó3Ð3rF)rWrXrYrZr[é) rLrHÚtyperIÚlenr=rUr Úindex) r rWrXrYrZr[r`r2r_rdÚsiblings rrUz Node.findallæs£èø€ñP ؈Hñ ™G©HØÐ Ø×2Ñ2Ó4×4Ð4ØÜ˜I¤tÔ,Ø×-Ñ-¨iÓ8×8Ð8Øô �i¤Ô &Ø"ˆJà+5ó 4ñ ˜YÐ.±)¸D´/ØŠJÙ ”s˜4Ÿ=™=Ô)Û�Ø Ÿ=™=°9Ø6:ÀDØ27Àð)óG÷GñGðñ ‘v؈DØ—+’+ØŸ ™ ×)Ñ)¨$Ó/�à—k‘k %Ñ(°Ñ4Ø ŸK™K×-Ñ-¨d°E¸A±IÓ>�Eð—k‘k %Ñ(°Ò4à#Ÿ{™{¨5°©7¨8Ó4�GØ&Ÿ™Ø"+Ø%)°7Ø!&¨uð /ó 6÷6ñ6ð 5ñ ØàŸ;™;�Dð—+•+ðð)5ùð9ùðGøð6úsS‚ F¢E8£)FÁ E;Á A!FÂ.E>Â/A4FÄ$.FÅFÅ!FÅ5FÅ;FÅ>FÆFc ó^— t|j|||||««S#t$rYywxYw)zé Return the first node in the iterator returned by findall(), or None if the iterable is empty. Parameter list is the same as of traverse. Note that `include_self` defaults to False, though. N)ÚnextrUÚ StopIterationrVs rÚ next_nodezNode.next_node9s?€ð ܘŸ ™  Y° Ø%,¨h¸ó@óAð Aøäò Ùð ús ‚   ,«,r©ú r)NTTFF)NFTFF)r8Ú __module__Ú __qualname__Ú__doc__r r-r/rÚpropertyr Úsetterrrr$r&r)r+r3r>rDrIrLr\rUrirrrrr(s´„Ù:à €FØFà €FØLà €DØNà€Ià ñóðð‡_�_ñóðòó'ó"ò"ò"ò"ò8ò,ò\)òV0ò2ðCGØ(-ó 4ðBFØ',óQ'ðfEIØ).ô rrcó"‡—eZdZdZˆfd„ZˆxZS)Ú reprunicodezR Deprecated backwards compatibility stub. Use the standard `str` instead. cóZ•—tjdtd¬«t‰|�«y)Nz`nodes.reprunicode() is not required with Python 3 and will be removed in Docutils 0.21 or later.rNrO)rQrRÚDeprecationWarningÚsuperÚ__init__)r Úsr7s €rrvzreprunicode.__init__Ms'ø€Ü� ‰ ðHä(°Qõ 8ô ‰ÑÕr)r8rlrmrnrvÚ __classcell__)r7s@rrrrrIsø„ñ÷ðrrrcó>—tjdtd¬«|S)z@ Deprecated backwards compatibility stub returning `s`. z_nodes.ensure_str() is not required with Python 3 and will be removed in Docutils 0.21 or later.rNrO)rQrRrt)rws rÚ ensure_strrzTs"€ô ‡M�MðDä$°õ4ð €Hrcó|—|r|jdd«SdD]"}dj|j|««}Œ$|S)zw Return a string with nulls removed or restored to backslashes. Backslash-escaped spaces are also removed. ÚÚ\)z z r|Ú)ÚreplaceÚjoinÚsplit)ÚtextÚrestore_backslashesÚrespect_whitespaceÚseps rÚunescaper†_s=€ñ Ø�|‰|˜F DÓ)Ð)ã.ˆCØ—7‘7˜4Ÿ:™: c›?Ó+‰Dð/àˆ rcó`—eZdZdZdZdZ dd„Zdd„Zd„Zd„Z d „Z d „Z d „Z dd „Z dd „Zdd„Zy)ÚTexta Instances are terminal nodes (leaves) containing text only; no child nodes or attributes. Initialize by passing a string to the constructor. Access the raw (null-escaped) text with ``str()`` and unescaped text with ``.astext()``. z#textrNcó —t|t«r td«‚|�tjdt d¬«t j||«S)zuAssert that `data` is not an array of bytes and warn if the deprecated `rawsource` argument is used. zexpecting str data, not bytesz_nodes.Text: initialization argument "rawsource" is ignored and will be removed in Docutils 2.0.rNrO)rHÚbytesÚ TypeErrorrQrRrtÚstrÚ__new__)rJÚdataÚ rawsources rr�z Text.__new__|sJ€ô �dœEÔ "ÜÐ;Ó<Ð <Ø Ð Ü �M‰MðLä,¸õ <ô�{‰{˜3 Ó%Ð%rcóp—|}t|«|kDr |d|dz dz}d|j›dt|«›d�S)Néú ...Ú<ú: Ú>)rcÚtagnamerŒ)r ÚmaxlenrŽs rÚ shortreprzText.shortreprˆs;€ØˆÜ ˆt‹9�vÒ Ø˜ ˜ ™�? VÑ+ˆDøØ!Ÿ\›\¬3¨t­9Ð5Ð5rcó&—|jd¬«S)NéD)r—)r˜r s rÚ__repr__z Text.__repr__Žs€Ø�~‰~ Rˆ~Ó(Ð(rcó6—|jt|««Sr)ÚcreateTextNoderŒ)r rs rrzText._dom_node‘s€Ø×%Ñ%¤c¨$£iÓ0Ð0rcó*—tt|««Sr)rŒr†r s rr+z Text.astext”s€Ü”8˜D“>Ó"Ð"rcó6—|jt|««Sr)r7rŒr s rr&z Text.copy—s€Ø�~‰~œc $›iÓ(Ð(rcó"—|j«Sr)r&r s rr)z Text.deepcopyšs€Ø�y‰y‹{Ðrcó~‡‡— |jjjr<‰‰z›d›�}ˆˆfd„|jd«D«}dj |g|¢­«dzS ‰‰zŠ|j «j«D�cgc]}‰|z‘Œ }}|sydj |«dzS#t $rYŒUwxYwcc}w)Nz<#text>c3óF•K—|]}‰‰dzzt|«z–—Œy­w©raN)Úrepr©Ú.0r/r"r#s €€rÚ zText.pformat..¡s+øèø€ð<Ù%:˜Tð   q¡Ñ)¬D°«JÕ6Ù%:ùsƒ!TÚ r~)r ÚsettingsÚdetailedÚ splitlinesr€r r+)r r"r#ÚtagÚlinesr/s `` rr$z Text.pformat�sÇù€ð Ø�}‰}×%Ñ%×.Ò.Ø & u¢ ©iÐ8�ô<Ø%)§_¡_°TÔ%:ó<�à—y‘y # ¨¡Ó/°$Ñ6Ð6ð /ð˜%‘ˆØ)-¯©«×)AÑ)AÔ)CÓDÑ)C �˜“Ð)CˆÐDÙØØ�y‰y˜Ó $Ñ&Ð&øô ò Ù ð üòEs„AB+ B:Â+ B7Â6B7cóL—|jtj||««Sr)r7rŒÚrstrip©r Úcharss rr¯z Text.rstrip°ó€Ø�~‰~œcŸj™j¨¨uÓ5Ó6Ð6rcóL—|jtj||««Sr)r7rŒÚlstripr°s rr´z Text.lstrip³r²rr)érj)r8rlrmrnr–r=r�r˜r›rr+r&r)r$r¯r´rrrrˆrˆmsH„ñð€Gà€HØ@ó &ó6ò )ò1ò#ò)òó 'ó&7ô7rrˆcó,—eZdZdZdZ dZ eezZ edzZ dZ dZ dCd„Z d„Z d „Z d „Z d „ZdDd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZdDd„Zd„Zd„ZdDd„Z eZ!dCd„Z"d„Z#d „Z$d!„Z%dEd"„Z&d#„Z'd$e(jRfd%„Z*d&„Z+d'„Z,d(„Z-d)„Z.d*„Z/dFd,„Z0dFd-„Z1d.„Z2d/„Z3d0„Z4e4d+d1fd2„Z5 dGd3„Z6 dGd4„Z7 dGd5„Z8dHd6„Z9d7„Z:d8„Z;d9„ZdId<„Z?d=„Z@d>„ZAd?„ZBdJd@„ZCeDdA„«ZEeDdB„«ZFy)KÚElementaV `Element` is the superclass to all specific elements. Elements contain attributes and child nodes. They can be described as a cross between a list and a dictionary. Elements emulate dictionaries for external [#]_ attributes, indexing by attribute name (a string). To set the attribute 'att' to 'value', do:: element['att'] = 'value' .. [#] External attributes correspond to the XML element attributes. From its `Node` superclass, Element also inherits "internal" class attributes that are accessed using the standard syntax, e.g. ``element.parent``. There are two special attributes: 'ids' and 'names'. Both are lists of unique identifiers: 'ids' conform to the regular expression ``[a-z](-?[a-z0-9]+)*`` (see the make_id() function for rationale and details). 'names' serve as user-friendly interfaces to IDs; they are case- and whitespace-normalized (see the fully_normalize_name() function). Elements emulate lists for child nodes (element nodes and/or text nodes), indexing by integer. To get the first child node, use:: element[0] to iterate over the child nodes (without descending), use:: for child in element: ... Elements may be constructed using the ``+=`` operator. To add one new child node to element, do:: element += node This is equivalent to ``element.append(node)``. To add a list of multiple child nodes at once, use the same ``+=`` operator:: element += [node1, node2] This is equivalent to ``element.extend([node1, node2])``. )ÚidsÚclassesÚnamesÚdupnames)Úbackrefs)r-Nz có–—||_ g|_ |j|«i|_ |jD]}g|j|<Œ|j «D]E\}}|j «}||jvr|dd|j|<Œ7||j|<ŒG|j€|jj|_yyr) r�r=ÚextendÚ attributesÚlist_attributesÚitemsÚlowerr–r7r8)r r�r=r¿Úattrs rrvzElement.__init__sÄ€Ø"ˆŒð 𠈌 Ø;à � ‰ �HÔàˆŒØ4ð×'Ô'ˆCØ#%ˆD�O‰O˜CÒ ð(ð%×*Ñ*Ö,‰JˆC�Ø—)‘)“+ˆCØ�d×*Ñ*Ñ*à',©Q x�—‘ Ò$à',�—‘ Ò$ð -ð �<‰<Ð ØŸ>™>×2Ñ2ˆD�Lð rcóH—|j|j«}|j«D]B\}}t|t«rdj d„|D««}|j |d|z«ŒD|jD]"}|j|j|««Œ$|S)NÚ c3ó4K—|]}t|›«–—Œy­wr)Ú serial_escape)r¦Úvs rr§z$Element._dom_node..#sèø€Ð KÁUÀ¤±q×!;ÁUùs‚z%s) Ú createElementr–ÚattlistrHrTr€Ú setAttributer=Ú appendChildr)r rÚelementÚ attributerr2s rrzElement._dom_nodes‰€Ø×'Ñ'¨¯ © Ó5ˆØ $§ ¡ ¦Ñ ˆI�uܘ%¤Ô&ØŸ™Ñ KÁUÓ KÓK�Ø × Ñ  ¨D°5©LÕ 9ð!/ð—]”]ˆEØ × Ñ  §¡°Ó 8Õ 9ð#àˆrcó&—d}|jD]-}||j«z }t|«dkDsŒ%|dddz}n|dr2d|jj›ddj |d«›d |›d �Sd|jj›d |›d �S) Nr~é<é8r’rºr“ú "ú; z": r•r”)r=r˜rcr7r8r€)r rŽÚcs rr›zElement.__repr__)s“€ØˆØ—”ˆAØ �A—K‘K“MÑ !ˆDÜ�4‹y˜2‹~ؘC˜R�y 6Ñ)�Ùð ð �‹=Ø&*§n¡n×&=Ó&=Ø&*§i¡i°°W± Õ&>ÂðFð Fð ð"&§¡×!8Ó!8º$Ð?Ð ?rcóˆ—|dr/d|jj›ddj|d«›d�Sd|jzS)Nrºr“rÒrÓz"...>z<%s...>)r7r8r€r–r s rr˜zElement.shortrepr6sA€Ø �‹=Ø%)§^¡^×%<Ó%<Ø%)§Y¡Y¨t°G©}Õ%=ð?ð ?ð˜tŸ|™|Ñ+Ð +rcó—|jrD|j«›djd„|jD««›|j«›�S|j «S)Nr~c3ó2K—|]}t|«–—Œy­wr)rŒ)r¦rÔs rr§z"Element.__str__..@sèø€Ð&E±}°!¤s¨1§v±}ùó‚)r=Ústarttagr€ÚendtagÚemptytagr s rÚ__str__zElement.__str__=sI€Ø �=Š=Ø#Ÿ}™}œØ!Ÿw™wÑ&E°t·}²}Ó&EÔEØ#Ÿ{™{œ}ð.ð .ð—=‘=“?Ð "rcó„—|€t}|jg}|j«D]€\}}|€|jd|z«Œt |t «r+|D�cgc]}t |›«‘Œ}}dj|«}n t|«}||«}|j|›d|›�«Œ‚ddj|«zScc}w)Nz %s="True"rÅÚ=z<%s>) Úpseudo_quoteattrr–rÊÚappendrHrTrÇr€rŒ)r Ú quoteattrÚpartsÚnamerrÈÚvaluess rrÙzElement.starttagEsµ€à Ð Ü(ˆIØ—‘�ˆØŸ<™<ž>‰KˆD�%؈}Ø— ‘ ˜[¨4Ñ/Ô0ØÜ˜%¤Ô&Ù>CÓD¹e¸œ-±Õ4¸e�ÐDØŸ™ Ó(‘ä˜E› �Ù˜eÓ$ˆEØ �L‰L¢D©%Ð0Õ 1ð*𘟙 ›Ñ'Ð'ùò EsÁB=có —d|jzS)Nz)r–r s rrÚzElement.endtagWs€Ø˜Ÿ™Ñ%Ð%rcót—d„|j«D«}ddj|jg|¢­«zS)Nc3ó2K—|]\}}|›d|›d�–—Œy­w)z="Ú"Nr)r¦ÚnrÈs rr§z#Element.emptytag..[sèø€ÐD±^©T¨Q°¢1¢aÔ(±^ùrØz<%s/>rÅ)rÊr€r–)r r¿s rrÛzElement.emptytagZs2€ÙD°T·\±\´^ÓDˆ ؘŸ™ 4§<¡<Ð"=°*Ñ"=Ó>Ñ>Ð>rcó,—t|j«Sr)rcr=r s rÚ__len__zElement.__len__^s€Ü�4—=‘=Ó!Ð!rcóZ—t|t«r||jvS||jvSr)rHrŒr¿r=©r Úkeys rÚ __contains__zElement.__contains__as*€ä �cœ3Ô Ø˜$Ÿ/™/Ð)Ð )Ø�d—m‘mÐ#Ð#rcó$—t|t«r|j|St|t«r|j|St|t «r8|j dvsJd«‚|j|j|jStd«‚©N©Nraúcannot handle slice with stridezFelement index must be an integer, a slice, or an attribute name string© rHrŒr¿Úintr=ÚsliceÚstepÚstartrBr‹rís rÚ __getitem__zElement.__getitem__gs�€Ü �cœ3Ô Ø—?‘? 3Ñ'Ð 'Ü ˜œSÔ !Ø—=‘= Ñ%Ð %Ü ˜œUÔ #Ø—8‘8˜yÑ(Ð KÐ*KÓ KÐ(Ø—=‘= §¡¨3¯8©8Ð4Ð 4äð7ó8ð 8rcóŽ—t|t«r||jt|«<yt|t«r!|j |«||j |<yt|t «rQ|jdvsJd«‚|D]}|j |«Œ||j |j|jytd«‚rñ) rHrŒr¿rõr3r=rör÷rørBr‹)r rîÚitemr_s rÚ __setitem__zElement.__setitem__ss¨€Ü �cœ3Ô Ø(,ˆD�O‰OœC ›HÒ %Ü ˜œSÔ !Ø × Ñ ˜TÔ "Ø!%ˆD�M‰M˜#Ò Ü ˜œUÔ #Ø—8‘8˜yÑ(Ð KÐ*KÓ KÐ(Û�Ø× Ñ  Õ&ðà04ˆD�M‰M˜#Ÿ)™) C§H¡HÑ -äð7ó8ð 8rcó"—t|t«r|j|=yt|t«r|j|=yt|t «r9|j dvsJd«‚|j|j|j…=ytd«‚)NròrózMelement index must be an integer, a simple slice, or an attribute name stringrôrís rÚ __delitem__zElement.__delitem__‚s~€Ü �cœ3Ô Ø—‘ Ñ$Ü ˜œSÔ !Ø— ‘ ˜cÑ"Ü ˜œUÔ #Ø—8‘8˜yÑ(Ð KÐ*KÓ KÐ(Ø— ‘ ˜cŸi™i¨¯©Ð0Ñ1äðAóBð Brcó —|j|zSr©r=©r Úothers rÚ__add__zElement.__add__Žs€Ø�}‰}˜uÑ$Ð$rcó —||jzSrrrs rÚ__radd__zElement.__radd__‘s€Ø�t—}‘}Ñ$Ð$rcór—t|t«r|j|«|S|�|j|«|S)z4Append a node or a list of nodes to `self.children`.)rHrràr¾rs rÚ__iadd__zElement.__iadd__”s8€ä �eœTÔ "Ø �K‰K˜Ô ðˆ ðÐ Ø �K‰K˜Ô ؈ rcóŽ—|jj|jD�cgc]}|j«‘Œc}«Scc}wr)Úchild_text_separatorr€r=r+r1s rr+zElement.astextœs<€Ø×(Ñ(×-Ñ-Ø04· ² Ó>±  u�E—L‘L•N° Ñ>ó@ð @ùÚ>s¤Acó|—i}|jj«D]\}}|j|«sŒ|||<Œ|Sr)r¿rÁÚis_not_default)r Úattsrîrs rÚnon_default_attributeszElement.non_default_attributes s@€ØˆØŸ/™/×/Ñ/Ö1‰JˆC�Ø×"Ñ" 3Õ'Ø!��S’ ð2ðˆ rcóP—t|j«j««Sr)Úsortedr rÁr s rrÊzElement.attlist§s€Ü�d×1Ñ1Ó3×9Ñ9Ó;Ó<Ð Ñ &Ø × (Ñ (¨¨uÕ 5ð 'rcóÖ—|j|«|urVt|j|«t«st|t«r|j||«y|j |||«yy)a— If attr is an attribute of self and either self[attr] or value is a list, convert all non-sequence values to a sequence of 1 element and then concatenate the two sequence, setting the result to self[attr]. If both self[attr] and value are non-sequences and replace is True or self[attr] is None, replace self[attr] with value. Otherwise, do nothing. N)rrHrTr;r?rAs rÚcopy_attr_coercezElement.copy_attr_coerce(sW€ð �8‰8�D‹> Ñ &ܘ$Ÿ(™( 4›.¬$Ô/ܘ%¤Ô&Ø×,Ñ,¨T°5Õ9à×!Ñ! $¨¨wÕ7ð 'rcóÖ—|j|«|urVt|j|«t«r#t|t«r|j||«y|j |||«yy)aM If attr is an attribute of self and both self[attr] and value are lists, concatenate the two sequences, setting the result to self[attr]. If either self[attr] or value are non-sequences and replace is True or self[attr] is None, replace self[attr] with value. Otherwise, do nothing. N)rrHrTr6r?rAs rÚcopy_attr_concatenatezElement.copy_attr_concatenate8sW€ð �8‰8�D‹> Ñ &ܘ$Ÿ(™( 4›.¬$Ô/ܘ%¤Ô&Ø×%Ñ% d¨EÕ2à×!Ñ! $¨¨wÕ7ð 'rcóR—|j|«|ur|j|||«yy)zz If replace is True or self[attr] is None, replace self[attr] with value. Otherwise, do nothing. N)rr?rAs rÚcopy_attr_consistentzElement.copy_attr_consistentGs+€ð �8‰8�D‹> Ñ &Ø × Ñ ˜d E¨7Õ 3ð 'rFcóÒ—t|t«r |j}|r |j}n |j}|j |«t ||«D]}||||||«Œy)a. Updates all attributes from node or dictionary `dict_`. Appends the basic attributes ('ids', 'names', 'classes', 'dupnames', but not 'source') and then, for all other attributes in dict_, updates the same attribute in self. When attributes with the same identifier appear in both self and dict_, the two values are merged based on the value of update_fun. Generally, when replace is True, the values in self are replaced or merged with the values in dict_; otherwise, the values in self may be preserved or merged. When and_source is True, the 'source' attribute is included in the copy. NOTE: When replace is False, and self contains a 'source' attribute, 'source' is not replaced even when dict_ has a 'source' attribute, though it may still be merged into a list depending on the value of update_fun. NOTE: It is easier to call the update-specific methods then to pass the update_fun method to this function. N)rHrr¿Úis_not_list_attributeÚis_not_known_attributer8Úfilter)r r7Ú update_funrÚ and_sourceÚ filter_funrÃs rÚupdate_all_attszElement.update_all_attsOsi€ô* �eœTÔ "Ø×$Ñ$ˆEñ Ø×3Ñ3‰Jà×4Ñ4ˆJð ×јuÔ%ô˜* eÖ,ˆCÙ �t˜S %¨¡*¨gÕ 6ñ-rcóH—|j|tj||«y)aC Updates all attributes from node or dictionary `dict_`. Appends the basic attributes ('ids', 'names', 'classes', 'dupnames', but not 'source') and then, for all other attributes in dict_, updates the same attribute in self. When attributes with the same identifier appear in both self and dict_ and replace is True, the values in self are replaced with the values in dict_; otherwise, the values in self are preserved. When and_source is True, the 'source' attribute is included in the copy. NOTE: When replace is False, and self contains a 'source' attribute, 'source' is not replaced even when dict_ has a 'source' attribute, though it may still be merged into a list depending on the value of update_fun. N)rPr·rH©r r7rrNs rÚupdate_all_atts_consistantlyz$Element.update_all_atts_consistantlyus!€ð$ ×јU¤G×$@Ñ$@À'Ø'õ )rcóH—|j|tj||«y)a Updates all attributes from node or dictionary `dict_`. Appends the basic attributes ('ids', 'names', 'classes', 'dupnames', but not 'source') and then, for all other attributes in dict_, updates the same attribute in self. When attributes with the same identifier appear in both self and dict_ whose values aren't each lists and replace is True, the values in self are replaced with the values in dict_; if the values from self and dict_ for the given identifier are both of list type, then the two lists are concatenated and the result stored in self; otherwise, the values in self are preserved. When and_source is True, the 'source' attribute is included in the copy. NOTE: When replace is False, and self contains a 'source' attribute, 'source' is not replaced even when dict_ has a 'source' attribute, though it may still be merged into a list depending on the value of update_fun. N)rPr·rFrRs rÚupdate_all_atts_concatenatingz%Element.update_all_atts_concatenatingŠs!€ð* ×јU¤G×$AÑ$AÀ7Ø'õ )rcóH—|j|tj||«y)a[ Updates all attributes from node or dictionary `dict_`. Appends the basic attributes ('ids', 'names', 'classes', 'dupnames', but not 'source') and then, for all other attributes in dict_, updates the same attribute in self. When attributes with the same identifier appear in both self and dict_ whose values are both not lists and replace is True, the values in self are replaced with the values in dict_; if either of the values from self and dict_ for the given identifier are of list type, then first any non-lists are converted to 1-element lists and then the two lists are concatenated and the result stored in self; otherwise, the values in self are preserved. When and_source is True, the 'source' attribute is included in the copy. NOTE: When replace is False, and self contains a 'source' attribute, 'source' is not replaced even when dict_ has a 'source' attribute, though it may still be merged into a list depending on the value of update_fun. N)rPr·rDrRs rÚupdate_all_atts_coercionz Element.update_all_atts_coercion¢s!€ð, ×јU¤G×$<Ñ$<¸gØ'õ )rcóH—|j|tj|¬«y)a} Updates all attributes from node or dictionary `dict_`. Appends the basic attributes ('ids', 'names', 'classes', 'dupnames', but not 'source') and then, for all other attributes in dict_, updates the same attribute in self. When attributes with the same identifier appear in both self and dict_ then first any non-lists are converted to 1-element lists and then the two lists are concatenated and the result stored in self; otherwise, the values in self are preserved. When and_source is True, the 'source' attribute is included in the copy. NOTE: When replace is False, and self contains a 'source' attribute, 'source' is not replaced even when dict_ has a 'source' attribute, though it may still be merged into a list depending on the value of update_fun. )rNN)rPr·rB)r r7rNs rÚupdate_all_atts_convertzElement.update_all_atts_convert»s$€ð$ ×јU¤G×$=Ñ$=Ø(2ð õ 4rcó—g|_yrrr s rÚclearz Element.clearÐs €Øˆ� rcóŠ—|j|«}t|t«r|j|«|||<y|� ||||dzyy)z8Replace one child `Node` with another child or children.Nra)rdrHrr3)r ÚoldÚnewrds rrzElement.replaceÓsJ€à— ‘ ˜3“ˆÜ �cœ4Ô Ø × Ñ ˜SÔ !؈D�ŠKØ ˆ_Ø"%ˆD��u˜Q‘wÑ ðrcó—|}t|t«s |d}t|t«r|j |«n&|j D]}||sŒ Jd|›d||›�«‚|j j||«y#t$rd}YŒrwxYw)zc Replace `self` node with `new`, where `new` is a node or a list of nodes. rNzLosing "z " attribute: )rHrÚ IndexErrorr·r8r5r r)r r^ÚupdaterÃs rÚ replace_selfzElement.replace_selfÜsš€ð ˆÜ˜#œtÔ$ð Ø˜Q™�ô �fœgÔ &Ø × $Ñ $ TÕ *ð×,Ô,�Ø ›9ñFÚ69¸4Àº9ÐEóF�}ð-ð � ‰ ×јD #Õ&øôò Ø’ð ús”A>Á> B  B cóª—t|t«s|f}t|tt |«|««D]}|D]}t|||«sŒ|ccSŒ y)aM Return the index of the first child whose class exactly matches. Parameters: - `childclass`: A `Node` subclass to search for, or a tuple of `Node` classes. If a tuple, any of the classes may match. - `start`: Initial index to check. - `end`: Initial index to *not* check. N)rHÚtupleÚrangeÚminrc©r Ú childclassrøÚendrdrÔs rÚfirst_child_matching_classz"Element.first_child_matching_classòsS€ô˜*¤eÔ,Ø$˜ˆJܘ5¤#¤c¨$£i°Ó"5Ö6ˆEÛ�ܘd 5™k¨1Õ-Ø ”Lñ ð7ðrcó¼—t|t«s|f}t|tt |«|««D]'}|D]}t|j ||«sŒŒ$|cSy)aI Return the index of the first child whose class does *not* match. Parameters: - `childclass`: A `Node` subclass to skip, or a tuple of `Node` classes. If a tuple, none of the classes may match. - `start`: Initial index to check. - `end`: Initial index to *not* check. N)rHrdrerfrcr=rgs rÚfirst_child_not_matching_classz&Element.first_child_not_matching_classs]€ô˜*¤eÔ,Ø$˜ˆJܘ5¤#¤c¨$£i°Ó"5Ö6ˆEÛ�ܘdŸm™m¨EÑ2°AÕ6Ùð ð’ ð 7ð rc󌇇—‰‰z›|j«›d�}ˆˆfd„|jD«}dj|g|¢­«S)Nr¨c3óH•K—|]}|j‰‰dz«–—Œy­wr£)r$)r¦rÔr"r#s €€rr§z"Element.pformat..s!øèø€ÐG¹°A�Q—Y‘Y˜v u¨Q¡w×/¹ùsƒ"r~)rÙr=r€)r r"r#ÚtaglineÚ childrepss `` rr$zElement.pformats<ù€Ø$ Ušl¨D¯M©M­OÐ<ˆÜG¸¿ºÓGˆ Ø�w‰w˜Ð, )Ñ,Ó-Ð-rcó¼—|jdd|ji|j¤Ž}|j|_|j|_|j |_|S)Nr�r)r7r�r¿rr-r/©r Úobjs rr&z Element.copy sH€Øˆd�n‰nÑI t§~¡~ÐI¸¿¹ÑIˆØŸ™ˆŒ Ø—[‘[ˆŒ Ø—9‘9ˆŒØˆ rcóž—|j«}|j|jD�cgc]}|j«‘Œc}«|Scc}wr)r&r¾r=r))r r&r2s rr)zElement.deepcopy's>€Ø�y‰y‹{ˆØ � ‰ °4·=²=ÓA±=¨%�U—^‘^Õ%°=ÑAÔB؈ ùòBsªA cóŒ—tjdtd¬«d|vsJ‚|dj|j ««y)z+Add a new class to the "classes" attribute.z•docutils.nodes.Element.set_class() is deprecated; and will be removed in Docutils 0.21 or later.Append to Element['classes'] list attribute directlyrNrOrÅr¹N)rQrRrtràr©r rãs rÚ set_classzElement.set_class,sA€ä� ‰ ðMô)°Qõ 8ð˜$‰ÐˆØ ˆY‰×јtŸz™z›|Õ,rcó¸—d|_t|di«j|«}t|di«j|«}|r |€J‚d|_|r |€J‚d|_yy)zQNote that this Element has been referenced by its name `name` or id `id`.raÚexpect_referenced_by_nameÚexpect_referenced_by_idN)Ú referencedÚgetattrr)r rãÚidÚby_nameÚby_ids rÚnote_referenced_byzElement.note_referenced_by5sr€ðˆŒô ˜$Ð ;¸RÓ@×DÑDÀTÓJˆÜ˜Ð7¸Ó<×@Ñ@ÀÓDˆÙ ØÐ#Ð #Ð#Ø!"ˆGÔ Ù Ø�>Ð !�>Ø ˆEÕ ð rcó—||jvS)z‹ Returns True if and only if the given attribute is NOT one of the basic list attributes defined for all Elements. r3©rJrs rrJzElement.is_not_list_attributeFs€ð ˜3×.Ñ.Ð.Ð.rcó—||jvS)zj Returns True if and only if the given attribute is NOT recognized by this class. )Úknown_attributesr‚s rrKzElement.is_not_known_attributeNs€ð ˜3×/Ñ/Ð/Ð/r)r~r)éÿÿÿÿ)T)TF)Frj©NN)Gr8rlrmrnr5Úlocal_attributesrÀr„r–r rvrr›r˜rÜrÙrÚrÛrërïrùrürþrrrr+r rÊrrrrÚhas_keyr"ràr¾r(r*r.ÚsysÚmaxsizerdr1r r8r6r;r?rBrDrFrHrPrSrUrWrYr[rrbrjrlr$r&r)rwr€Ú classmethodrJrKrrrr·r··sé„ñ-ð^?ÐðCð%ÐðKð 'Ð)9Ñ9€Oðð'¨Ñ4ÐØGà€Gð+ð"ÐØ?ó3ò<ò @ò,ò#ó(ò$&ò?ò"ò$ò 8ò 8ò Bò%ò%òò@òò=ó1ò'ò&ó8ð€Gó ò#òò%ó$ò#ð!"¨¯ © ó6ò3òò ;ò )ò +óó 6ò8ò 8ò4ð1EØ $°ó$7ðL;?Ø05ó)ð*<@Ø16ó)ð07;Ø,1ó)ó24ò*ò&ò'ð,<=À#Ç+Á+óð&@AØ+.¯;©;óó,.ò òò -ó!ð"ñ/óð/ðñ0óñ0rr·có—eZdZdZdZ dd„Zy)Ú TextElementaé An element which directly contains text. Its children are all `Text` or `Inline` subclass nodes. You can check whether an element's context is inline simply by checking whether its immediate parent is a `TextElement` instance (including subclasses). This is handy for nodes like `image` that can appear both inline and as standalone body elements. If passing children to `__init__()`, make sure to set `text` to ``''`` or some other suitable value. r~có�—|dk7r't|«}tj|||g|¢­i|¤Žytj||g|¢­i|¤Žy©Nr~)rˆr·rv)r r�r‚r=r¿Útextnodes rrvzTextElement.__init__isQ€Ø �2Š:ܘD“zˆHÜ × Ñ ˜T 9¨hð +¸ò +Ø)ó +ô × Ñ ˜T 9Ð F¨xÒ F¸:Ó FrN©r~r~)r8rlrmrnr rvrrrr�r�Ws„ñ ðÐØ?ôGrr�có—eZdZdZdd„Zy)ÚFixedTextElementz5An element which directly contains preformatted text.cóX—tj|||g|¢­i|¤Žd|jd<y)NÚpreservez xml:space)r�rvr¿)r r�r‚r=r¿s rrvzFixedTextElement.__init__vs,€Ü×јT 9¨dÐL°XÒLÀÒLØ'1ˆ�‰˜ Ò$rNr‘)r8rlrmrnrvrrrr“r“rs „á?ô2rr“có—eZdZdZy)Ú ResolvablerN)r8rlrmÚresolvedrrrr—r—s„à�Hrr—có—eZdZd„Zy)Ú BackLinkablecó,—|dj|«y)Nr¼r&)r Úrefids rÚ add_backrefzBackLinkable.add_backref†s€Ø ˆZÑ×Ñ Õ&rN)r8rlrmr�rrrršrš„s„ó'rršcó —eZdZy)ÚRootN©r8rlrmrrrrŸrŸŽó„ØrrŸcó —eZdZy)ÚTitularNr rrrr£r£’r¡rr£có—eZdZdZy)ÚPreBibliographicz×2Ñ2°3Ô7ð˜c™‘à" ^Ñ3�Ø—?‘? 3Ô'Ø(.¨s°© Ø(8ò)AÜ+2°4·<±<Ó+@ñ)AðB�FðØ—‘ Ó'¨1Ñ,Ó'ؘv t§¡°vÑ'>Ð?Ñ?�ؘTŸX™XÑ%Øð ð ˆU‰ ×ј2ÔØˆ�‰�‰ ؈ rcó®—t|d«D]D}||jvr|j|||||«Œ'||j|<||j|<ŒFy)aî `self.nameids` maps names to IDs, while `self.nametypes` maps names to booleans representing hyperlink type (True==explicit, False==implicit). This method updates the mappings. The following state transition table shows how `self.nameids` items ("id") and `self.nametypes` items ("type") change with new input (a call to this method), and what actions are performed ("implicit"-type system messages are INFO/1, and "explicit"-type system messages are ERROR/3): ==== ===== ======== ======== ======= ==== ===== ===== Old State Input Action New State Notes ----------- -------- ----------------- ----------- ----- id type new type sys.msg. dupname id type ==== ===== ======== ======== ======= ==== ===== ===== - - explicit - - new True - - implicit - - new False - False explicit - - new True old False explicit implicit old new True - True explicit explicit new - True old True explicit explicit new,old - True [#]_ - False implicit implicit new - False old False implicit implicit new,old - False - True implicit implicit new - True old True implicit implicit new old True ==== ===== ======== ======== ======= ==== ===== ===== .. [#] Do not clear the name-to-id map or invalidate the old target if both old and new targets are external and refer to identical URIs. The new target is invalidated regardless. rºN)rdrÌÚset_duplicate_name_idrÍ)r r_r}ròÚexplicitrãs rÚset_name_id_mapzdocument.set_name_id_map}sX€ôB˜$˜w™-Ö(ˆDØ�t—|‘|Ñ#Ø×*Ñ*¨4°°T¸7ÀHÕMð&(�— ‘ ˜TÑ"Ø'/�—‘˜tÒ$ñ )rcó¬—|j|}|j|}|xs||j|<|rµ|r†d}|�K|j|} d|vr|d} | drd| vr | d| k(rd}|dkDrt| |«d|j|<|jj |d|z|g|¬«} |�|| z }t||«ng||j|<|�V|j|} t| |«n:|�,|s*d|j|<|j|} t| |«t||«|r|s.|�+|jj d|z|g|¬«} |�|| z }yyyy)NrNÚrefurirºraz%Duplicate explicit target name: "%s".)r¼Ú base_nodez%Duplicate implicit target name: "%s".)rÌrÍr¸Údupnamer5Úsystem_messageÚinfo) r r_r}rãròrúÚold_idÚ old_explicitr#Úold_noderýrôs rrùzdocument.set_duplicate_name_id¦sœ€Ø—‘˜dÑ#ˆØ—~‘~ dÑ+ˆ Ø+Ò7¨xˆ�‰�tÑÙ ÙØ�ØÐ%Ø#Ÿx™x¨Ñ/�HØ 4Ñ'Ø!% h¡˜Ø$ WÒ-Ø (¨HÑ 4Ø (¨Ñ 2°fÒ <Ø$%˜Eؘq’yÜ ¨$Ô/Ø-1˜Ÿ ™  TÑ*Ø—m‘m×2Ñ2ØÐBÀTÑIØ ˜T¨Tð3ó3�ðÐ&ؘs‘N�Gܘ˜dÕ#à%'�— ‘ ˜TÑ"ØÐ%Ø#Ÿx™x¨Ñ/�HܘH dÕ+àÐ!©,Ø%)�— ‘ ˜TÑ"ØŸ8™8 FÑ+�ܘ $Ô'Ü �D˜$Ô Ù¡ °Ð1CØ—-‘-×$Ñ$Ø7¸$Ñ>ؘ¨ð%ó/ˆCðÐ"ؘ3‘‘ð#ð 2D  rcó—||jvSr)rÌrvs rÚhas_namezdocument.has_nameÐs€Ø�t—|‘|Ð#Ð#rcóR—|j||«}|j|||d¬«y)NF©rú©r÷rû©r Útargetròr}s rÚnote_implicit_targetzdocument.note_implicit_targetÔs)€Ø �[‰[˜ Ó )ˆØ ×јV R¨¸5ÐÕArcóR—|j||«}|j|||d¬«y)NTrr r s rÚnote_explicit_targetzdocument.note_explicit_targetØs)€Ø �[‰[˜ Ó )ˆØ ×јV R¨¸4ÐÕ@rcó`—|jj|dg«j|«y©NÚrefname)rÊrrà©r r_s rÚ note_refnamezdocument.note_refnameÜs%€Ø � ‰ × Ñ   i¡°"Ó5×<Ñ<¸TÕBrcó`—|jj|dg«j|«y)Nrœ)rËrràrs rÚ note_refidzdocument.note_refidßs%€Ø � ‰ ×јt G™}¨bÓ1×8Ñ8¸Õ>rcóh—|jj|«|dr|j|«yy)Nrº)rÇràr©r r s rÚnote_indirect_targetzdocument.note_indirect_targetâs0€Ø ×Ñ×$Ñ$ VÔ,Ø �'Š?Ø × Ñ ˜fÕ %ð rcó&—|j|«yr)r÷rs rÚnote_anonymous_targetzdocument.note_anonymous_targetçs€Ø � ‰ �FÕrcó\—|j|«|jj|«yr)r÷rÐrà©r Úfootnotes rÚnote_autofootnotezdocument.note_autofootnoteês"€Ø � ‰ �HÔØ ×Ñ×!Ñ! (Õ+rcó\—|j|«|jj|«yr)r÷rÑrà©r Úrefs rÚnote_autofootnote_refzdocument.note_autofootnote_refîs"€Ø � ‰ �CÔØ ×Ñ×%Ñ% cÕ*rcó\—|j|«|jj|«yr)r÷rÒràrs rÚnote_symbol_footnotezdocument.note_symbol_footnoteòs"€Ø � ‰ �HÔØ ×Ñ×$Ñ$ XÕ.rcó\—|j|«|jj|«yr)r÷rÓràr s rÚnote_symbol_footnote_refz!document.note_symbol_footnote_refös"€Ø � ‰ �CÔØ ×!Ñ!×(Ñ(¨Õ-rcó\—|j|«|jj|«yr)r÷rÔràrs rÚ note_footnotezdocument.note_footnoteús €Ø � ‰ �HÔØ �‰×јhÕ'rcó¤—|j|«|jj|dg«j|«|j |«yr)r÷rÎrràrr s rÚnote_footnote_refzdocument.note_footnote_refþóA€Ø � ‰ �CÔØ ×Ñ×%Ñ% c¨)¡n°bÓ9×@Ñ@ÀÔEØ ×ј#Õrcó:—|jj|«yr)rÕrà)r Úcitations rÚ note_citationzdocument.note_citations€Ø �‰×јhÕ'rcó¤—|j|«|jj|dg«j|«|j |«yr)r÷rÏrràrr s rÚnote_citation_refzdocument.note_citation_refr+rcó—t|«}||jvrB|jjd|z|¬«}|�||z }|j|}t ||«||j|<||j t |«<y)Nz-Duplicate substitution definition name: "%s".)rþ)Úwhitespace_normalize_namerÈr5ÚerrorrÿrÉÚfully_normalize_name)r ÚsubdefÚdef_nameròrãrôÚoldnodes rÚnote_substitution_defzdocument.note_substitution_def s�€Ü(¨Ó2ˆØ �4×)Ñ)Ñ )Ø—-‘-×%Ñ%ØEÈÑLØ &ð&ó(ˆCðÐ"ؘ3‘�Ø×,Ñ,¨TÑ2ˆGÜ �G˜TÔ "à'-ˆ×јtÑ$à>Bˆ×ÑÔ 4°TÓ :Ò;rcó —t|«|d<yr)r2)r Úsubrefrs rÚnote_substitution_refzdocument.note_substitution_refs€Ü5°gÓ>ˆˆyÒrcó<—|jj||«yr)rÞÚ add_pending)r ÚpendingÚprioritys rÚ note_pendingzdocument.note_pendings€Ø ×Ñ×$Ñ$ W¨hÕ7rcó:—|jj|«yr)rÙrà©r Úmessages rÚnote_parse_messagezdocument.note_parse_message s€Ø ×Ñ×"Ñ" 7Õ+rcó:—|jj|«yr)rÚràrBs rÚnote_transform_messagezdocument.note_transform_message#s€Ø ×Ñ×&Ñ& wÕ/rcó:—||_|€||_y|dz|_yrò)r.r0)r r-Úoffsets rÚ note_sourcezdocument.note_source&s#€Ø$ˆÔØ ˆ>Ø &ˆDÕ à &¨¡ ˆDÕ rcó®—|j|j|jfi|j¤Ž}|j|_|j |_|Sr)r7r©r5r¿r-r/rrs rr&z document.copy-sE€Øˆd�n‰n˜TŸ]™]¨D¯M©Mñ0Ø#Ÿ™ñ0ˆà—[‘[ˆŒ Ø—9‘9ˆŒØˆ rcó—|jsot«|_|jttf«}|€'|j |j«|jS|j ||j«|jSr)ràrlr£Úmetaràr()r rds rÚget_decorationzdocument.get_decoration4se€Ø�ŠÜ(›lˆDŒOØ×7Ñ7¼Ä$¸ÓHˆE؈}Ø— ‘ ˜DŸO™OÔ,ð�‰Ðð— ‘ ˜E 4§?¡?Ô3Ø�‰Ðrrr�r†)!r8rlrmrnrvrçrr÷rûrùrr rrrrrrr"r$r&r(r*r.r0r8r;r@rDrFrIr&rMrrrr r Ús¡„ñòZòxóó+óZ'0òR(òT$óBóAòCò?ò&ò ò,ò+ò/ò.ò(òò (òó Cò?ó8ò,ò0ò+òórr có —eZdZy)ÚtitleNr rrrrOrOCrµrrOcó —eZdZy)ÚsubtitleNr rrrrQrQDrµrrQcó —eZdZy)ÚrubricNr rrrrSrSErµrrScó—eZdZdZy)rLz;Container for "invisible" bibliographic data, or meta-data.Nr¦rrrrLrLLs„ÚErrLcó —eZdZy)ÚdocinfoNr rrrrVrVTrµrrVcó —eZdZy)ÚauthorNr rrrrXrXUrµrrXcó —eZdZy)ÚauthorsNr rrrrZrZVrµrrZcó —eZdZy)Ú organizationNr rrrr\r\Wrµrr\có —eZdZy)ÚaddressNr rrrr^r^Xrµrr^có —eZdZy)ÚcontactNr rrrr`r`Yrµrr`có —eZdZy)ÚversionNr rrrrbrbZrµrrbcó —eZdZy)ÚrevisionNr rrrrdrd[rµrrdcó —eZdZy)ÚstatusNr rrrrfrf\rµrrfcó —eZdZy)ÚdateNr rrrrhrh]rµrrhcó —eZdZy)Ú copyrightNr rrrrjrj^rµrrjcó—eZdZd„Zd„Zy)ràcó¸—t|j«rt|jdt«s|j dt««|jdS©Nr)rcr=rHÚheaderr(r s rÚ get_headerzdecoration.get_headergs?€Ü�4—=‘=Ô!¬°D·M±MÀ!Ñ4DÄfÔ)MØ �K‰K˜œ6›8Ô $Ø�}‰}˜QÑÐrcó¶—t|j«rt|jdt«s|j t««|jdS)Nr…)rcr=rHÚfooterràr s rÚ get_footerzdecoration.get_footerls=€Ü�4—=‘=Ô!¬°D·M±MÀ"Ñ4EÄvÔ)NØ �K‰Kœ›Ô !Ø�}‰}˜RÑ Ð rN)r8rlrmrorrrrrràràes „ò ó !rràcó —eZdZy)rnNr rrrrnrnrrµrrncó —eZdZy)rqNr rrrrqrqsrµrrqcó —eZdZy)ÚsectionNr rrrrvrvzrµrrvcó—eZdZdZy)Útopicaü Topics are terminal, "leaf" mini-sections, like block quotes with titles, or textual figures. A topic is just like a section, except that it has no subsections, and it doesn't have to conform to section placement rules. Topics are allowed wherever body elements (list, table, etc.) are allowed, but only at the top level of a section or document. Topics cannot nest inside topics, sidebars, or body elements; you can't have a topic inside a table, list, block quote, etc. Nr¦rrrrxrx}s„ò rrxcó—eZdZdZy)ÚsidebaraŸ Sidebars are like miniature, parallel documents that occur inside other documents, providing related or reference material. A sidebar is typically offset by a border and "floats" to the side of the page; the document's main text may flow around it. Sidebars can also be likened to super-footnotes; their content is outside of the flow of the document's main text. Sidebars are allowed wherever body elements (list, table, etc.) are allowed, but only at the top level of a section or document. Sidebars cannot nest inside sidebars, topics, or body elements; you can't have a sidebar inside a table, list, block quote, etc. Nr¦rrrrzrz‹s„ò rrzcó —eZdZy)Ú transitionNr rrrr|r|œrµrr|có —eZdZy)Ú paragraphNr rrrr~r~£rµrr~có —eZdZy)ÚcompoundNr rrrr€r€¤rµrr€có —eZdZy)Ú containerNr rrrr‚r‚¥rµrr‚có —eZdZy)Ú bullet_listNr rrrr„r„¦rµrr„có —eZdZy)Úenumerated_listNr rrrr†r†§rµrr†có —eZdZy)Ú list_itemNr rrrrˆrˆ¨rµrrˆcó —eZdZy)Údefinition_listNr rrrrŠrŠ©rµrrŠcó —eZdZy)Údefinition_list_itemNr rrrrŒrŒªrµrrŒcó —eZdZy)ÚtermNr rrrrŽrŽ«rµrrŽcó —eZdZy)Ú classifierNr rrrr�r�¬rµrr�có —eZdZy)Ú definitionNr rrrr’r’­rµrr’có —eZdZy)Ú field_listNr rrrr”r”®rµrr”có —eZdZy)ÚfieldNr rrrr–r–¯rµrr–có —eZdZy)Ú field_nameNr rrrr˜r˜°rµrr˜có —eZdZy)Ú field_bodyNr rrrršrš±rµrršcó—eZdZdZy)Úoptionr~N©r8rlrmr rrrrœrœ´s„àÑrrœcó—eZdZd„Zy)Úoption_argumentcóR—|jdd«tj|«zS)NÚ delimiterrÅ)rr�r+r s rr+zoption_argument.astext»s#€Ø�x‰x˜  SÓ)¬K×,>Ñ,>¸tÓ,DÑDÐDrN©r8rlrmr+rrrrŸrŸ¹s„óErrŸcó—eZdZdZy)Ú option_groupz, Nr�rrrr¤r¤¿ó„àÑrr¤có —eZdZy)Ú option_listNr rrrr§r§Ärµrr§có—eZdZdZy)Úoption_list_itemz Nr�rrrr©r©Çr¥rr©có —eZdZy)Ú option_stringNr rrrr«r«Ìrµrr«có —eZdZy)Ú descriptionNr rrrr­r­Írµrr­có —eZdZy)Ú literal_blockNr rrrr¯r¯Îrµrr¯có —eZdZy)Ú doctest_blockNr rrrr±r±Ïrµrr±có —eZdZy)Ú math_blockNr rrrr³r³Ðrµrr³có —eZdZy)Ú line_blockNr rrrrµrµÑrµrrµcó—eZdZdZy)r/N)r8rlrmr"rrrr/r/Ôs„à �Frr/có —eZdZy)Ú block_quoteNr rrrr¸r¸Ùrµrr¸có —eZdZy)Ú attributionNr rrrrºrºÚrµrrºcó —eZdZy)Ú attentionNr rrrr¼r¼Ûrµrr¼có —eZdZy)ÚcautionNr rrrr¾r¾Ürµrr¾có —eZdZy)ÚdangerNr rrrrÀrÀÝrµrrÀcó —eZdZy)r3Nr rrrr3r3Þrµrr3có —eZdZy)Ú importantNr rrrrÃrÃßrµrrÃcó —eZdZy)ÚnoteNr rrrrÅrÅàrµrrÅcó —eZdZy)ÚtipNr rrrrÇrÇárµrrÇcó —eZdZy)ÚhintNr rrrrÉrÉârµrrÉcó —eZdZy)ÚwarningNr rrrrËrËãrµrrËcó —eZdZy)Ú admonitionNr rrrrÍrÍärµrrÍcó —eZdZy)ÚcommentNr rrrrÏrÏårµrrÏcó —eZdZy)Úsubstitution_definitionNr rrrrÑrÑærµrrÑcó —eZdZy)r Nr rrrr r çrµrr có —eZdZy)rNr rrrrrèrµrrcó —eZdZy)r-Nr rrrr-r-érµrr-có —eZdZy)ÚlabelNr rrrrÖrÖêrµrrÖcó —eZdZy)ÚfigureNr rrrrØrØërµrrØcó —eZdZy)ÚcaptionNr rrrrÚrÚìrµrrÚcó —eZdZy)ÚlegendNr rrrrÜrÜírµrrÜcó —eZdZy)ÚtableNr rrrrÞrÞîrµrrÞcó —eZdZy)ÚtgroupNr rrrràràïrµrràcó —eZdZy)ÚcolspecNr rrrrârâðrµrrâcó —eZdZy)ÚtheadNr rrrräräñrµrräcó —eZdZy)ÚtbodyNr rrrræræòrµrræcó —eZdZy)ÚrowNr rrrrèrèórµrrècó —eZdZy)ÚentryNr rrrrêrêôrµrrêcó—eZdZdZdd„Zd„Zy)rz‘ System message element. Do not instantiate this class directly; use ``document.reporter.info/warning/error/severe()`` instead. Ncó®—|jdd«}|rtd|«}|f|z} tj||g|¢­i|¤Žy#t d|›�«‚xYw)Nr�r~zsystem_message: children=)r*r~r·rvÚprint)r rCr=r¿r�Úps rrvzsystem_message.__init__s`€Ø—N‘N ;°Ó3ˆ ٠ܘ"˜gÓ&ˆAØ�t˜h‘ˆHð Ü × Ñ ˜T 9Ð F¨xÒ F¸:Ó Føð Ý ±8Ð=Ô >Ø ús ¨AÁAc ó~—|jdd«}|d›d|›d|d›d|d›d tj|«›� S) Nr/r~r-Ú:z: (rbÚ/r#z) )rr·r+)r r/s rr+zsystem_message.astext s?€Ø�x‰x˜ Ó#ˆØ&*¨8£n²d¸DÀ»LØ&*¨7£m´W·^±^ÀDÔ5IðKð Krr)r8rlrmrnrvr+rrrrr÷s„ñó óKrrcó*—eZdZdZ dd„Zdd„Zd„Zy)r>aF The "pending" element is used to encapsulate a pending operation: the operation (transform), the point at which to apply it, and any data it requires. Only the pending operation's location within the document is stored in the public document tree (by the "pending" object itself); the operation and its data are stored in the "pending" object's internal instance attributes. For example, say you want a table of contents in your reStructuredText document. The easiest way to specify where to put it is from within the document, with a directive:: .. contents:: But the "contents" directive can't do its work until the entire document has been parsed and possibly transformed to some extent. So the directive code leaves a placeholder behind that will trigger the second phase of its processing, something like this:: + internal attributes Use `document.note_pending()` so that the `docutils.transforms.Transformer` stage of processing can run all pending transforms. Ncó^—tj||g|¢­i|¤Ž||_ |xsi|_yr)r·rvÚ transformÚdetails)r rôrõr�r=r¿s rrvzpending.__init__-s8€ä×ј˜yÐB¨8ÒB°zÒBà"ˆŒð ð’} "ˆŒ ØIrc óN‡‡—dd|jj›d|jj›�dg}t|jj ««}|D�] \}}t |t«rX|jdd›|›d�«|j|j«j«D�cgc] }dd›|›�‘Œ c}«Œo|r‚t |t«rrt |d t«r_|jdd›|›d�«|D]B}|j|j«j«D�cgc] }dd›|›�‘Œ c}«ŒDŒó|jdd›|›d |›�«�Œtj|‰‰«djˆˆfd „|D««zScc}wcc}w) Nz.. internal attributes:z .transform: Ú.z .details:r~z>7rðz>9rr”c3ó4•K—|]}d‰‰z›|›d�–—Œy­w)rkr¨Nrr¥s €€rr§z"pending.pformat..Ms"øèø€ð1Ù&/™dð,2°Eª>º4Ô@Ù&/ùsƒ)rôrlr8rrõrÁrHrràr¾r$r«rTr·r€) r r"r#Ú internalsrõrîrr/rÈs `` rr$zpending.pformat8s„ù€Ù.Ø15·±×1JÓ1JØ15·±×1HÒ1HðJà%ð'ˆ ô˜Ÿ™×+Ñ+Ó-Ó.ˆÜ!‰JˆC�ܘ%¤Ô&Ø× Ñ ªR²Ð!5Ô6Ø× Ñ Ø.3¯m©m«o×.HÑ.HÔ.Jó"LÙ.J dò.0±Ò"6Ø.Jñ"LõMáÜ  ¬Ô-Ü   q¡¬4Ô0Ø× Ñ ªR²Ð!5Ô6Û�AØ×$Ñ$Ø23·)±)³+×2HÑ2HÔ2Jó&LÙ2J¨$ò24±TÒ&:Ø2Jñ&LõMñð× Ñ ²²C¹Ð!?Ö@ð"ô—‘  f¨eÓ4Ø—'‘'ô1Ù&/ó1ó1ñ1ð 2ùò"Lùò&Ls Â4F Ä6F" cóæ—|j|j|j|jfi|j¤Ž}|j |_|j |_|j|_|Sr)r7rôrõr�r¿rr-r/rrs rr&z pending.copyPsV€Øˆd�n‰n˜TŸ^™^¨T¯\©\¸4¿>¹>ñ0Ø#Ÿ™ñ0ˆàŸ™ˆŒ Ø—[‘[ˆŒ Ø—9‘9ˆŒØˆ rr�rj)r8rlrmrnrvr$r&rrrr>r>s„ñð4+/Øó Jó2ó0rr>có—eZdZdZy)Úrawz@ Raw data that is to be passed untouched to the Writer. Nr¦rrrrürüYs„òrrücó —eZdZy)ÚemphasisNr rrrrþrþdrµrrþcó —eZdZy)ÚstrongNr rrrrrerµrrcó —eZdZy)ÚliteralNr rrrrrfrµrrcó —eZdZy)Ú referenceNr rrrrrgrµrrcó —eZdZy)Úfootnote_referenceNr rrrrrhrµrrcó —eZdZy)Úcitation_referenceNr rrrrrirµrrcó —eZdZy)Úsubstitution_referenceNr rrrr r jrµrr có —eZdZy)Útitle_referenceNr rrrr r krµrr có —eZdZy)Ú abbreviationNr rrrrrlrµrrcó —eZdZy)ÚacronymNr rrrrrmrµrrcó —eZdZy)Ú superscriptNr rrrrrnrµrrcó —eZdZy)Ú subscriptNr rrrrrorµrrcó —eZdZy)ÚmathNr rrrrrprµrrcó—eZdZd„Zy)Úimagecó&—|jdd«S)NÚaltr~r=r s rr+z image.astextus€Ø�x‰x˜˜rÓ"Ð"rNr¢rrrrrss„ó#rrcó —eZdZy)ÚinlineNr rrrrryrµrrcó —eZdZy)Ú problematicNr rrrrrzrµrrcó —eZdZy)Ú generatedNr rrrr r {rµrr aA Text abbreviation acronym address admonition attention attribution author authors block_quote bullet_list caption caution citation citation_reference classifier colspec comment compound contact container copyright danger date decoration definition definition_list definition_list_item description docinfo doctest_block document emphasis entry enumerated_list error field field_body field_list field_name figure footer footnote footnote_reference generated header hint image important inline label legend line line_block list_item literal literal_block math math_block meta note option option_argument option_group option_list option_list_item option_string organization paragraph pending problematic raw reference revision row rubric section sidebar status strong subscript substitution_definition substitution_reference subtitle superscript system_message table target tbody term tgroup thead tip title title_reference topic transition version warningcó4—eZdZdZdZ d„Zd„Zd„Zd„Zd„Z y) Ú NodeVisitora² "Visitor" pattern [GoF95]_ abstract superclass implementation for document tree traversals. Each node class has corresponding methods, doing nothing by default; override individual methods for specific and useful behaviour. The `dispatch_visit()` method is called by `Node.walk()` upon entering a node. `Node.walkabout()` also calls the `dispatch_departure()` method before exiting a node. The dispatch methods call "``visit_`` + node class name" or "``depart_`` + node class name", resp. This is a base class for visitors whose ``visit_...`` & ``depart_...`` methods must be implemented for *all* compulsory node types encountered (such as for `docutils.writers.Writer` subclasses). Unimplemented methods will raise exceptions (except for optional nodes). For sparse traversals, where only certain node types are of interest, use subclass `SparseNodeVisitor` instead. When (mostly or entirely) uniform processing is desired, subclass `GenericNodeVisitor`. .. [GoF95] Gamma, Helm, Johnson, Vlissides. *Design Patterns: Elements of Reusable Object-Oriented Software*. Addison-Wesley, Reading, MA, USA, 1995. )rLcó—||_yr)r ©r r s rrvzNodeVisitor.__init__Ès €Ø ˆ� rcóÜ—|jj}t|d|z|j«}|jj j d|j›d|›�«||«S)zª Call self."``visit_`` + node class name" with `node` as parameter. If the ``visit_...`` method does not exist, call self.unknown_visit. Úvisit_z2docutils.nodes.NodeVisitor.dispatch_visit calling ú for )r7r8r|Ú unknown_visitr r5r6©r r_Ú node_nameÚmethods rr9zNodeVisitor.dispatch_visitËs^€ð —N‘N×+Ñ+ˆ ܘ˜x¨)Ñ3°T×5GÑ5GÓHˆØ � ‰ ×Ñ×$Ò$à�‹¡ ð +ô ,ñ�d‹|ÐrcóÜ—|jj}t|d|z|j«}|jj j d|j›d|›�«||«S)z° Call self."``depart_`` + node class name" with `node` as parameter. If the ``depart_...`` method does not exist, call self.unknown_departure. Údepart_z6docutils.nodes.NodeVisitor.dispatch_departure calling r')r7r8r|Úunknown_departurer r5r6r)s rrEzNodeVisitor.dispatch_departureØs^€ð —N‘N×+Ñ+ˆ ܘ˜y¨9Ñ4°d×6LÑ6LÓMˆØ � ‰ ×Ñ×$Ò$à�‹¡ ð +ô ,ñ�d‹|Ðrcóä—|jjjs"|jj|j vr.t |j›d|jj›�«‚y)zk Called when entering unknown `Node` types. Raise an exception unless overridden. z visiting unknown node type: N©r r©Ústrict_visitorr7r8Úoptionalr!rs rr(zNodeVisitor.unknown_visitåóW€ð �M‰M× "Ñ "× 1Ò 1Ø�~‰~×&Ñ&¨d¯m©mÑ;Ü%à—>“> 4§>¡>×#:Ò#:ð<ó=ð =ð€à—)‘)“+ˆØ � ‰ ×ј7Ô#Ø ×Ñ× Ñ  §¡Ô-؈� rcóB—|jj«|_y)z#Restore the previous acting parent.N)rKr*r rs rr=z!TreeCopyVisitor.default_departurePs€à×'Ñ'×+Ñ+Ó-ˆ� rN)r8rlrmrnrvrMr;r=rrrrIrI;s„ñòò òó.rrIcó—eZdZdZy)ÚTreePruningExceptionz÷ Base class for `NodeVisitor`-related tree pruning exceptions. Raise subclasses from within ``visit_...`` or ``depart_...`` methods called from `Node.walk()` and `Node.walkabout()` tree traversals to prune the tree traversed. Nr¦rrrrRrRUó„òrrRcó—eZdZdZy)r:z… Do not visit any children of the current node. The current node's siblings and ``depart_...`` method are not affected. Nr¦rrrr:r:`ó„òrr:có—eZdZdZy)r?z� Do not visit any more siblings (to the right) of the current node. The current node's children and its ``depart_...`` method are not affected. Nr¦rrrr?r?hrUrr?có—eZdZdZy)r;zq Do not visit the current node's children, and do not call the current node's ``depart_...`` method. Nr¦rrrr;r;prUrr;có—eZdZdZy)r<z Do not call the current node's ``depart_...`` method. The current node's children and siblings are not affected. Nr¦rrrr<r<xrUrr<có—eZdZdZy)Ú NodeFoundz¥ Raise to indicate that the target of a search has been found. This exception must be caught by the client; it is not caught by the traversal code. Nr¦rrrrZrZ€s„òrrZcó—eZdZdZy)r@a< Stop the traversal altogether. The current node's ``depart_...`` method is not affected. The parent nodes ``depart_...`` methods are also called as usual. No other nodes are visited. This is an alternative to NodeFound that does not cause exception handling to trickle up to the caller. Nr¦rrrr@r@‰rSrr@cóˆ—|j«}|jt«}|jt«}t j d|«j dd«jd«}tjddj|j«««}tjd|«}t|«S)aý Convert `string` into an identifier and return it. Docutils identifiers will conform to the regular expression ``[a-z](-?[a-z0-9]+)*``. For CSS compatibility, identifiers (the "class" and "id" attributes) should have no underscores, colons, or periods. Hyphens may be used. - The `HTML 4.01 spec`_ defines identifiers based on SGML tokens: ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods ("."). - However the `CSS1 spec`_ defines identifiers based on the "name" token, a tighter interpretation ("flex" tokenizer notation; "latin1" and "escape" 8-bit characters have been replaced with entities):: unicode \[0-9a-f]{1,4} latin1 [¡-ÿ] escape {unicode}|\[ -~¡-ÿ] nmchar [-a-z0-9]|{latin1}|{escape} name {nmchar}+ The CSS1 "nmchar" rule does not include underscores ("_"), colons (":"), or periods ("."), therefore "class" and "id" attributes should not contain these characters. They should be replaced with hyphens ("-"). Combined with HTML's requirements (the first character must be a letter; no "unicode", "latin1", or "escape" characters), this results in the ``[a-z](-?[a-z0-9]+)*`` pattern. .. _HTML 4.01 spec: https://www.w3.org/TR/html401 .. _CSS1 spec: https://www.w3.org/TR/REC-CSS1 ÚNFKDÚasciiÚignorerìrÅr~)rÂÚ translateÚ_non_id_translate_digraphsÚ_non_id_translateÚ unicodedataÚ normalizeÚencodeÚdecodeÚ _non_id_charsÚsubr€r�Ú_non_id_at_endsrŒ)Ústringr}s rrðrð”sš€ðF �‰‹€BØ �‰Ô0Ó 1€BØ �‰Ô'Ó (€Bô × Ñ Ø �Bó ß™˜w¨Ó1·&±&¸³/ðô × Ñ ˜3 §¡¨¯©«Ó 4Ó 5€BÜ × Ñ ˜R Ó $€BÜ ˆr‹7€Nrz [^a-z0-9]+z ^[-0-9]+|-+$éøÚoiÚdi'Úhi1r,iBÚligÚti€ÚbiƒiˆrÔiŒi’Úfi™Úkišižréi¥rîi«i­i´Úyi¶ÚziåÚgi%i4i5i6i7Úji<i?rwi@iGÚeiIiKÚqiMÚriOÚszÚaeÚoeÚdbÚqp)éßéæiSi8i9cób—|dj|«|dj|«d|_y)Nr»rºra)ràr.r{)r_rãs rrÿrÿòs0€ØˆÑ×јDÔ!؈�M×јÔð€D…Orcó\—dj|j«j««S)z.Return a case- and whitespace-normalized name.rÅ)r€rÂr�©rãs rr4r4ús €à �8‰8�D—J‘J“L×&Ñ&Ó(Ó )Ð)rcó@—dj|j««S)z$Return a whitespace-normalized name.rÅ)r€r�r„s rr2r2ÿs€à �8‰8�D—J‘J“LÓ !Ð!rcóF—|jdd«jdd«S)zDEscape string values that are elements of a list, for serialization.r}z\\rÅz\ )r©rs rrÇrÇ s €à �=‰=˜˜uÓ %× -Ñ -¨c°5Ó 9Ð9rcó —d|zS)zQuote attributes for pseudo-xmlz"%s"rr‡s rrßrß s €à �E‰>Ðr)FF)£rnÚ __docformat__Ú collectionsrÚrer‰rQrcrrŒrrrzr†rˆr·r�r“r—ršrŸr£r¥r¨rªr¬r®r°r²r´r·r¹r»r½r¿rÁrÄr rOrQrSrLrVrXrZr\r^r`rbrdrfrhrjràrnrqrvrxrzr|r~r€r‚r„r†rˆrŠrŒrŽr�r’r”r–r˜ršrœrŸr¤r§r©r«r­r¯r±r³rµr/r¸rºr¼r¾rÀr3rÃrÅrÇrÉrËrÍrÏrÑr rr-rÖrØrÚrÜrÞràrârärærèrêrr>rürþrrrrrr r rrrrrrrrr r�Únode_class_namesr"r6r8r?rArCrGrIÚ ExceptionrRr:r?r;r<rZr@rðÚcompilergrirbrarÿr4r2rÇrßrrrÚr�shðñ ð"#€ åÛ Û ÛÛ÷^ñ^ôB �#ôò ô ôG7ˆ4�ôG7ôT] 0ˆdô] 0ô@G�'ôGô62�{ô2÷ñ÷ 'ñ'÷ ñ ÷ ñ ÷GñG÷ ñ ô Ð!ô ÷ ñ ÷ ñ ô ˆdô ô�ôô�Ôô*ˆdô*ô9Ð ô9÷ ñ ÷ ñ ô �*ô ô1�ô1÷3ñ3ôbˆt�Z ôbôR :ˆGÐ% {Ô9Ü<ˆwÐ(¨+Ô<Ü(ˆW�kÔ(ôFÐ ˜WôFô,ˆm˜WÔ+Ü.ˆ]˜KÔ.Ü+ˆm˜WÔ+Ü4�= +Ô4Ü4ˆmÐ-Ô4Ü/ˆm˜[Ô/Ü/ˆm˜[Ô/Ü0ˆ}˜kÔ0Ü.ˆ]˜KÔ.Ü,ˆ=˜+Ô,Ü1� ˜{Ô1ô !�˜Wô !ô(ˆZ˜Ô'Ü'ˆZ˜Ô'ô)ˆj˜'Ô(ô ˆJ˜ô ôˆj˜'ôô",�˜WÔ+ô,�˜Ô+Ü&ˆw˜Ô&Ü'�˜Ô'Ü,�*˜gÔ,Ü0�j 'Ô0Ü$��gÔ$Ü0�j 'Ô0Ü/˜4 Ô/Ü#ˆ4�Ô#Ü)��{Ô)Ü%��wÔ%Ü+�˜WÔ+Ü ˆD�'Ô Ü)��{Ô)Ü%��wÔ%ôˆT�7ôô E�d˜KôEô  �4˜ô ô -�*˜gÔ,ô �t˜Wô ô -�D˜+Ô,Ü&�$˜Ô&Ü4�GÐ-Ô4Ü4�GÐ-Ô4Ü1�Ð*Ô1Ü(�˜'Ô(ôˆ4�ôô *�'˜7Ô)Ü*�$˜ Ô*Ü*� ˜GÔ*Ü(ˆj˜'Ô(Ü'ˆZ˜Ô'Ü&ˆJ˜Ô&Ü*� ˜GÔ*Ü%ˆ:�wÔ%Ü$ˆ*�gÔ$Ü%ˆ:�wÔ%Ü(ˆj˜'Ô(Ü+�˜WÔ+Ü9ˆg�yÐ"2Ô9ÜD˜g y°+ÔDÜGˆW�i ¨°jÔGÜIˆw˜  g¨w¸ ÔIÜIˆw˜  g¨w¸ ÔIÜ$ˆD�+Ô$Ü$ˆW�gÔ$Ü&ˆd�KÔ&Ü!ˆT�7Ô!Ü#ˆG�WÔ#Ü!ˆT�7Ô!Ü"ˆd�GÔ"Ü ˆD�'Ô Ü ˆD�'Ô Üˆ$�ÔÜ ˆD�'Ô ôK�W˜lÐ,<¸gôKô4Eˆg�y 'ôEôPˆ'�6Ð+Ð-=ôô*ˆv�{Ô)Ü'ˆV�[Ô'Ü(ˆf�kÔ(Ü@�˜ ¨kÔ@Ü@˜ ¨kÔ@Ü@˜ ¨kÔ@Ü7˜V [Ô7Ü0�f˜kÔ0Ü-�6˜;Ô-Ü(ˆf�kÔ(Ü,�&˜+Ô,Ü*�˜ Ô*Ü%ˆ6�;Ô%ô#ˆG�V˜Wô#ô (ˆV�[Ô'Ü,�&˜+Ô,Ü*�˜ Ô*ð÷6Šu‹wð7ð87÷Z=ñZ=öz˜ ôö"˜ô"ó6ó!ó ó<ñÐ&Ô'ö.Ð(ô.ö4˜9ôöÐ'ôöÐ'ôöÐ#ôöÐ(ôöÐ$ôöÐ(ôó-ð`�— ’ ™<Ó(€ Ø�"—*’*™^Ó,€ð"Ù ‰Cð"á ‰Cð"ñ ‰Cð"ñ ‰Cð "ñ  ‰Cð "ñ  ‰Cð "ñ ‰Cð"ñ ‰Cð"ñ ‰Cð"ñ ‰Cð"ñ ‰Cð"ñ ‰Cð"ñ ‰Cð"ñ ‰Cð"ñ ‰Cð"ñ  ‰Cð!"ñ" ‰Cñ#"ñ$ ‰Cð%"ñ& ‰Cð'"ñ( ‰Cð)"ñ* ‰Cð+"ñ, ‰Cð-"ñ. ‰Cð/"ñ0 ‰Cð1"ñ2 ‰Cð3"ñ4 ‰Cð5"ñ6 ‰Cð7"ñ8 ‰Cð9"ñ: ‰Cð;"ñ< ‰Cð="ñ> ‰Cð?"ñ@ ‰CðA"ñB ‰CñC"ÐñH Ù Ù Ù Ù ò Ðóó*ó "ó :ô r