def parseLinkDestination(self): """ Attempt to parse link destination, returning the string or None if no match.""" res = self.match(reLinkDestinationBraces) if res is not None: return unescape(res[1:len(res) - 1]) else: res2 = self.match(reLinkDestination) if res2 is not None: return unescape(res2) else: return None
def parseLinkTitle(self): """ Attempt to parse link title (sans quotes), returning the string or None if no match.""" title = self.match(reLinkTitle) if title: return unescape(title[1:len(title)-1]) else: return None
def finalize(self, block, line_number): """ Finalize a block. Close it and do any necessary postprocessing, e.g. creating string_content from strings, setting the 'tight' or 'loose' status of a list, and parsing the beginnings of paragraphs for reference definitions. Reset the tip to the parent of the closed block.""" if (not block.is_open): return 0 block.is_open = False if (line_number > block.start_line): block.end_line = line_number - 1 else: block.end_line = line_number if (block.t == "Paragraph"): block.string_content = "" for i, line in enumerate(block.strings): block.strings[i] = re.sub(r'^ *', '', line, re.MULTILINE) block.string_content = '\n'.join(block.strings) pos = self.inlineParser.parseReference( block.string_content, self.refmap) while (block.string_content[0] == "[" and pos): block.string_content = block.string_content[pos:] if (isBlank(block.string_content)): block.t = "ReferenceDef" break pos = self.inlineParser.parseReference( block.string_content, self.refmap) elif (block.t in ["ATXHeader", "SetextHeader", "HtmlBlock"]): block.string_content = "\n".join(block.strings) elif (block.t == "IndentedCode"): block.string_content = re.sub( r"(\n *)*$", "\n", "\n".join(block.strings)) elif (block.t == "FencedCode"): block.info = unescape(block.strings[0].strip()) if (len(block.strings) == 1): block.string_content = "" else: block.string_content = "\n".join(block.strings[1:]) + "\n" elif (block.t == "List"): block.tight = True numitems = len(block.children) i = 0 while (i < numitems): item = block.children[i] last_item = (i == numitems-1) if (self.endsWithBlankLine(item) and not last_item): block.tight = False break numsubitems = len(item.children) j = 0 while (j < numsubitems): subitem = item.children[j] last_subitem = j == (numsubitems - 1) if (self.endsWithBlankLine(subitem) and not (last_item and last_subitem)): block.tight = False break j += 1 i += 1 else: pass self.tip = block.parent
def finalize(self, block, line_number): """ Finalize a block. Close it and do any necessary postprocessing, e.g. creating string_content from strings, setting the 'tight' or 'loose' status of a list, and parsing the beginnings of paragraphs for reference definitions. Reset the tip to the parent of the closed block.""" if (not block.is_open): return 0 block.is_open = False if (line_number > block.start_line): block.end_line = line_number - 1 else: block.end_line = line_number if (block.t == "Paragraph"): block.string_content = "" for i, line in enumerate(block.strings): block.strings[i] = re.sub(r'^ *', '', line, re.MULTILINE) block.string_content = '\n'.join(block.strings) pos = self.inlineParser.parseReference(block.string_content, self.refmap) while (block.string_content[0] == "[" and pos): block.string_content = block.string_content[pos:] if (isBlank(block.string_content)): block.t = "ReferenceDef" break pos = self.inlineParser.parseReference(block.string_content, self.refmap) elif (block.t in ["ATXHeader", "SetextHeader", "HtmlBlock"]): block.string_content = "\n".join(block.strings) elif (block.t == "IndentedCode"): block.string_content = re.sub(r"(\n *)*$", "\n", "\n".join(block.strings)) elif (block.t == "FencedCode"): block.info = unescape(block.strings[0].strip()) if (len(block.strings) == 1): block.string_content = "" else: block.string_content = "\n".join(block.strings[1:]) + "\n" elif (block.t == "List"): block.tight = True numitems = len(block.children) i = 0 while (i < numitems): item = block.children[i] last_item = (i == numitems - 1) if (self.endsWithBlankLine(item) and not last_item): block.tight = False break numsubitems = len(item.children) j = 0 while (j < numsubitems): subitem = item.children[j] last_subitem = j == (numsubitems - 1) if (self.endsWithBlankLine(subitem) and not (last_item and last_subitem)): block.tight = False break j += 1 i += 1 else: pass self.tip = block.parent