def __apply_transformation( self, transform_state: TransformState, actual_tokens: List[MarkdownToken], actual_tokens_size: int, next_token: MarkdownToken, output_html: str, ) -> str: transform_state.add_trailing_text = None transform_state.add_leading_text = None transform_state.next_token = None if (transform_state.actual_token_index + 1) < actual_tokens_size: transform_state.next_token = actual_tokens[ transform_state.actual_token_index + 1] if next_token.token_name in self.start_token_handlers: start_handler_fn = self.start_token_handlers[next_token.token_name] output_html = start_handler_fn(output_html, next_token, transform_state) elif next_token.is_end_token: end_token = cast(EndMarkdownToken, next_token) if end_token.type_name in self.end_token_handlers: end_handler_fn = self.end_token_handlers[end_token.type_name] output_html = end_handler_fn(output_html, end_token, transform_state) else: raise AssertionError( f"Markdown token end type {end_token.type_name} not supported." ) else: raise AssertionError( f"Markdown token type {type(next_token)} not supported.") return output_html
def __handle_new_list_item_token( cls, output_html: str, next_token: MarkdownToken, transform_state: TransformState, ) -> str: """ Handle the new list item token. """ _ = next_token transform_state.add_trailing_text, transform_state.add_leading_text = ( "</li>", "<li>", ) token_parts = [output_html] if output_html and output_html[-1] == ">": token_parts.append(ParserHelper.newline_character) return "".join(token_parts)
def __handle_end_list_token( cls, output_html: str, next_token: MarkdownToken, transform_state: TransformState, ) -> str: """ Handle the end list token for either an ordered or unordered list. """ transform_state.is_in_loose_list = ( TransformToGfmListLooseness.reset_list_looseness( transform_state.actual_tokens, transform_state.actual_token_index, )) transform_state.add_trailing_text = "".join([ "</li>", ParserHelper.newline_character, "</ul>" if next_token.is_unordered_list_end else "</ol>", ]) return output_html