o ?c@sddlmZGdddejjjZGdddZGdddZGdd d eZGd d d eZ Gd d d e Z GdddeZ dS))sixc@sHeZdZdZddZddZddZdd Zd d Zd d Z ddZ dS)DocStringParserz A simple HTML parser. Focused on converting the subset of HTML that appears in the documentation strings of the JSON models into simple ReST format. cCs d|_||_tjjj|dSN)treedocrmoves html_parser HTMLParser__init__selfrr ~/private/var/folders/cw/wlscbxl13mj6wd668h7l9g9sllkg5j/T/pip-target-b31awkwq/lib/python/botocore/docs/bcdoc/docstringparser.pyr szDocStringParser.__init__cCs tjjj|t|j|_dSr)rrrr resetHTMLTreerrr r r rrszDocStringParser.resetcCs,tjjj|||jt|j|_dSr) rrrr feedrwriterrr datar r rr s zDocStringParser.feedcCs*tjjj||jt|j|_dSr) rrrr closerrrrrr r rr&s zDocStringParser.closecCs|jj||ddS)N)attrsradd_tag)r tagrr r rhandle_starttag,zDocStringParser.handle_starttagcCs|jj|dddS)NF)is_startr)r rr r r handle_endtag/rzDocStringParser.handle_endtagcCs|j|dSr)radd_datarr r r handle_data2zDocStringParser.handle_dataN) __name__ __module__ __qualname____doc__r rrrrrr r r r rrs rc@s:eZdZdZddZdddZdd Zd d Zd d ZdS)rz A tree which handles HTML nodes. Designed to work with a python HTML parser, meaning that the current_node will be the most recently opened tag. When a tag is closed, the current_node moves up to the parent node. cCs ||_t|_|j|_g|_dSr)rStemNodehead current_nodeunhandled_tagsr r r rr =s zHTMLTree.__init__NTcCs`|||s|j|dS|r)|dkrt|}nt||}|j|||_dS|jj|_dSNZli)_doc_has_handlerr)append LineItemNodeTagNoder( add_childparent)r rrrnoder r rrCs      zHTMLTree.add_tagcCs$|rd|}nd|}t|jj|S)Nstart_%send_%s)hasattrrstyle)r rr handler_namer r rr+Rs zHTMLTree._doc_has_handlercCs|jt|dSr)r(r/DataNoderr r rrZrzHTMLTree.add_datacCs|j|jdSr)r'rrrr r rr]szHTMLTree.write)NT) r"r#r$r%r rr+rrr r r rr6s  rc@seZdZdddZddZdS)NodeNcCs ||_dSr)r0r r0r r rr bs z Node.__init__cCstr)NotImplementedErrorr r r rresz Node.writer)r"r#r$r rr r r rr8as  r8cs6eZdZd fdd ZddZddZdd ZZS) r&Ncst|g|_dSr)superr childrenr9 __class__r rr js  zStemNode.__init__cCs||_|j|dSr)r0r<r,)r childr r rr/nszStemNode.add_childcCs||dSr)_write_childrenr r r rrrszStemNode.writecCs|jD]}||qdSr)r<r)r rr?r r rr@us  zStemNode._write_childrenr)r"r#r$r r/rr@ __classcell__r r r=rr&is r&cs:eZdZdZd fdd ZddZddZd d ZZS) r.zP A generic Tag node. It will verify that handlers exist before writing. Ncst|||_||_dSr)r;r rr)r rrr0r=r rr s  zTagNode.__init__cCs"||||||dSr) _write_startr@ _write_endr r r rrs  z TagNode.writecCs0d|j}t|j|rt|j||jdSdS)Nr2)rr4r5getattrrr rr6r r rrBs  zTagNode._write_startcCs,d|j}t|j|rt|j|dSdS)Nr3)rr4r5rDrEr r rrCs  zTagNode._write_endNN) r"r#r$r%r rrBrCrAr r r=rr.zs r.cs2eZdZdfdd ZfddZddZZS) r-Ncstd||dSr*)r;r )r rr0r=r rr rzLineItemNode.__init__cs||t|dSr)_lstripr;rr r=r rrs zLineItemNode.writecCsD|jD]}t|tr||jrdSq||}|rdSqdS)z Traverses the tree, stripping out whitespace until text data is found :param node: The node to strip :return: True if non-whitespace data was found, False otherwise TF)r< isinstancer7lstriprrG)r r1r?foundr r rrGs   zLineItemNode._lstriprF)r"r#r$r rrGrAr r r=rr-s r-cs2eZdZdZd fdd ZddZddZZS) r7z0 A Node that contains only string data. Ncs0t|t|tstdt|||_dS)Nz Expecting string type, %s given.)r;r rHstr ValueErrortyper)r rr0r=r rr s   zDataNode.__init__cCs|j|_dSr)rrIrr r rrIr!zDataNode.lstripcCs`|jsdS|jr d}n|jd}|j}||}d|}|r)|d7}||dS)N )risspacesplitZtranslate_wordsjoinr )r rZstr_dataZ end_spacewordsr r rrs    zDataNode.writer)r"r#r$r%r rIrrAr r r=rr7s r7N) Zbotocore.compatrrrr rrr8r&r.r-r7r r r rs &+