def _parse_paragraph(self, node, state):
<EOL>parent = (<EOL>state["<STR_LIT>"][node]<EOL>if node in state["<STR_LIT>"]<EOL>else state["<STR_LIT>"][node]<EOL>)<EOL>name = node.attrib["<STR_LIT:name>"] if "<STR_LIT:name>" in node.attrib else None<EOL>for field in ["<STR_LIT:text>", "<STR_LIT>"]:<EOL><INDENT>text = getattr(node, field)<EOL>text = text.strip() if text and self.strip else text<EOL>if not text:<EOL><INDENT>continue<EOL><DEDENT>for (rgx, replace) in self.replacements:<EOL><INDENT>text = rgx.sub(replace, text)<EOL><DEDENT>stable_id = (<EOL>f"<STR_LIT>"<EOL>f"<STR_LIT>"<EOL>f"<STR_LIT>"<EOL>f"<STR_LIT::>"<EOL>f"<STR_LIT>"<EOL>)<EOL>parts = {}<EOL>parts["<STR_LIT>"] = stable_id<EOL>parts["<STR_LIT:name>"] = name<EOL>parts["<STR_LIT>"] = state["<STR_LIT>"]<EOL>parts["<STR_LIT>"] = state["<STR_LIT>"]["<STR_LIT>"]<EOL>if isinstance(parent, Caption):<EOL><INDENT>if parent.table:<EOL><INDENT>parts["<STR_LIT>"] = parent.table.section<EOL><DEDENT>elif parent.figure:<EOL><INDENT>parts["<STR_LIT>"] = parent.figure.section<EOL><DEDENT>parts["<STR_LIT>"] = parent<EOL><DEDENT>elif isinstance(parent, Cell):<EOL><INDENT>parts["<STR_LIT>"] = parent.table.section<EOL>parts["<STR_LIT>"] = parent<EOL><DEDENT>elif isinstance(parent, Section):<EOL><INDENT>parts["<STR_LIT>"] = parent<EOL><DEDENT>elif isinstance(parent, Figure):  <EOL><INDENT>parts["<STR_LIT>"] = parent.section<EOL><DEDENT>elif isinstance(parent, Table):  <EOL><INDENT>parts["<STR_LIT>"] = parent.section<EOL><DEDENT>else:<EOL><INDENT>raise NotImplementedError(<EOL>f"<STR_LIT>"<EOL>f"<STR_LIT>"<EOL>)<EOL><DEDENT>paragraph = Paragraph(**parts)<EOL>state["<STR_LIT>"]["<STR_LIT>"] += <NUM_LIT:1><EOL>state["<STR_LIT>"]["<STR_LIT:text>"] = text<EOL>state["<STR_LIT>"]["<STR_LIT>"] = field<EOL>yield from self._parse_sentence(paragraph, node, state)<EOL><DEDENT>
Parse a Paragraph of the node.

        :param node: The lxml node to parse
        :param state: The global state necessary to place the node in context
            of the document as a whole.