[文档]defheading(state:StateBlock,startLine:int,endLine:int,silent:bool):LOGGER.debug("entering heading: %s, %s, %s, %s",state,startLine,endLine,silent)pos=state.bMarks[startLine]+state.tShift[startLine]maximum=state.eMarks[startLine]# if it's indented more than 3 spaces, it should be a code blockifstate.sCount[startLine]-state.blkIndent>=4:returnFalsech:Optional[int]=state.srcCharCode[pos]# /* # */ifch!=0x23orpos>=maximum:returnFalse# count heading levellevel=1pos+=1try:ch=state.srcCharCode[pos]exceptIndexError:ch=None# /* # */whilech==0x23andpos<maximumandlevel<=6:level+=1pos+=1try:ch=state.srcCharCode[pos]exceptIndexError:ch=Noneiflevel>6or(pos<maximumandnotisSpace(ch)):returnFalseifsilent:returnTrue# Let's cut tails like ' ### ' from the end of stringmaximum=state.skipSpacesBack(maximum,pos)tmp=state.skipCharsBack(maximum,0x23,pos)# #iftmp>posandisSpace(state.srcCharCode[tmp-1]):maximum=tmpstate.line=startLine+1token=state.push("heading_open","h"+str(level),1)token.markup="########"[:level]token.map=[startLine,state.line]token=state.push("inline","",0)token.content=state.src[pos:maximum].strip()token.map=[startLine,state.line]token.children=[]token=state.push("heading_close","h"+str(level),-1)token.markup="########"[:level]returnTrue