o .&a@sddlmZGdddejjjZGdddeZGdddeZGdd d eZ Gd d d e Z 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 >/usr/lib/python3/dist-packages/awscli/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|_dSNli)_doc_has_handlerr)append LineItemNodeTagNoder( add_childparent)r rrrnoder r rrBs      zHTMLTree.add_tagcCs$|rd|}nd|}t|jj|S)Nstart_%send_%s)hasattrrstyle)r rr handler_namer r rr,Qs zHTMLTree._doc_has_handlercCs|jt|dSr)r(r0DataNoderr r rrYrzHTMLTree.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)r1r r1r r rr as z Node.__init__cCstr)NotImplementedErrorr r r rrdsz Node.writer)r"r#r$r rr r r rr9`s  r9cs6eZdZd fdd ZddZddZdd ZZS) r&Ncstt||g|_dSr)superr&r childrenr: __class__r rr is zStemNode.__init__cCs||_|j|dSr)r1r=r-)r childr r rr0mszStemNode.add_childcCs||dSr)_write_childrenr r r rrqszStemNode.writecCs|jD]}||qdSr)r=r)r rr@r r rrAts  zStemNode._write_childrenr)r"r#r$r r0rrA __classcell__r r r>rr&hs r&cs:eZdZdZd fdd ZddZddZd d ZZS) r/zP A generic Tag node. It will verify that handlers exist before writing. Ncs tt||||_||_dSr)r<r/r rr)r rrr1r>r rr }s zTagNode.__init__cCs"||||||dSr) _write_startrA _write_endr r r rrs  z TagNode.writecCs0d|j}t|j|rt|j||jdSdS)Nr3)rr5r6getattrrr rr7r r rrCs  zTagNode._write_startcCs,d|j}t|j|rt|j|dSdS)Nr4)rr5r6rErFr r rrDs  zTagNode._write_endNN) r"r#r$r%r rrCrDrBr r r>rr/ys r/cs2eZdZdfdd ZfddZddZZS) r.Ncstt|d||dSr*)r<r.r )r rr1r>r rr szLineItemNode.__init__cs||tt||dSr)_lstripr<r.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= isinstancer8lstriprrH)r r2r@foundr r rrHs   zLineItemNode._lstriprG)r"r#r$r rrHrBr r r>rr.s r.cs2eZdZdZd fdd ZddZddZZS) r8z0 A Node that contains only string data. Ncs6tt||t|tjstdt|||_dS)Nz Expecting string type, %s given.) r<r8r rIr string_types ValueErrortyper)r rr1r>r rr s  zDataNode.__init__cCs|j|_dSr)rrJrr r rrJr!zDataNode.lstripcCs`|jsdS|jr d}n|jd}|j}||}d|}|r)|d7}||dS)N )risspacesplittranslate_wordsjoinr )r rstr_data end_spacewordsr r rrs    zDataNode.writer)r"r#r$r%r rJrrBr r r>rr8s r8N) botocore.compatrrrr robjectrr9r&r/r.r8r r r rs &*