Пример #1
0
    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
Пример #2
0
    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)
Пример #3
0
 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