Repository: jackdewinter/pymarkdown

Issue:
Rehydration issue with paragraph continues.
## Prerequisites

* [x] Are you running the latest version of this application?
* [x] Have you checked the [Frequently Asked Questions](https://pymarkdown.readthedocs.io/en/latest/faq) document?
* [x] Have you simplified the bug report to the essential details?
  * [x] Do you have a distinct command line to report?
  * [x] Can you clearly state the configuration for this bug report?
  * [x] Do you have a minimal document that highlights this bug?
  * [x] Are any required files (configuration or Markdown document) attached to the issue?
* [x] Did you perform a cursory search of other issues to look for related issues?

## Bug Report

* [X] Rehydration

### Description

When rehydrated, some paragraph continue lines do not have the correct spacing when rehydrated.

### Specifics

What operating system and version are you running into this behavior on?

Win11

What version are you seeing this behavior in? (Run `pip list` or `pipenv run pip list` and look for the entry beside `pymarkdownlnt`.)

latest, main

Are there any extra steps that need to be taken before executing the application?

[Any non-standard requirements?]

What is the command line you invoke to get this behavior?

test_extra_044mcxx

Are you using a configuration file? Either on the command line or one of the implicit configuration files? If so, attach that file to this issue.

No

What Markdown document causes this behavior to manifest?  Attach that file to this issue.

```
> +  list
>   this
> + that
```

### Actual Behavior

Markdown was rehydrated with an extra space character on line 2.

### Expected Behavior

Rehydration should return the same EXACT markdown.


Discussion:
sourcery-ai[bot]: <!-- Generated by sourcery-ai[bot]: start review_guide -->

🧙 Sourcery is reviewing your pull request!

---

<details>
<summary>Tips</summary>

- Trigger a new Sourcery review by commenting `@sourcery-ai review` on the pull request.
- Continue your discussion with Sourcery by replying directly to review comments.
- You can change your review settings at any time by accessing your [dashboard](https://app.sourcery.ai):
    - Enable or disable the Sourcery-generated pull request summary or reviewer's guide;
    - Change the review language;
- You can always [contact us](mailto:support@sourcery.ai) if you have any questions or feedback.

</details>

<!-- Generated by sourcery-ai[bot]: end review_guide -->
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/jackdewinter/pymarkdown/pull/1205?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) Report
Attention: Patch coverage is `96.55172%` with `6 lines` in your changes missing coverage. Please review.
> Project coverage is 99.90%. Comparing base [(`3d61cf1`)](https://app.codecov.io/gh/jackdewinter/pymarkdown/commit/3d61cf113fe72e67f2121a342333d3c10dcf0ab8?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) to head [(`fbbf9d2`)](https://app.codecov.io/gh/jackdewinter/pymarkdown/commit/fbbf9d260d102a44b339345f70a7ffceb3175e0e?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None).

| [Files with missing lines](https://app.codecov.io/gh/jackdewinter/pymarkdown/pull/1205?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) | Patch % | Lines |
|---|---|---|
| [pymarkdown/plugins/rule\_md\_031.py](https://app.codecov.io/gh/jackdewinter/pymarkdown/pull/1205?src=pr&el=tree&filepath=pymarkdown%2Fplugins%2Frule_md_031.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None#diff-cHltYXJrZG93bi9wbHVnaW5zL3J1bGVfbWRfMDMxLnB5) | 85.71% | [4 Missing and 2 partials :warning: ](https://app.codecov.io/gh/jackdewinter/pymarkdown/pull/1205?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) |

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##             main    #1205      +/-   ##
==========================================
- Coverage   99.92%   99.90%   -0.03%     
==========================================
  Files         190      190              
  Lines       20742    20843     +101     
  Branches     2649     2666      +17     
==========================================
+ Hits        20727    20823      +96     
- Misses         10       13       +3     
- Partials        5        7       +2     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/jackdewinter/pymarkdown/pull/1205?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None).


Patch:
diff --git a/newdocs/src/changelog.md b/newdocs/src/changelog.md
index 2885edc8..d2649ed4 100644
--- a/newdocs/src/changelog.md
+++ b/newdocs/src/changelog.md
@@ -30,6 +30,12 @@
 - [Issue 1179](https://github.com/jackdewinter/pymarkdown/issues/1179)
     - fixed rehydrator issue with reyhdrating after bqs with remove token being
       blank line
+- [Issue 1202](https://github.com/jackdewinter/pymarkdown/issues/1202)
+    - fixed rehydrator issue with paragraph continues
+- [Issue 1203](https://github.com/jackdewinter/pymarkdown/issues/1203)
+    - parser issue with fenced code block closing right away
+- [Issue 1204](https://github.com/jackdewinter/pymarkdown/issues/1204)
+    - rehydration/fix issue with blank lines causing off by one error
 
 <!--- pyml disable-next-line no-duplicate-heading-->
 ### Changed
diff --git a/publish/coverage.json b/publish/coverage.json
index c83aa07f..4fe1e5f7 100644
--- a/publish/coverage.json
+++ b/publish/coverage.json
@@ -2,12 +2,12 @@
     "projectName": "pymarkdown",
     "reportSource": "pytest",
     "branchLevel": {
-        "totalMeasured": 5299,
-        "totalCovered": 5294
+        "totalMeasured": 5333,
+        "totalCovered": 5326
     },
     "lineLevel": {
-        "totalMeasured": 20742,
-        "totalCovered": 20732
+        "totalMeasured": 20843,
+        "totalCovered": 20830
     }
 }
 
diff --git a/publish/pylint_suppression.json b/publish/pylint_suppression.json
index 9be2c803..99914502 100644
--- a/publish/pylint_suppression.json
+++ b/publish/pylint_suppression.json
@@ -15,7 +15,7 @@
         },
         "pymarkdown/application_logging.py": {},
         "pymarkdown/block_quotes/block_quote_count_helper.py": {
-            "too-many-arguments": 8
+            "too-many-arguments": 7
         },
         "pymarkdown/block_quotes/block_quote_data.py": {},
         "pymarkdown/block_quotes/block_quote_non_fenced_helper.py": {
@@ -39,6 +39,7 @@
         },
         "pymarkdown/container_blocks/container_block_nested_processor.py": {
             "too-few-public-methods": 1,
+            "too-many-locals": 1,
             "too-many-arguments": 1
         },
         "pymarkdown/container_blocks/container_block_non_leaf_processor.py": {},
@@ -97,8 +98,8 @@
             "protected-access": 1
         },
         "pymarkdown/file_scan_helper.py": {
-            "too-many-arguments": 9,
-            "too-many-locals": 6
+            "too-many-arguments": 10,
+            "too-many-locals": 5
         },
         "pymarkdown/general/__init__.py": {},
         "pymarkdown/general/bad_tokenization_error.py": {},
diff --git a/pymarkdown/block_quotes/block_quote_count_helper.py b/pymarkdown/block_quotes/block_quote_count_helper.py
index 65f9534b..f4e30a01 100644
--- a/pymarkdown/block_quotes/block_quote_count_helper.py
+++ b/pymarkdown/block_quotes/block_quote_count_helper.py
@@ -13,7 +13,6 @@ from pymarkdown.general.position_marker import PositionMarker
 from pymarkdown.general.requeue_line_info import RequeueLineInfo
 from pymarkdown.general.tab_helper import TabHelper
 from pymarkdown.tokens.block_quote_markdown_token import BlockQuoteMarkdownToken
-from pymarkdown.tokens.list_start_markdown_token import ListStartMarkdownToken
 from pymarkdown.tokens.markdown_token import MarkdownToken
 from pymarkdown.tokens.stack_token import (
     BlockQuoteStackToken,
@@ -896,9 +895,9 @@ class BlockQuoteCountHelper:
         ) = BlockQuoteCountHelper.__calculate_stack_hard_limit_if_eligible(
             parser_state,
             position_marker,
-            length_of_available_whitespace,
-            adjust_current_block_quote,
-            last_bq_index,
+            # length_of_available_whitespace,
+            # adjust_current_block_quote,
+            # last_bq_index,
         )
         POGGER.debug(f">>>>>stack_increase_needed:{stack_increase_needed}")
         POGGER.debug(f">>>>>stack_decrease_needed:{stack_decrease_needed}")
@@ -933,127 +932,128 @@ class BlockQuoteCountHelper:
     def __calculate_stack_hard_limit_if_eligible(
         parser_state: ParserState,
         position_marker: PositionMarker,
-        length_of_available_whitespace: int,
-        adjust_current_block_quote: bool,
-        last_bq_index: int,
+        # length_of_available_whitespace: int,
+        # adjust_current_block_quote: bool,
+        # last_bq_index: int,
     ) -> Tuple[Optional[int], Optional[int]]:
         POGGER.debug("eligible")
         stack_hard_limit, extra_consumed_whitespace = None, None
         assert (
             parser_state.original_line_to_parse is not None
         ), "The original line to parse must be defined."
-        if remaining_text := parser_state.original_line_to_parse[
+        remaining_text = parser_state.original_line_to_parse[
             : -len(position_marker.text_to_parse)
-        ]:
-            POGGER.debug("eligible - remaining_text:$:", remaining_text)
-
-            # use up already extracted text/ws
-            current_stack_index, indent_text_count, extra_consumed_whitespace = 1, 0, 0
-            assert parser_state.token_stack[
-                current_stack_index
-            ].is_block_quote, "The specified index must point to a block quote."
-            POGGER.debug("bq")
-            start_index = remaining_text.find(">")
-            assert (
-                start_index != -1
-            ), "A block quote start character (>) must be present in the remaing text to parse."
-            POGGER.debug("bq-found")
-            indent_text_count = start_index + 1
-            assert (
-                indent_text_count < len(remaining_text)
-                and remaining_text[indent_text_count] == ParserHelper.space_character
-            ), "The indent_text_count needs rooms to grow, and currently specifies a space character."
-            POGGER.debug("bq-space-found")
-            indent_text_count += 1
-            current_stack_index += 1
-            assert indent_text_count == len(
-                remaining_text
-            ), "Counts should equal each other."
-
-            # if there is whitespace
-            (
-                stack_hard_limit,
-                indent_text_count,
-                length_of_available_whitespace,
-                extra_consumed_whitespace,
-            ) = BlockQuoteCountHelper.__calculate_eligible_stack_hard_limit(
-                parser_state,
-                current_stack_index,
-                indent_text_count,
-                length_of_available_whitespace,
-                extra_consumed_whitespace,
-                adjust_current_block_quote,
-                last_bq_index,
-            )
+        ]
+        assert not remaining_text
+        # POGGER.debug("eligible - remaining_text:$:", remaining_text)
+
+        # # use up already extracted text/ws
+        # current_stack_index, indent_text_count, extra_consumed_whitespace = 1, 0, 0
+        # assert parser_state.token_stack[
+        #     current_stack_index
+        # ].is_block_quote, "The specified index must point to a block quote."
+        # POGGER.debug("bq")
+        # start_index = remaining_text.find(">")
+        # assert (
+        #     start_index != -1
+        # ), "A block quote start character (>) must be present in the remaing text to parse."
+        # POGGER.debug("bq-found")
+        # indent_text_count = start_index + 1
+        # assert (
+        #     indent_text_count < len(remaining_text)
+        #     and remaining_text[indent_text_count] == ParserHelper.space_character
+        # ), "The indent_text_count needs rooms to grow, and currently specifies a space character."
+        # POGGER.debug("bq-space-found")
+        # indent_text_count += 1
+        # current_stack_index += 1
+        # assert indent_text_count == len(
+        #     remaining_text
+        # ), "Counts should equal each other."
+
+        # # if there is whitespace
+        # (
+        #     stack_hard_limit,
+        #     indent_text_count,
+        #     length_of_available_whitespace,
+        #     extra_consumed_whitespace,
+        # ) = BlockQuoteCountHelper.__calculate_eligible_stack_hard_limit(
+        #     parser_state,
+        #     current_stack_index,
+        #     indent_text_count,
+        #     length_of_available_whitespace,
+        #     extra_consumed_whitespace,
+        #     adjust_current_block_quote,
+        #     last_bq_index,
+        # )
         return stack_hard_limit, extra_consumed_whitespace
 
-    # pylint: disable=too-many-arguments
-    @staticmethod
-    def __calculate_eligible_stack_hard_limit(
-        parser_state: ParserState,
-        current_stack_index: int,
-        indent_text_count: int,
-        length_of_available_whitespace: int,
-        extra_consumed_whitespace: int,
-        adjust_current_block_quote: bool,
-        last_bq_index: int,
-    ) -> Tuple[int, int, int, int]:
-        assert parser_state.token_stack[
-            current_stack_index
-        ].is_list, "Since we have taken care of any block quotes, this must be a list."
-        list_stack_token = cast(
-            ListStackToken, parser_state.token_stack[current_stack_index]
-        )
-        POGGER.debug(
-            "indent_level:$:indent_text_count:$:",
-            list_stack_token.indent_level,
-            indent_text_count,
-        )
-        delta = list_stack_token.indent_level - indent_text_count
-        POGGER.debug(
-            "delta:$:length_of_available_whitespace:$:",
-            delta,
-            length_of_available_whitespace,
-        )
-        assert (
-            length_of_available_whitespace >= delta
-        ), "Amount of whitespace to start with should always be greater than the amount to reduce by."
-        list_token = cast(
-            ListStartMarkdownToken, list_stack_token.matching_markdown_token
-        )
-        adjust_for_extra_indent = list_token.indent_level - list_token.column_number - 1
-        if list_stack_token.is_ordered_list:
-            adjust_for_extra_indent -= len(list_token.list_start_sequence) - 1
-        POGGER.debug("adjust_for_extra_indent:$:", adjust_for_extra_indent)
-        current_stack_index += 1
-        delta -= adjust_for_extra_indent
-        indent_text_count += delta
-        length_of_available_whitespace -= delta
-        extra_consumed_whitespace += delta
-
-        assert not adjust_current_block_quote
-        _ = last_bq_index
-        # if adjust_current_block_quote:
-        #     POGGER.debug(
-        #         "__calculate_stack_hard_limit>>last_block_token>>$",
-        #         parser_state.token_stack[last_bq_index].matching_markdown_token,
-        #     )
-        #     block_token = cast(
-        #         BlockQuoteMarkdownToken,
-        #         parser_state.token_stack[last_bq_index].matching_markdown_token,
-        #     )
-        #     block_token.add_bleading_spaces(
-        #         ParserHelper.repeat_string(ParserHelper.space_character, delta), True
-        #     )
-        #     POGGER.debug(
-        #         "__calculate_stack_hard_limit>>last_block_token>>$", block_token
-        #     )
-
-        return (
-            current_stack_index,
-            indent_text_count,
-            length_of_available_whitespace,
-            extra_consumed_whitespace,
-        )
-
-    # pylint: enable=too-many-arguments
+    # # pylint: disable=too-many-arguments
+    # @staticmethod
+    # def __calculate_eligible_stack_hard_limit(
+    #     parser_state: ParserState,
+    #     current_stack_index: int,
+    #     indent_text_count: int,
+    #     length_of_available_whitespace: int,
+    #     extra_consumed_whitespace: int,
+    #     adjust_current_block_quote: bool,
+    #     last_bq_index: int,
+    # ) -> Tuple[int, int, int, int]:
+    #     assert parser_state.token_stack[
+    #         current_stack_index
+    #     ].is_list, "Since we have taken care of any block quotes, this must be a list."
+    #     list_stack_token = cast(
+    #         ListStackToken, parser_state.token_stack[current_stack_index]
+    #     )
+    #     POGGER.debug(
+    #         "indent_level:$:indent_text_count:$:",
+    #         list_stack_token.indent_level,
+    #         indent_text_count,
+    #     )
+    #     delta = list_stack_token.indent_level - indent_text_count
+    #     POGGER.debug(
+    #         "delta:$:length_of_available_whitespace:$:",
+    #         delta,
+    #         length_of_available_whitespace,
+    #     )
+    #     assert (
+    #         length_of_available_whitespace >= delta
+    #     ), "Amount of whitespace to start with should always be greater than the amount to reduce by."
+    #     list_token = cast(
+    #         ListStartMarkdownToken, list_stack_token.matching_markdown_token
+    #     )
+    #     adjust_for_extra_indent = list_token.indent_level - list_token.column_number - 1
+    #     if list_stack_token.is_ordered_list:
+    #         adjust_for_extra_indent -= len(list_token.list_start_sequence) - 1
+    #     POGGER.debug("adjust_for_extra_indent:$:", adjust_for_extra_indent)
+    #     current_stack_index += 1
+    #     delta -= adjust_for_extra_indent
+    #     indent_text_count += delta
+    #     length_of_available_whitespace -= delta
+    #     extra_consumed_whitespace += delta
+
+    #     assert not adjust_current_block_quote
+    #     _ = last_bq_index
+    #     # if adjust_current_block_quote:
+    #     #     POGGER.debug(
+    #     #         "__calculate_stack_hard_limit>>last_block_token>>$",
+    #     #         parser_state.token_stack[last_bq_index].matching_markdown_token,
+    #     #     )
+    #     #     block_token = cast(
+    #     #         BlockQuoteMarkdownToken,
+    #     #         parser_state.token_stack[last_bq_index].matching_markdown_token,
+    #     #     )
+    #     #     block_token.add_bleading_spaces(
+    #     #         ParserHelper.repeat_string(ParserHelper.space_character, delta), True
+    #     #     )
+    #     #     POGGER.debug(
+    #     #         "__calculate_stack_hard_limit>>last_block_token>>$", block_token
+    #     #     )
+
+    #     return (
+    #         current_stack_index,
+    #         indent_text_count,
+    #         length_of_available_whitespace,
+    #         extra_consumed_whitespace,
+    #     )
+
+    # # pylint: enable=too-many-arguments
diff --git a/pymarkdown/container_blocks/container_block_leaf_processor.py b/pymarkdown/container_blocks/container_block_leaf_processor.py
index 37bb65e9..7078c8ed 100644
--- a/pymarkdown/container_blocks/container_block_leaf_processor.py
+++ b/pymarkdown/container_blocks/container_block_leaf_processor.py
@@ -75,7 +75,7 @@ class ContainerBlockLeafProcessor:
         POGGER.debug("index_indent>>:$:<", position_marker.index_indent)
         newer_position_marker = PositionMarker(
             position_marker.line_number,
-            grab_bag.start_index,
+            0,
             grab_bag.line_to_parse,
             index_indent=calculated_indent,
         )
@@ -106,6 +106,9 @@ class ContainerBlockLeafProcessor:
             grab_bag.is_leaf_tokens_empty()
         ), "No leaf tokens should be present at this point."
         POGGER.debug("parsing leaf>>")
+        # if xposition_marker.index_number != 0 and grab_bag.removed_chars_at_start_of_line:
+        #     ff = False
+        #     assert ff
         position_marker = PositionMarker(
             xposition_marker.line_number,
             0,
@@ -114,6 +117,7 @@ class ContainerBlockLeafProcessor:
         )
         # POGGER.debug("position_marker.text>>:$:<<", position_marker.text_to_parse)
         # POGGER.debug("position_marker.index>>:$:<<", position_marker.index_number)
+        # POGGER.debug("position_marker.indent>>:$:<<", position_marker.index_indent)
 
         (
             new_index_number,
@@ -138,6 +142,9 @@ class ContainerBlockLeafProcessor:
             ), "No leaf tokens should be present at this point."
             return
 
+        POGGER.debug("position_marker.text>>:$:<<", position_marker.text_to_parse)
+        POGGER.debug("position_marker.index>>:$:<<", position_marker.index_number)
+        POGGER.debug("position_marker.indent>>:$:<<", position_marker.index_indent)
         (
             adjust_token,
             position_marker,
@@ -153,12 +160,14 @@ class ContainerBlockLeafProcessor:
         )
         orig_text_removed_by_container = grab_bag.text_removed_by_container
 
-        # POGGER.debug("position_marker.text>>:$:<<", position_marker.text_to_parse)
-        # POGGER.debug("position_marker.index>>:$:<<", position_marker.index_number)
+        POGGER.debug("position_marker.text>>:$:<<", position_marker.text_to_parse)
+        POGGER.debug("position_marker.index>>:$:<<", position_marker.index_number)
+        POGGER.debug("position_marker.indent>>:$:<<", position_marker.index_indent)
         (
             removed_leading_space,
             actual_removed_leading_space,
             position_marker,
+            new_ex,
         ) = ContainerBlockLeafProcessor.__adjust_for_list_container(
             parser_state,
             position_marker,
@@ -168,8 +177,15 @@ class ContainerBlockLeafProcessor:
             grab_bag,
         )
 
-        # POGGER.debug("position_marker.text>>:$:<<", position_marker.text_to_parse)
-        # POGGER.debug("position_marker.index>>:$:<<", position_marker.index_number)
+        POGGER.debug("position_marker.text>>:$:<<", position_marker.text_to_parse)
+        POGGER.debug("position_marker.index>>:$:<<", position_marker.index_number)
+        POGGER.debug("position_marker.indent>>:$:<<", position_marker.index_indent)
+        POGGER.debug("is_leaf_tokens_empty>>:$:<<", grab_bag.is_leaf_tokens_empty())
+        POGGER.debug(
+            "do_skip_containers_before_leaf_blocks>>:$:<<",
+            grab_bag.do_skip_containers_before_leaf_blocks,
+        )
+        POGGER.debug("removed_leading_space>>:$:<<", removed_leading_space)
         if (
             grab_bag.is_leaf_tokens_empty()
             and not grab_bag.do_skip_containers_before_leaf_blocks
@@ -183,11 +199,15 @@ class ContainerBlockLeafProcessor:
                     total_ws,
                     actual_removed_leading_space,
                     grab_bag,
+                    new_ex,
                 )
             )
             # POGGER.debug("position_marker.text>>:$:<<", position_marker.text_to_parse)
             # POGGER.debug("position_marker.index>>:$:<<", position_marker.index_number)
 
+        POGGER.debug("position_marker.text>>:$:<<", position_marker.text_to_parse)
+        POGGER.debug("position_marker.index>>:$:<<", position_marker.index_number)
+        POGGER.debug("position_marker.indent>>:$:<<", position_marker.index_indent)
         ContainerBlockLeafProcessor.__parse_line_for_leaf_blocks(
             parser_state,
             position_marker,
@@ -220,6 +240,11 @@ class ContainerBlockLeafProcessor:
         """
         POGGER.debug("parsing leaf tokens")
         POGGER.debug("Leaf Line:$:", position_marker.text_to_parse)
+        POGGER.debug(
+            "Indent:$:, Index:$:",
+            position_marker.index_indent,
+            position_marker.index_number,
+        )
         POGGER.debug("original_line:$:", grab_bag.original_line)
         detabified_original_line = TabHelper.detabify_string(grab_bag.original_line)
         detabified_original_start_index = detabified_original_line.find(
@@ -646,11 +671,21 @@ class ContainerBlockLeafProcessor:
             "\t" not in grab_bag.original_line
             or grab_bag.text_removed_by_container != "> "
         ):
+            POGGER.debug("__adjust_for_list_container_after_block_quote_kludge-->1")
             new_ex = ContainerBlockLeafProcessor.__adjust_for_list_container_after_block_quote_special(
                 parser_state, xposition_marker, extracted_leaf_whitespace, grab_bag
             )
         else:
+            POGGER.debug("__adjust_for_list_container_after_block_quote_kludge-->2")
             new_ex = extracted_leaf_whitespace
+            POGGER.debug(
+                "text_removed_by_container-->:$:<", grab_bag.text_removed_by_container
+            )
+            POGGER.debug("adj_line_to_parse-->:$:<", grab_bag.adj_line_to_parse)
+            POGGER.debug("original_line-->:$:<", grab_bag.original_line)
+            POGGER.debug(
+                "text_removed_by_container-->:$:<", grab_bag.text_removed_by_container
+            )
             if (
                 grab_bag.text_removed_by_container
                 and grab_bag.adj_line_to_parse
@@ -683,17 +718,27 @@ class ContainerBlockLeafProcessor:
         Optional[str],
         Optional[str],
         Optional[ListStackToken],
+        Optional[str],
     ]:
         list_token: Optional[ListStartMarkdownToken] = None
         POGGER.debug("yes adjust_for_list_container")
         removed_leading_space = None
         actual_removed_leading_space = None
         list_stack_token = None
+        new_ex = None
 
         found_list_token = ContainerBlockLeafProcessor.__adjust_for_list_container_find(
             parser_state, xposition_marker
         )
         if not found_list_token:
+            POGGER.debug(
+                "__adjust_for_list_container_after_block_quote>>removed_leading_space>>$<<",
+                removed_leading_space,
+            )
+            POGGER.debug(
+                "__adjust_for_list_container_after_block_quote>>actual_removed_leading_space>>$<<",
+                actual_removed_leading_space,
+            )
             list_stack_token = cast(
                 ListStackToken, parser_state.token_stack[last_list_index]
             )
@@ -735,11 +780,23 @@ class ContainerBlockLeafProcessor:
 
             if not grab_bag.container_depth and not xposition_marker.index_indent:
                 removed_leading_space = extracted_leaf_whitespace
+            POGGER.debug(
+                "__adjust_for_list_container_after_block_quote>>removed_leading_space>>:$:<<",
+                removed_leading_space,
+            )
+            POGGER.debug(
+                "__adjust_for_list_container_after_block_quote>>actual_removed_leading_space>>:$:<<",
+                actual_removed_leading_space,
+            )
+            POGGER.debug(
+                "__adjust_for_list_container_after_block_quote>>new_ex>>:$:<<", new_ex
+            )
         return (
             list_token,
             removed_leading_space,
             actual_removed_leading_space,
             list_stack_token,
+            new_ex,
         )
 
     # pylint: disable=too-many-arguments
@@ -751,11 +808,13 @@ class ContainerBlockLeafProcessor:
         last_list_index: int,
         extracted_leaf_whitespace: str,
         grab_bag: ContainerGrabBag,
-    ) -> Tuple[Optional[str], Optional[str], PositionMarker]:
+    ) -> Tuple[Optional[str], Optional[str], PositionMarker, Optional[str]]:
         POGGER.debug("??? adjust_for_list_container")
         removed_leading_space = None
         actual_removed_leading_space = None
         list_token: Optional[ListStartMarkdownToken] = None
+        new_ex = None
+        list_stack_token = None
         # pylint: disable=chained-comparison
         if (
             not grab_bag.was_indent_already_processed
@@ -768,6 +827,7 @@ class ContainerBlockLeafProcessor:
                 removed_leading_space,
                 actual_removed_leading_space,
                 list_stack_token,
+                new_ex,
             ) = ContainerBlockLeafProcessor.__adjust_for_list_container_after_block_quote(
                 parser_state,
                 xposition_marker,
@@ -775,16 +835,26 @@ class ContainerBlockLeafProcessor:
                 extracted_leaf_whitespace,
                 grab_bag,
             )
+            if new_ex:
+                POGGER.debug("new_ex>>:$:<<", new_ex)
+                xposition_marker = PositionMarker(
+                    xposition_marker.line_number,
+                    len(new_ex),
+                    xposition_marker.text_to_parse,
+                    index_indent=xposition_marker.index_indent,
+                )
+                # POGGER.debug(
+                #     "position_marker.text>>:$:<<", xposition_marker.text_to_parse
+                # )
+                # POGGER.debug(
+                #     "position_marker.index>>:$:<<", xposition_marker.index_number
+                # )
+                # POGGER.debug(
+                #     "position_marker.indent>>:$:<<", xposition_marker.index_indent
+                # )
         else:
             POGGER.debug("not adjust_for_list_container")
         # pylint: enable=chained-comparison
-        if removed_leading_space:
-            xposition_marker = PositionMarker(
-                xposition_marker.line_number,
-                len(removed_leading_space),
-                xposition_marker.text_to_parse,
-                index_indent=xposition_marker.index_indent,
-            )
 
         if ContainerBlockLeafProcessor.__adjust_for_list_container_kludge(
             parser_state,
@@ -815,7 +885,15 @@ class ContainerBlockLeafProcessor:
                 xposition_marker.text_to_parse[delta:],
                 xposition_marker.index_indent,
             )
-        return removed_leading_space, actual_removed_leading_space, xposition_marker
+            # POGGER.debug("position_marker.text>>:$:<<", xposition_marker.text_to_parse)
+            # POGGER.debug("position_marker.index>>:$:<<", xposition_marker.index_number)
+            # POGGER.debug("position_marker.indent>>:$:<<", xposition_marker.index_indent)
+        return (
+            removed_leading_space,
+            actual_removed_leading_space,
+            xposition_marker,
+            new_ex,
+        )
 
     # pylint: enable=too-many-arguments
 
@@ -901,6 +979,7 @@ class ContainerBlockLeafProcessor:
         total_ws: int,
         actual_removed_leading_space: Optional[str],
         grab_bag: ContainerGrabBag,
+        new_ex: Optional[str],
     ) -> Tuple[str, int, Optional[PositionMarker]]:
         if grab_bag.do_force_list_continuation:
             POGGER.debug(
@@ -930,6 +1009,18 @@ class ContainerBlockLeafProcessor:
             xposition_marker,
             grab_bag,
         )
+        POGGER.debug("close_tokens>:$:<", close_tokens)
+        POGGER.debug("current_indent_level>:$:<", current_indent_level)
+        POGGER.debug("xposition_marker.line_number>:$:<", xposition_marker.line_number)
+        POGGER.debug(
+            "xposition_marker.index_number>:$:<", xposition_marker.index_number
+        )
+        POGGER.debug(
+            "xposition_marker.text_to_parse>:$:<", xposition_marker.text_to_parse
+        )
+        POGGER.debug(
+            "xposition_marker.index_indent>:$:<", xposition_marker.index_indent
+        )
         if close_tokens:
             grab_bag.extend_container_tokens(close_tokens)
 
@@ -940,10 +1031,7 @@ class ContainerBlockLeafProcessor:
             new_index_indent,
             new_text_to_parse,
         ) = ContainerBlockLeafProcessor.__make_adjustments(
-            parser_state,
-            xposition_marker,
-            current_indent_level,
-            grab_bag,
+            parser_state, xposition_marker, current_indent_level, grab_bag, new_ex
         )
         ContainerBlockLeafProcessor.__val(parser_state, new_text_to_parse)
         return new_text_to_parse, new_index_indent, None
@@ -959,8 +1047,19 @@ class ContainerBlockLeafProcessor:
         total_ws: int,
         actual_removed_leading_space: Optional[str],
         grab_bag: ContainerGrabBag,
+        new_ex: Optional[str],
     ) -> PositionMarker:
         POGGER.debug("??? adjust_containers_before_leaf_blocks")
+        POGGER.debug("xposition_marker.line_number>:$:<", xposition_marker.line_number)
+        POGGER.debug(
+            "xposition_marker.index_number>:$:<", xposition_marker.index_number
+        )
+        POGGER.debug(
+            "xposition_marker.text_to_parse>:$:<", xposition_marker.text_to_parse
+        )
+        POGGER.debug(
+            "xposition_marker.index_indent>:$:<", xposition_marker.index_indent
+        )
         if (
             xposition_marker.text_to_parse
             and not grab_bag.was_paragraph_continuation
@@ -977,6 +1076,7 @@ class ContainerBlockLeafProcessor:
                 total_ws,
                 actual_removed_leading_space,
                 grab_bag,
+                new_ex,
             )
             if new_position_marker:
                 return new_position_marker
@@ -993,6 +1093,10 @@ class ContainerBlockLeafProcessor:
         #     # new_index_indent = 0
         #     pass
 
+        POGGER.debug("xposition_marker.line_number>:$:<", xposition_marker.line_number)
+        POGGER.debug("xposition_marker.index_number>:$:<", indent_adjust)
+        POGGER.debug("xposition_marker.text_to_parse>:$:<", new_text_to_parse)
+        POGGER.debug("xposition_marker.index_indent>:$:<", new_index_indent)
         return PositionMarker(
             xposition_marker.line_number,
             indent_adjust,
@@ -1084,6 +1188,7 @@ class ContainerBlockLeafProcessor:
         xposition_marker: PositionMarker,
         current_indent_level: int,
         grab_bag: ContainerGrabBag,
+        new_ex: Optional[str],
     ) -> Tuple[int, str]:
         assert (
             parser_state.original_line_to_parse is not None
@@ -1111,22 +1216,88 @@ class ContainerBlockLeafProcessor:
 
             prefix_text = xposition_marker.text_to_parse[:current_indent_level]
             new_text_to_parse = xposition_marker.text_to_parse[current_indent_level:]
-
             new_index_indent = len(parser_state.original_line_to_parse) - len(
                 new_text_to_parse
             )
             # if False and grab_bag.text_removed_by_container and ">" in grab_bag.text_removed_by_container:
             #     new_index_indent -= xposition_marker.index_indent
 
+            POGGER.debug("new_ex>>:$:<", new_ex)
             POGGER.debug("new_text_to_parse>>:$:<", new_text_to_parse)
             POGGER.debug("new_index_indent>>:$:<", new_index_indent)
+            POGGER.debug(
+                "grab_bag.text_removed_by_container>>:$:<",
+                grab_bag.text_removed_by_container,
+            )
+            POGGER.debug("prefix_text>>:$:<", prefix_text)
             grab_bag.text_removed_by_container = (
                 grab_bag.text_removed_by_container + prefix_text
                 if grab_bag.text_removed_by_container
                 else prefix_text
             )
+            new_index_indent, new_text_to_parse = (
+                ContainerBlockLeafProcessor.__make_adjustments_inner(
+                    parser_state, new_index_indent, new_text_to_parse, new_ex, grab_bag
+                )
+            )
+            POGGER.debug(
+                "grab_bag.text_removed_by_container>>:$:<",
+                grab_bag.text_removed_by_container,
+            )
+        return new_index_indent, new_text_to_parse
+
+    @staticmethod
+    def __make_adjustments_inner(
+        parser_state: ParserState,
+        new_index_indent: int,
+        new_text_to_parse: str,
+        new_ex: Optional[str],
+        grab_bag: ContainerGrabBag,
+    ) -> Tuple[int, str]:
+        adj_text_removed = grab_bag.text_removed_by_container
+        assert adj_text_removed is not None
+        if (
+            len(adj_text_removed) > 1
+            and adj_text_removed[-1] == " "
+            and adj_text_removed[-2] == ">"
+        ):
+            adj_text_removed = adj_text_removed[2:]
+        if (
+            new_ex
+            and not adj_text_removed.endswith(new_ex)
+            and new_text_to_parse.startswith(new_ex)
+        ):
+            # assert new_ex is not None
+            last_container_index = parser_state.find_last_container_on_stack()
+            apply_adjustment = parser_state.token_stack[last_container_index].is_list
+            if apply_adjustment and "\t" in grab_bag.original_line:
+                apply_adjustment = (
+                    ContainerBlockLeafProcessor.__make_adjustments_inner_tab_check(
+                        grab_bag, new_ex
+                    )
+                )
+            if apply_adjustment:
+                new_index_indent += len(new_ex)
+                new_text_to_parse = new_text_to_parse[len(new_ex) :]
         return new_index_indent, new_text_to_parse
 
+    @staticmethod
+    def __make_adjustments_inner_tab_check(
+        grab_bag: ContainerGrabBag, new_ex: str
+    ) -> bool:
+        assert grab_bag.text_removed_by_container is not None
+        removed_text = grab_bag.text_removed_by_container + new_ex
+        index = 1
+        line_part = None
+        while True:
+            assert index < len(grab_bag.original_line)
+            line_part = grab_bag.original_line[:index]
+            if len(TabHelper.detabify_string(line_part)) >= len(removed_text):
+                break
+            index += 1
+        assert line_part is not None
+        return "\t" not in line_part
+
     # pylint: disable=too-many-arguments
     @staticmethod
     def __calculate_current_indent_level_loop_kludge(
@@ -1346,6 +1517,11 @@ class ContainerBlockLeafProcessor:
                     continue_in_loop,
                 )
             )
+            POGGER.debug(
+                "did_hit_indent_level_threshold>:$:<", did_hit_indent_level_threshold
+            )
+            POGGER.debug("continue_in_loop>:$:<", continue_in_loop)
+            POGGER.debug("current_indent_level>:$:<", current_indent_level)
         return (
             current_indent_level,
             non_last_block_index,
diff --git a/pymarkdown/container_blocks/container_block_nested_processor.py b/pymarkdown/container_blocks/container_block_nested_processor.py
index b223b682..5058a7b4 100644
--- a/pymarkdown/container_blocks/container_block_nested_processor.py
+++ b/pymarkdown/container_blocks/container_block_nested_processor.py
@@ -18,6 +18,7 @@ from pymarkdown.general.parser_state import ParserState
 from pymarkdown.general.position_marker import PositionMarker
 from pymarkdown.list_blocks.list_block_starts_helper import ListBlockStartsHelper
 from pymarkdown.tokens.block_quote_markdown_token import BlockQuoteMarkdownToken
+from pymarkdown.tokens.list_start_markdown_token import ListStartMarkdownToken
 from pymarkdown.tokens.setext_heading_markdown_token import SetextHeadingMarkdownToken
 from pymarkdown.tokens.stack_token import ListStackToken
 
@@ -514,6 +515,7 @@ class ContainerBlockNestedProcessor:
             ), "The nested list start cannot be None."
         return False
 
+    # pylint: disable=too-many-locals
     @staticmethod
     def __calculate_initial_list_adjustments(
         parser_state: ParserState,
@@ -533,9 +535,11 @@ class ContainerBlockNestedProcessor:
             "parser_state.nested_list_start.matching_markdown_token>>$<<",
             parser_state.nested_list_start.matching_markdown_token,
         )
-        list_start_token_index = parser_state.token_document.index(
-            parser_state.nested_list_start.matching_markdown_token
+        mmt_list = cast(
+            ListStartMarkdownToken,
+            parser_state.nested_list_start.matching_markdown_token,
         )
+        list_start_token_index = parser_state.token_document.index(mmt_list)
         POGGER.debug(
             "list_start_token_index>>$<<",
             list_start_token_index,
@@ -558,13 +562,17 @@ class ContainerBlockNestedProcessor:
                 line_number = token_after_list_start.line_number
                 column_number = token_after_list_start.column_number
             assert (
-                parser_state.nested_list_start.matching_markdown_token.line_number
-                == line_number
+                mmt_list.line_number == line_number
             ), "Token after the list start must have the same line number as the list start."
-            column_number_delta = (
-                column_number
-                - parser_state.nested_list_start.matching_markdown_token.column_number
+
+            total_list_start = (
+                mmt_list.list_start_content + mmt_list.list_start_sequence
             )
+            column_number_delta = column_number - mmt_list.column_number
+            if token_after_list_start.is_blank_line and column_number_delta == len(
+                total_list_start
+            ):
+                column_number_delta += 1
         else:
             column_number_delta = 0
         POGGER.debug(
@@ -588,6 +596,8 @@ class ContainerBlockNestedProcessor:
 
         return start_index, indent_level, indent_was_adjusted, indent_level_delta
 
+    # pylint: enable=too-many-locals
+
     # pylint: disable=too-many-arguments
     @staticmethod
     def __do_nested_cleanup(
diff --git a/pymarkdown/file_scan_helper.py b/pymarkdown/file_scan_helper.py
index dd6d3356..80ba37b4 100644
--- a/pymarkdown/file_scan_helper.py
+++ b/pymarkdown/file_scan_helper.py
@@ -676,7 +676,13 @@ class FileScanHelper:
     ) -> None:
         start_index = actual_tokens.index(next_replacement.start_token)
         end_index = actual_tokens.index(next_replacement.end_token)
-        index_delta = end_index - start_index + 1
+        actual_start_index = start_index
+        while (
+            actual_start_index < end_index
+            and actual_tokens[actual_start_index].is_end_token
+        ):
+            actual_start_index += 1
+        index_delta = end_index - actual_start_index + 1
 
         new_tokens = actual_tokens[:start_index]
         new_tokens.extend(next_replacement.replacement_tokens)
@@ -689,8 +695,9 @@ class FileScanHelper:
         actual_tokens.extend(new_tokens)
 
     # pylint: disable=too-many-arguments
-    def __xx(
+    def __apply_replacements(
         self,
+        fix_debug: bool,
         context: PluginScanContext,
         did_any_tokens_get_fixed: bool,
         replace_tokens_list: List[ReplaceTokensRecord],
@@ -707,6 +714,11 @@ class FileScanHelper:
             )
 
         # did_fix = False
+        if fix_debug:
+            print("TOKENS-----")
+            for i, j in enumerate(actual_tokens):
+                print(f" {i:02}:{ParserHelper.make_value_visible(j)}")
+            print("TOKENS-----")
         for next_replace_index in replace_tokens_list:
             did_any_tokens_get_fixed = True
             # if fix_debug and not did_fix:
@@ -718,16 +730,16 @@ class FileScanHelper:
             # if fix_debug:
             #     print(f" {ParserHelper.make_value_visible(next_replace_index)}")
             self.__apply_replacement_fix(context, next_replace_index, actual_tokens)
-        # if did_fix and fix_debug:
-        #     print("AFTER-XXX-----")
-        #     for i,j in enumerate(actual_tokens):
-        #         print(f" {i:02}:{ParserHelper.make_value_visible(j)}")
-        #     print("AFTER-XXX-----")
+        if fix_debug:
+            print("TOKENS-----")
+            for i, j in enumerate(actual_tokens):
+                print(f" {i:02}:{ParserHelper.make_value_visible(j)}")
+            print("TOKENS-----")
         return did_any_tokens_get_fixed
 
     # pylint: enable=too-many-arguments
 
-    # pylint: disable=too-many-arguments,too-many-locals
+    # pylint: disable=too-many-arguments
     def __process_file_fix_tokens_apply_fixes(
         self,
         context: PluginScanContext,
@@ -739,6 +751,36 @@ class FileScanHelper:
         replace_tokens_list: List[ReplaceTokensRecord],
     ) -> Tuple[str, List[MarkdownToken], bool]:
 
+        did_any_tokens_get_fixed = self.__process_file_fix_tokens_apply_fixes_inner(
+            context, fix_debug, actual_tokens, replace_tokens_list, fix_token_map
+        )
+
+        transformer = TransformToMarkdown()
+        markdown_from_tokens = transformer.transform(actual_tokens)
+
+        if fix_debug:
+            print(f"MARKDOWN:{ParserHelper.make_value_visible(markdown_from_tokens)}")
+        with tempfile.NamedTemporaryFile() as temp_output:
+            temporary_file_name = temp_output.name
+        with open(temporary_file_name, "wt", encoding="utf-8") as source_file:
+            source_file.write(markdown_from_tokens)
+            next_file = temporary_file_name
+            actual_tokens.clear()
+
+        self.__print_file_in_debug_mode(fix_debug, fix_file_debug, temporary_file_name)
+        return next_file, actual_tokens, did_any_tokens_get_fixed
+
+    # pylint: enable=too-many-arguments
+
+    # pylint: disable=too-many-arguments
+    def __process_file_fix_tokens_apply_fixes_inner(
+        self,
+        context: PluginScanContext,
+        fix_debug: bool,
+        actual_tokens: List[MarkdownToken],
+        replace_tokens_list: List[ReplaceTokensRecord],
+        fix_token_map: Dict[MarkdownToken, List[FixTokenRecord]],
+    ) -> bool:
         fixed_token_indices: Dict[int, List[str]] = {}
         replaced_token_indices: Dict[int, str] = {}
 
@@ -760,7 +802,8 @@ class FileScanHelper:
                 print(f" AFTER:{ParserHelper.make_value_visible(token_instance)}")
         if fix_debug:
             print("--")
-        did_any_tokens_get_fixed = self.__xx(
+        did_any_tokens_get_fixed = self.__apply_replacements(
+            fix_debug,
             context,
             did_any_tokens_get_fixed,
             replace_tokens_list,
@@ -772,21 +815,9 @@ class FileScanHelper:
             print("--")
 
         did_any_tokens_get_fixed = did_any_tokens_get_fixed or bool(fix_token_map)
+        return did_any_tokens_get_fixed
 
-        transformer = TransformToMarkdown()
-        markdown_from_tokens = transformer.transform(actual_tokens)
-
-        with tempfile.NamedTemporaryFile() as temp_output:
-            temporary_file_name = temp_output.name
-        with open(temporary_file_name, "wt", encoding="utf-8") as source_file:
-            source_file.write(markdown_from_tokens)
-            next_file = temporary_file_name
-            actual_tokens.clear()
-
-        self.__print_file_in_debug_mode(fix_debug, fix_file_debug, temporary_file_name)
-        return next_file, actual_tokens, did_any_tokens_get_fixed
-
-    # pylint: enable=too-many-arguments,too-many-locals
+    # pylint: enable=too-many-arguments
 
     def __print_file_in_debug_mode(
         self, fix_debug: bool, fix_file_debug: bool, next_file: str
diff --git a/pymarkdown/leaf_blocks/fenced_leaf_block_processor.py b/pymarkdown/leaf_blocks/fenced_leaf_block_processor.py
index 57fb6d77..58bfa99e 100644
--- a/pymarkdown/leaf_blocks/fenced_leaf_block_processor.py
+++ b/pymarkdown/leaf_blocks/fenced_leaf_block_processor.py
@@ -123,6 +123,9 @@ class FencedLeafBlockProcessor:
             position_marker.text_to_parse,
             position_marker.index_number,
         )
+        POGGER.debug(
+            "parse_fenced_code_block:extracted_whitespace-->$<--", extracted_whitespace
+        )
         new_tokens: List[MarkdownToken] = []
         (
             is_fence_start,
@@ -183,6 +186,7 @@ class FencedLeafBlockProcessor:
                     grab_bag.indent_used_by_list,
                 )
             )
+            POGGER.debug("parse_fenced_code_block:already in-->$", extracted_whitespace)
         return new_tokens, extracted_whitespace
 
     # pylint: enable=too-many-arguments
@@ -238,6 +242,7 @@ class FencedLeafBlockProcessor:
         # POGGER.debug("original_line:$:", original_line)
         only_spaces_after_fence = True
         split_tab = False
+        split_tab_whitespace: Optional[str] = None
         if ParserHelper.tab_character in original_line:
             (
                 after_fence_index,
diff --git a/pymarkdown/leaf_blocks/leaf_block_helper.py b/pymarkdown/leaf_blocks/leaf_block_helper.py
index 8fc82497..939107ff 100644
--- a/pymarkdown/leaf_blocks/leaf_block_helper.py
+++ b/pymarkdown/leaf_blocks/leaf_block_helper.py
@@ -170,11 +170,14 @@ class LeafBlockHelper:
         removed_chars_at_start: int,
     ) -> None:
         if LeafBlockHelper.__detect_list_already_added_to(parser_state):
+            POGGER.debug("__handle_leaf_start_adjust->__detect_list_already_added_to")
             return
 
         if delay_tab_match:
+            POGGER.debug("__handle_leaf_start_adjust->delay_tab_match")
             used_indent = ""
         else:
+            POGGER.debug("__handle_leaf_start_adjust->tab_match")
             leading_chars_at_start = ""
             if alt_removed_chars_at_start is not None:
                 indent_count = alt_removed_chars_at_start
@@ -343,6 +346,7 @@ class LeafBlockHelper:
             html_tokens.extend(tokens_from_close)
             is_remaining_list_token = parser_state.token_stack[-1].is_list
 
+        POGGER.debug("is_remaining_list_token=$", is_remaining_list_token)
         if is_remaining_list_token:
             assert parser_state.token_stack[
                 -1
@@ -356,6 +360,9 @@ class LeafBlockHelper:
             # assert not delta_indent
 
             POGGER.debug(">>delay_tab_match>>$>>", delay_tab_match)
+            POGGER.debug(
+                ">>adjust_with_leading_spaces>>$>>", adjust_with_leading_spaces
+            )
             if adjust_with_leading_spaces:
                 LeafBlockHelper.__handle_leaf_start_adjust(
                     parser_state,
@@ -428,6 +435,8 @@ class LeafBlockHelper:
                     )
                     # NOTE: this assert should be triggered by a currently disabled test
                     assert indent_delta > len(extracted_whitespace)
+                    # if not indent_delta > len(extracted_whitespace):
+                    #     break
                     new_stack_index += 1
                 new_whitespace = (
                     extracted_whitespace[best_indent:]
diff --git a/pymarkdown/plugins/rule_md_031.py b/pymarkdown/plugins/rule_md_031.py
index fdc6946a..b8c19468 100644
--- a/pymarkdown/plugins/rule_md_031.py
+++ b/pymarkdown/plugins/rule_md_031.py
@@ -63,6 +63,9 @@ class RuleMd031(RulePlugin):
         self.__closed_container_adjustments: List[ClosedContainerAdjustments] = []
         self.__end_tokens: List[EndMarkdownToken] = []
         self.__fix_count = 0
+        self.__removed_container_token_stack: Optional[MarkdownToken] = None
+        # self.__removed_container_adjustments = None
+        # self.__removed_closed_container_adjustments = None
 
     def get_details(self) -> PluginDetails:
         """
@@ -191,14 +194,16 @@ class RuleMd031(RulePlugin):
                 PendingContainerAdjustment(leading_space_insert_index, "")
             )
 
-    def __fix_spacing_list(self, token: MarkdownToken) -> None:
+    def __fix_spacing_list(
+        self, context: PluginScanContext, token: MarkdownToken
+    ) -> None:
         initial_index = container_index = len(self.__container_token_stack) - 1
         while (
-            container_index > 0
+            container_index >= 0
             and self.__container_token_stack[container_index - 1].is_list_start
         ):
             container_index -= 1
-        if container_index:
+        if container_index >= 0:
 
             block_quote_index, index, ss = self.__xxxx(
                 token, container_index, initial_index
@@ -215,19 +220,48 @@ class RuleMd031(RulePlugin):
             #     PendingContainerAdjustment(index, ss, do_insert=False)
             # )
 
-        adjust = self.__calculate_adjust(initial_index, container_index)
-        if token.is_setext_heading:
-            setext_token = cast(SetextHeadingMarkdownToken, token)
-            token_line_number = setext_token.original_line_number
+        if (
+            self.__removed_container_token_stack is not None
+            and not self.__removed_container_token_stack.is_block_quote_start
+            # and container_index
+        ):
+            removed_list_token = cast(
+                ListStartMarkdownToken, self.__removed_container_token_stack
+            )
+            assert removed_list_token.leading_spaces is not None
+            split_spaces = removed_list_token.leading_spaces.split("\n")
+            split_spaces.append("")
+            self.register_fix_token_request(
+                context,
+                self.__removed_container_token_stack,
+                "next_token",
+                "leading_spaces",
+                "\n".join(split_spaces),
+            )
+            # xx = len(self.__closed_container_adjustments) - 1
+            # while xx >= 0 and not self.__container_token_stack[xx].is_list_start:
+            #     xx -= 1
+            # assert xx >= 0
+            # if xx > 0:
+            #     self.__closed_container_adjustments[xx].adjustment += 1
         else:
-            token_line_number = token.line_number
-        index = (
-            token_line_number - self.__container_token_stack[initial_index].line_number
-        )
-        index -= self.__closed_container_adjustments[-1].adjustment
-        self.__container_adjustments[initial_index].append(
-            PendingContainerAdjustment(index - adjust, "")
-        )
+            if self.__closed_container_adjustments[-1].adjustment:
+                adjust = 1
+            else:
+                adjust = self.__calculate_adjust(initial_index, container_index)
+            if token.is_setext_heading:
+                setext_token = cast(SetextHeadingMarkdownToken, token)
+                token_line_number = setext_token.original_line_number
+            else:
+                token_line_number = token.line_number
+            index = (
+                token_line_number
+                - self.__container_token_stack[initial_index].line_number
+            )
+            index -= self.__closed_container_adjustments[-1].adjustment
+            self.__container_adjustments[initial_index].append(
+                PendingContainerAdjustment(index - adjust, "")
+            )
 
     def __xxxx(
         self,
@@ -297,20 +331,54 @@ class RuleMd031(RulePlugin):
             if self.__container_token_stack[-1].is_block_quote_start:
                 self.__fix_spacing_block_quote(token)
             else:
-                self.__fix_spacing_list(token)
+                self.__fix_spacing_list(context, token)
+        elif self.__removed_container_token_stack:
+            if self.__removed_container_token_stack.is_list_start:
+                removed_list_token = cast(
+                    ListStartMarkdownToken, self.__removed_container_token_stack
+                )
+                if removed_list_token.leading_spaces is not None:
+                    split_spaces = removed_list_token.leading_spaces.split("\n")
+                    split_spaces.append("")
+                else:
+                    split_spaces = [""]
+                self.register_fix_token_request(
+                    context,
+                    self.__removed_container_token_stack,
+                    "next_token",
+                    "leading_spaces",
+                    "\n".join(split_spaces),
+                )
 
         new_token = copy.deepcopy(token)
         self.__fix_count += 1
         new_token.adjust_line_number(context, self.__fix_count)
-        replacement_tokens = [
-            BlankLineMarkdownToken(
-                extracted_whitespace="",
-                position_marker=PositionMarker(new_token.line_number - 1, 0, ""),
-                column_delta=1,
-            ),
-            new_token,
-        ]
-        self.register_replace_tokens_request(context, token, token, replacement_tokens)
+        assert self.__last_token is not None
+        if token.is_fenced_code_block and self.__last_token.is_list_end:
+            replacement_tokens: List[MarkdownToken] = [
+                BlankLineMarkdownToken(
+                    extracted_whitespace="",
+                    position_marker=PositionMarker(new_token.line_number - 1, 0, ""),
+                    column_delta=1,
+                ),
+                self.__last_token,
+                new_token,
+            ]
+            self.register_replace_tokens_request(
+                context, self.__last_token, token, replacement_tokens
+            )
+        else:
+            replacement_tokens = [
+                BlankLineMarkdownToken(
+                    extracted_whitespace="",
+                    position_marker=PositionMarker(new_token.line_number - 1, 0, ""),
+                    column_delta=1,
+                ),
+                new_token,
+            ]
+            self.register_replace_tokens_request(
+                context, token, token, replacement_tokens
+            )
 
     def __handle_fenced_code_block(
         self, context: PluginScanContext, token: MarkdownToken, special_case: bool
@@ -476,19 +544,27 @@ class RuleMd031(RulePlugin):
     def __process_pending_container_end(
         self, context: PluginScanContext, token: MarkdownToken
     ) -> None:
-        if next_container_adjustment_list := self.__container_adjustments[-1]:
-            self.__process_pending_container_end_adjustment(
-                context, next_container_adjustment_list
-            )
-
-        if self.__container_token_stack[-1].is_block_quote_start:
-            self.__process_pending_container_end_block_quote(token)
-        else:
-            self.__process_pending_container_end_list(token)
+        if context.in_fix_mode:
+            if next_container_adjustment_list := self.__container_adjustments[-1]:
+                self.__process_pending_container_end_adjustment(
+                    context, next_container_adjustment_list
+                )
+            if self.__container_token_stack[-1].is_block_quote_start:
+                self.__process_pending_container_end_block_quote(token)
+            else:
+                self.__process_pending_container_end_list(token)
 
+        self.__removed_container_token_stack = self.__container_token_stack[-1]
         del self.__container_token_stack[-1]
+
+        # self.__removed_container_adjustments = self.__container_adjustments[-1]
         del self.__container_adjustments[-1]
+
+        # self.__removed_closed_container_adjustments = (
+        #     self.__closed_container_adjustments[-1]
+        # )
         del self.__closed_container_adjustments[-1]
+
         del self.__end_tokens[-1]
         self.__pending_container_ends -= 1
 
@@ -544,6 +620,9 @@ class RuleMd031(RulePlugin):
 
         self.__second_last_token = self.__last_token
         self.__last_token = token
+        self.__removed_container_token_stack = None
+        # self.__removed_container_adjustments = None
+        # self.__removed_closed_container_adjustments = None
 
 
 # pylint: enable=too-many-instance-attributes


Test patch:
diff --git a/publish/test-results.json b/publish/test-results.json
index 24c974b1..688b4aa3 100644
--- a/publish/test-results.json
+++ b/publish/test-results.json
@@ -1364,10 +1364,10 @@
         },
         {
             "name": "test.rules.test_md031",
-            "totalTests": 268,
+            "totalTests": 286,
             "failedTests": 0,
             "errorTests": 0,
-            "skippedTests": 0,
+            "skippedTests": 22,
             "elapsedTimeInMilliseconds": 0
         },
         {
@@ -1620,7 +1620,7 @@
         },
         {
             "name": "test.test_markdown_extra",
-            "totalTests": 311,
+            "totalTests": 322,
             "failedTests": 0,
             "errorTests": 0,
             "skippedTests": 1,
diff --git a/test/gfm/test_markdown_block_quotes.py b/test/gfm/test_markdown_block_quotes.py
index b7d949c1..d8444b6e 100644
--- a/test/gfm/test_markdown_block_quotes.py
+++ b/test/gfm/test_markdown_block_quotes.py
@@ -2008,7 +2008,7 @@ def test_block_quotes_229ha():
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -2142,7 +2142,7 @@ comments
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
diff --git a/test/gfm/test_markdown_whitespace_html.py b/test/gfm/test_markdown_whitespace_html.py
index 07d544fc..4e7ea184 100644
--- a/test/gfm/test_markdown_whitespace_html.py
+++ b/test/gfm/test_markdown_whitespace_html.py
@@ -1329,7 +1329,7 @@ def test_whitespaces_html_with_tabs_before_within_block_quote_ordered_double_lis
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -1372,7 +1372,7 @@ def test_whitespaces_html_with_tabs_before_within_block_quote_ordered_double_lis
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -1629,7 +1629,7 @@ def test_whitespaces_html_with_tabs_before_within_block_quote_ordered_double_lis
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
diff --git a/test/nested_three/test_markdown_nested_three_block_block_ordered_max.py b/test/nested_three/test_markdown_nested_three_block_block_ordered_max.py
index 99909511..d8b1c10a 100644
--- a/test/nested_three/test_markdown_nested_three_block_block_ordered_max.py
+++ b/test/nested_three/test_markdown_nested_three_block_block_ordered_max.py
@@ -496,8 +496,10 @@ def test_nested_three_block_max_block_max_ordered_max_empty_with_space_drop_orde
     """
 
     # Arrange
-    source_markdown = """   >    >    1. 
-   >    >    item"""
+    source_markdown = """   >    >    1.\a
+   >    >    item""".replace(
+        "\a", " "
+    )
     expected_tokens = [
         "[block-quote(1,4):   :   > ]",
         "[block-quote(1,9)::   >    > \n   >    > ]",
diff --git a/test/nested_three/test_markdown_nested_three_block_ordered_block.py b/test/nested_three/test_markdown_nested_three_block_ordered_block.py
index b9b3ac9b..bf753106 100644
--- a/test/nested_three/test_markdown_nested_three_block_ordered_block.py
+++ b/test/nested_three/test_markdown_nested_three_block_ordered_block.py
@@ -62,7 +62,7 @@ def test_nested_three_block_nl_ordered_nl_block_x():
         "[BLANK(1,2):]",
         "[olist(2,3):.:1:5::\n]",
         "[BLANK(2,5):]",
-        "[block-quote(3,4)::> \n>    > ]",
+        "[block-quote(3,6)::> \n>    > ]",
         "[para(3,8):\n]",
         "[text(3,8):list\nitem::\n]",
         "[end-para:::True]",
@@ -192,7 +192,7 @@ def test_nested_three_block_nl_ordered_nl_block_no_bq3():
         "[BLANK(1,2):]",
         "[olist(2,3):.:1:5::\n]",
         "[BLANK(2,5):]",
-        "[block-quote(3,4)::> \n]",
+        "[block-quote(3,6)::> \n]",
         "[para(3,8):\n     ]",
         "[text(3,8):list\n\a>\a&gt;\a item::\n]",
         "[end-para:::True]",
@@ -451,7 +451,7 @@ def test_nested_three_block_skip_nl_ordered_nl_block():
         "[BLANK(1,2):]",
         "[olist(2,3):.:1:5::\n]",
         "[BLANK(2,5):]",
-        "[block-quote(3,4)::> \n]",
+        "[block-quote(3,6)::> \n]",
         "[para(3,8):\n     ]",
         "[text(3,8):list\n\a>\a&gt;\a item::\n]",
         "[end-para:::True]",
@@ -736,7 +736,7 @@ def test_nested_three_block_nl_ordered_nl_block_skip():
         "[BLANK(1,2):]",
         "[olist(2,3):.:1:5::\n   þ]",
         "[BLANK(2,5):]",
-        "[block-quote(3,4)::> \n> ]",
+        "[block-quote(3,6)::> \n> ]",
         "[para(3,8):\n  ]",
         "[text(3,8):list\nitem::\n]",
         "[end-para:::True]",
@@ -863,7 +863,7 @@ def test_nested_three_block_nl_ordered_nl_block_skip_no_bq3():
         "[BLANK(1,2):]",
         "[olist(2,3):.:1:5::\n]",
         "[BLANK(2,5):]",
-        "[block-quote(3,4)::> \n]",
+        "[block-quote(3,6)::> \n]",
         "[para(3,8):\n       ]",
         "[text(3,8):list\nitem::\n]",
         "[end-para:::True]",
@@ -1114,7 +1114,7 @@ def test_nested_three_block_skip_nl_ordered_nl_block_skip():
         "[BLANK(1,2):]",
         "[olist(2,3):.:1:5::\n]",
         "[BLANK(2,5):]",
-        "[block-quote(3,4)::> \n]",
+        "[block-quote(3,6)::> \n]",
         "[para(3,8):\n       ]",
         "[text(3,8):list\nitem::\n]",
         "[end-para:::True]",
@@ -1773,7 +1773,7 @@ item</li>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
diff --git a/test/nested_three/test_markdown_nested_three_block_unordered_block.py b/test/nested_three/test_markdown_nested_three_block_unordered_block.py
index 204bafc5..af63a0ac 100644
--- a/test/nested_three/test_markdown_nested_three_block_unordered_block.py
+++ b/test/nested_three/test_markdown_nested_three_block_unordered_block.py
@@ -62,7 +62,7 @@ def test_nested_three_block_nl_unordered_nl_block_x():
         "[BLANK(1,2):]",
         "[ulist(2,3):+::4::\n]",
         "[BLANK(2,4):]",
-        "[block-quote(3,3)::> \n>   > ]",
+        "[block-quote(3,5)::> \n>   > ]",
         "[para(3,7):\n]",
         "[text(3,7):list\nitem::\n]",
         "[end-para:::True]",
@@ -192,7 +192,7 @@ def test_nested_three_block_nl_unordered_nl_block_no_bq3():
         "[BLANK(1,2):]",
         "[ulist(2,3):+::4::\n]",
         "[BLANK(2,4):]",
-        "[block-quote(3,3)::> \n]",
+        "[block-quote(3,5)::> \n]",
         "[para(3,7):\n    ]",
         "[text(3,7):list\n\a>\a&gt;\a item::\n]",
         "[end-para:::True]",
@@ -451,7 +451,7 @@ def test_nested_three_block_skip_nl_unordered_nl_block():
         "[BLANK(1,2):]",
         "[ulist(2,3):+::4::\n]",
         "[BLANK(2,4):]",
-        "[block-quote(3,3)::> \n]",
+        "[block-quote(3,5)::> \n]",
         "[para(3,7):\n    ]",
         "[text(3,7):list\n\a>\a&gt;\a item::\n]",
         "[end-para:::True]",
@@ -736,7 +736,7 @@ def test_nested_three_block_nl_unordered_nl_block_skip():
         "[BLANK(1,2):]",
         "[ulist(2,3):+::4::\n  þ]",
         "[BLANK(2,4):]",
-        "[block-quote(3,3)::> \n> ]",
+        "[block-quote(3,5)::> \n> ]",
         "[para(3,7):\n  ]",
         "[text(3,7):list\nitem::\n]",
         "[end-para:::True]",
@@ -863,7 +863,7 @@ def test_nested_three_block_nl_unordered_nl_block_skip_no_bq3():
         "[BLANK(1,2):]",
         "[ulist(2,3):+::4::\n]",
         "[BLANK(2,4):]",
-        "[block-quote(3,3)::> \n]",
+        "[block-quote(3,5)::> \n]",
         "[para(3,7):\n      ]",
         "[text(3,7):list\nitem::\n]",
         "[end-para:::True]",
@@ -1114,7 +1114,7 @@ def test_nested_three_block_skip_nl_unordered_nl_block_skip():
         "[BLANK(1,2):]",
         "[ulist(2,3):+::4::\n]",
         "[BLANK(2,4):]",
-        "[block-quote(3,3)::> \n]",
+        "[block-quote(3,5)::> \n]",
         "[para(3,7):\n      ]",
         "[text(3,7):list\nitem::\n]",
         "[end-para:::True]",
diff --git a/test/nested_three/test_markdown_nested_three_unordered_block_ordered.py b/test/nested_three/test_markdown_nested_three_unordered_block_ordered.py
index 3d3cf040..be9a4ec3 100644
--- a/test/nested_three/test_markdown_nested_three_unordered_block_ordered.py
+++ b/test/nested_three/test_markdown_nested_three_unordered_block_ordered.py
@@ -2009,7 +2009,7 @@ def test_nested_three_unordered_block_ordered_with_blank_fenced_bc():
 </ul>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
diff --git a/test/rules/test_md001.py b/test/rules/test_md001.py
index 2786c10e..b022ae4e 100644
--- a/test/rules/test_md001.py
+++ b/test/rules/test_md001.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD001 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -159,10 +160,6 @@ kick in if there is a title field in the front matter.
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -173,7 +170,9 @@ def test_md001_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md001")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md001_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md004.py b/test/rules/test_md004.py
index 89242e4a..4af25a90 100644
--- a/test/rules/test_md004.py
+++ b/test/rules/test_md004.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD004 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -364,10 +365,6 @@ this is a separator
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -378,7 +375,9 @@ def test_md004_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md004")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md004_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md005.py b/test/rules/test_md005.py
index 74a259ad..e916c9c0 100644
--- a/test/rules/test_md005.py
+++ b/test/rules/test_md005.py
@@ -5,6 +5,7 @@ Module to provide tests related to the MD005 rule.
 import os
 from test.rules.utils import (
     build_fix_and_clash_lists,
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -944,7 +945,9 @@ def test_md005_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md005")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md005_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md006.py b/test/rules/test_md006.py
index 2bc0027b..9b87d27b 100644
--- a/test/rules/test_md006.py
+++ b/test/rules/test_md006.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD006 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -216,11 +217,6 @@ scanTests = [
     ),
 ]
 
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
-
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
 def test_md006_scan(test: pluginRuleTest) -> None:
@@ -230,7 +226,9 @@ def test_md006_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, plugin_enable_this_rule)
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md006_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md007.py b/test/rules/test_md007.py
index db19ff05..5b619777 100644
--- a/test/rules/test_md007.py
+++ b/test/rules/test_md007.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD007 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -859,10 +860,6 @@ scanTests = [
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -873,7 +870,9 @@ def test_md007_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md007")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md007_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md009.py b/test/rules/test_md009.py
index 9457886c..84f4518f 100644
--- a/test/rules/test_md009.py
+++ b/test/rules/test_md009.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD009 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -751,10 +752,6 @@ Some more text
         ),
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -765,7 +762,9 @@ def test_md009_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md009")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md009_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md010.py b/test/rules/test_md010.py
index 1bf9536c..9d1cff8f 100644
--- a/test/rules/test_md010.py
+++ b/test/rules/test_md010.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD010 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -64,13 +65,13 @@ a   bb  ccc ddd
     pluginRuleTest(
         "bad_simple_text_with_tab_fix_and_debug",
         source_file_name=f"{source_path}bad_simple_text_with_tab.md",
-        use_fix_debug=True,
         source_file_contents="""before-tab\tafter-tab
 before-tab\tafter-tab
 before-tab\tafter-tab\tafter-another
 a\tbb\tccc\tddd
 """,
         scan_expected_return_code=1,
+        use_fix_debug=True,
         scan_expected_output="""{temp_source_path}:1:11: MD010: Hard tabs [Column: 11] (no-hard-tabs)
 {temp_source_path}:2:11: MD010: Hard tabs [Column: 11] (no-hard-tabs)
 {temp_source_path}:3:11: MD010: Hard tabs [Column: 11] (no-hard-tabs)
@@ -610,10 +611,6 @@ a line of text  with    tabs
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -624,7 +621,9 @@ def test_md010_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md010")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md010_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md019.py b/test/rules/test_md019.py
index d70156c3..31eb62be 100644
--- a/test/rules/test_md019.py
+++ b/test/rules/test_md019.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD019 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -392,11 +393,6 @@ a line of text
     ),
 ]
 
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
-
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
 def test_md019_scan(test: pluginRuleTest) -> None:
@@ -406,7 +402,9 @@ def test_md019_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md019")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md019_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md021.py b/test/rules/test_md021.py
index 246d782a..75a67ae0 100644
--- a/test/rules/test_md021.py
+++ b/test/rules/test_md021.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD021 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -440,11 +441,6 @@ just some text
     ),
 ]
 
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
-
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
 def test_md021_scan(test: pluginRuleTest) -> None:
@@ -454,7 +450,9 @@ def test_md021_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md021")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md021_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md023.py b/test/rules/test_md023.py
index 6729c4cd..cf2dc888 100644
--- a/test/rules/test_md023.py
+++ b/test/rules/test_md023.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD023 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -1324,11 +1325,6 @@ Some more text
     ),
 ]
 
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
-
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
 def test_md023_scan(test: pluginRuleTest) -> None:
@@ -1338,7 +1334,9 @@ def test_md023_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md023")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md023_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md027.py b/test/rules/test_md027.py
index 49300559..6ea83e14 100644
--- a/test/rules/test_md027.py
+++ b/test/rules/test_md027.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD027 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -845,10 +846,6 @@ scanTests = [
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -859,7 +856,9 @@ def test_md027_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md027")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md027_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md027_inline.py b/test/rules/test_md027_inline.py
index a2f64dfd..0379fe4d 100644
--- a/test/rules/test_md027_inline.py
+++ b/test/rules/test_md027_inline.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD027 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_scan_test,
     id_test_plug_rule_fn,
@@ -413,11 +414,6 @@ scanTests = [
     ),
 ]
 
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
-
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
 def test_md027_scan(test: pluginRuleTest) -> None:
@@ -427,7 +423,9 @@ def test_md027_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md027")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md027_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md027_leaf.py b/test/rules/test_md027_leaf.py
index 31867efc..228bb8af 100644
--- a/test/rules/test_md027_leaf.py
+++ b/test/rules/test_md027_leaf.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD027 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_scan_test,
     id_test_plug_rule_fn,
@@ -436,10 +437,6 @@ scanTests = [
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -450,7 +447,9 @@ def test_md027_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md027")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md027_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md027_leaf_plus_one.py b/test/rules/test_md027_leaf_plus_one.py
index 592272f8..04ef40be 100644
--- a/test/rules/test_md027_leaf_plus_one.py
+++ b/test/rules/test_md027_leaf_plus_one.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD027 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_scan_test,
     id_test_plug_rule_fn,
@@ -427,10 +428,6 @@ scanTests = [
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -441,7 +438,9 @@ def test_md027_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md027")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md027_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md029.py b/test/rules/test_md029.py
index 10f3c686..6d6aa59a 100644
--- a/test/rules/test_md029.py
+++ b/test/rules/test_md029.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD029 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -622,10 +623,6 @@ text to break up lists
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -636,7 +633,9 @@ def test_md029_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md029")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md029_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md030_ordered.py b/test/rules/test_md030_ordered.py
index 020723bb..352e3cb0 100644
--- a/test/rules/test_md030_ordered.py
+++ b/test/rules/test_md030_ordered.py
@@ -4,7 +4,7 @@ Module to provide tests related to the MD030 rule.
 
 import os
 from test.rules.utils import (
-    build_fix_and_clash_lists,
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -331,8 +331,6 @@ scanTests = [
     ),
 ]
 
-fixTests, _ = build_fix_and_clash_lists(scanTests)
-
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
 def test_md030_scan(test: pluginRuleTest) -> None:
@@ -342,7 +340,9 @@ def test_md030_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md030")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md030_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md030_unordered.py b/test/rules/test_md030_unordered.py
index 8d6e27e4..960feebd 100644
--- a/test/rules/test_md030_unordered.py
+++ b/test/rules/test_md030_unordered.py
@@ -4,7 +4,7 @@ Module to provide tests related to the MD030 rule.
 
 import os
 from test.rules.utils import (
-    build_fix_and_clash_lists,
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_scan_test,
@@ -483,8 +483,6 @@ another paragraph
     ),
 ]
 
-fixTests, _ = build_fix_and_clash_lists(scanTests)
-
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
 def test_md030_scan(test: pluginRuleTest) -> None:
@@ -494,7 +492,9 @@ def test_md030_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md030")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md030_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md031.py b/test/rules/test_md031.py
index 09c33ada..475b9ffd 100644
--- a/test/rules/test_md031.py
+++ b/test/rules/test_md031.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD031 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -914,6 +915,7 @@ A code block
 """,
         disable_rules="md032",
         use_debug=True,
+        use_fix_debug=False,
         fix_expected_file_contents="""+ list
 
 ```block
@@ -1079,7 +1081,7 @@ A code block
 + another list
 """,
     ),
-    pluginRuleTest(
+    pluginRuleTest(  # test_extra_047b0 test_extra_047b1
         "bad_fenced_block_in_list_with_previous_inner_list",
         source_file_contents="""+ list
   + inner list
@@ -1094,6 +1096,8 @@ A code block
 {temp_source_path}:6:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
+        # use_fix_debug=True,
+        # use_debug=True,
         fix_expected_file_contents="""+ list
   + inner list
     couple of lines
@@ -1105,7 +1109,7 @@ A code block
 + another list
 """,
     ),
-    pluginRuleTest(
+    pluginRuleTest(  # test_extra_047c0 test_extra_047c1
         "bad_fenced_block_in_list_with_previous_inner_list_with_thematics",
         source_file_contents="""+ list
   + inner list
@@ -1122,6 +1126,7 @@ A code block
 {temp_source_path}:7:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
+        # use_fix_debug=True,
         fix_expected_file_contents="""+ list
   + inner list
     couple of lines
@@ -1705,16 +1710,17 @@ A code block
 """,
         disable_rules="md032",
         use_debug=True,
-        #         fix_expected_file_contents="""> > + --------
-        # > >   > block 1
-        # > >   > block 2
-        # > >
-        # > >   ```block
-        # > >   A code block
-        # > >   ```
-        # > >
-        # > >   --------
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> > + --------
+> >   > block 1
+> >   > block 2
+> >
+> >   ```block
+> >   A code block
+> >   ```
+> >
+> >   --------
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_list_in_block_quote_in_block_quote_with_previous_block_with_thematics",
@@ -1760,17 +1766,18 @@ A code block
 {temp_source_path}:7:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032,md035",
-        #         fix_expected_file_contents="""> > + ______
-        # > >   + list 1
-        # > >     list 2
-        # > >   + list 3
-        # > >
-        # > >   ```block
-        # > >   A code block
-        # > >   ```
-        # > >
-        # > >   ______
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> > + ______
+> >   + list 1
+> >     list 2
+> >   + list 3
+> >
+> >   ```block
+> >   A code block
+> >   ```
+> >
+> >   ______
+""",
     ),
     pluginRuleTest(  # test_extra_044lex1 test_extra_044lex1a
         "bad_fenced_block_in_list_in_block_quote_in_block_quote_with_previous_list_and_thematics",
@@ -1789,18 +1796,19 @@ A code block
 {temp_source_path}:8:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032,md035",
-        #         fix_expected_file_contents="""> > + ______
-        # > >   + list 1
-        # > >     list 2
-        # > >   + list 3
-        # > >   ______
-        # > >
-        # > >   ```block
-        # > >   A code block
-        # > >   ```
-        # > >
-        # > >   ______
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> > + ______
+> >   + list 1
+> >     list 2
+> >   + list 3
+> >   ______
+> >
+> >   ```block
+> >   A code block
+> >   ```
+> >
+> >   ______
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_block_quote_in_list",
@@ -2112,16 +2120,17 @@ A code block
 """,
         disable_rules="md032,md027",
         use_debug=True,
-        #         fix_expected_file_contents="""1. > + ----
-        #    >   > block 1
-        #    >   > block 2
-        #    >
-        #    >   ```block
-        #    >   A code block
-        #    >   ```
-        #    >
-        #    >   ----
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""1. > + ----
+   >   > block 1
+   >   > block 2
+   >
+   >   ```block
+   >   A code block
+   >   ```
+   >
+   >   ----
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_list_in_block_quote_in_list_with_previous_block_2",
@@ -2223,17 +2232,18 @@ A code block
 {temp_source_path}:7:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        #         fix_expected_file_contents="""1. > + ----
-        #    >   + list 1
-        #    >     list 2
-        #    >   + list 3
-        #    >
-        #    >   ```block
-        #    >   A code block
-        #    >   ```
-        #    >
-        #    >   ----
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""1. > + ----
+   >   + list 1
+   >     list 2
+   >   + list 3
+   >
+   >   ```block
+   >   A code block
+   >   ```
+   >
+   >   ----
+""",
     ),
     pluginRuleTest(  # test_extra_046n0 test_extra_046n1
         "bad_fenced_block_in_list_in_block_quote_in_list_with_previous_list_with_thematics",
@@ -2252,18 +2262,19 @@ A code block
 {temp_source_path}:8:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        #         fix_expected_file_contents="""1. > + ----
-        #    >   + list 1
-        #    >     list 2
-        #    >   + list 3
-        #    >   ----
-        #    >
-        #    >   ```block
-        #    >   A code block
-        #    >   ```
-        #    >
-        #    >   ----
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""1. > + ----
+   >   + list 1
+   >     list 2
+   >   + list 3
+   >   ----
+   >
+   >   ```block
+   >   A code block
+   >   ```
+   >
+   >   ----
+""",
     ),
     pluginRuleTest(  # test_extra_046m0 test_extra_046m1
         "bad_fenced_block_in_block_quote_in_block_quote_in_list_with_previous_block",
@@ -2460,14 +2471,15 @@ A code block
 {temp_source_path}:4:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        #         fix_expected_file_contents="""> + list
-        # >
-        # >   ```block
-        # >   A code block
-        # >   ```
-        # >
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + list
+>
+>   ```block
+>   A code block
+>   ```
+>
+> + another list
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_list_in_block_quote_with_previous_inner_block_0",
@@ -2515,16 +2527,17 @@ A code block
 """,
         disable_rules="md032,md027",
         use_debug=True,
-        #         fix_expected_file_contents="""> + list 1
-        # >   > block 2
-        # >   > block 3
-        # >
-        # >   ```block
-        # >   A code block
-        # >   ```
-        # >
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + list 1
+>   > block 2
+>   > block 3
+>
+>   ```block
+>   A code block
+>   ```
+>
+> + another list
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_list_in_block_quote_with_previous_inner_block_1",
@@ -2665,16 +2678,17 @@ A code block
 {temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        #         fix_expected_file_contents="""> + list 1
-        # >   + list 2
-        # >     list 3
-        # >
-        # >   ```block
-        # >   A code block
-        # >   ```
-        # >
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + list 1
+>   + list 2
+>     list 3
+>
+>   ```block
+>   A code block
+>   ```
+>
+> + another list
+""",
     ),
     pluginRuleTest(  # see sub3    test_extra_044cx test_extra_044ca
         "bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_with_thematics",
@@ -2693,18 +2707,19 @@ A code block
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        #         fix_expected_file_contents="""> + list 1
-        # >   + list 2
-        # >     list 3
-        # >   ------
-        # >
-        # >   ```block
-        # >   A code block
-        # >   ```
-        # >
-        # >   ------
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + list 1
+>   + list 2
+>     list 3
+>   ------
+>
+>   ```block
+>   A code block
+>   ```
+>
+>   ------
+> + another list
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_with_thematics_sub1",
@@ -2751,7 +2766,6 @@ A code block
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md022,md023",
-        # use_fix_debug=False,
         fix_expected_file_contents="""> + list 1
 >     list 2
 >     list 3
@@ -2782,19 +2796,20 @@ A code block
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        use_fix_debug=True,
-        #         fix_expected_file_contents="""> + list 1
-        # >   + list 2
-        # >   + list 3
-        # >   _____
-        # >
-        # >   ```block
-        # >   A code block
-        # >   ```
-        # >
-        # >   ------
-        # > + another list
-        # """,
+        use_fix_debug=False,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + list 1
+>   + list 2
+>   + list 3
+>   _____
+>
+>   ```block
+>   A code block
+>   ```
+>
+>   ------
+> + another list
+""",
     ),
     pluginRuleTest(  # test_extra_046da test_extra_046db
         "bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_and_para_continue",
@@ -2812,17 +2827,18 @@ A code block
 {temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        #         fix_expected_file_contents="""> + list 1
-        # >   + list 2
-        # >   list 3
-        # >
-        # >   ```block
-        # >   A code block
-        # >   ```
-        # >
-        # >   ------
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + list 1
+>   + list 2
+>   list 3
+>
+>   ```block
+>   A code block
+>   ```
+>
+>   ------
+> + another list
+""",
     ),
     pluginRuleTest(  # test_extra_046x test_extra_046dx
         "bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_and_para_continue_with_thematics",
@@ -2841,18 +2857,19 @@ A code block
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        #         fix_expected_file_contents="""> + list 1
-        # >   + list 2
-        # >   list 3
-        # >   ------
-        # >
-        # >   ```block
-        # >   A code block
-        # >   ```
-        # >
-        # >   ------
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + list 1
+>   + list 2
+>   list 3
+>   ------
+>
+>   ```block
+>   A code block
+>   ```
+>
+>   ------
+> + another list
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_block_quote_in_list_in_block_quote",
@@ -2916,19 +2933,19 @@ A code block
 {temp_source_path}:6:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        use_fix_debug=False,
         use_debug=True,
-        #         fix_expected_file_contents="""> + > -----
-        # >   > > block 1
-        # >   > > block 2
-        # >   >
-        # >   > ```block
-        # >   > A code block
-        # >   > ```
-        # >   >
-        # >   > -----
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + > -----
+>   > > block 1
+>   > > block 2
+>   >
+>   > ```block
+>   > A code block
+>   > ```
+>   >
+>   > -----
+> + another list
+""",
     ),
     pluginRuleTest(  # test_extra_044mcv0 test_extra_044mcv1   also check with md027 enabled https://github.com/jackdewinter/pymarkdown/issues/1162
         "bad_fenced_block_in_block_quote_in_list_in_block_quote_with_previous_block_with_thematics",
@@ -2947,19 +2964,19 @@ A code block
 {temp_source_path}:7:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        use_fix_debug=False,
-        #         fix_expected_file_contents="""> + > -----
-        # >   > > block 1
-        # >   > > block 2
-        # >   > -----
-        # >   >
-        # >   > ```block
-        # >   > A code block
-        # >   > ```
-        # >   >
-        # >   > -----
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + > -----
+>   > > block 1
+>   > > block 2
+>   > -----
+>   >
+>   > ```block
+>   > A code block
+>   > ```
+>   >
+>   > -----
+> + another list
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_block_quote_in_list_in_block_quote_with_previous_list",
@@ -3085,18 +3102,19 @@ A code block
 {temp_source_path}:6:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032,md027",
+        mark_fix_as_skipped=True,
         use_debug=True,
-        #         fix_expected_file_contents="""> + + -----
-        # >     > block 1
-        # >     > block 2
-        # >
-        # >     ```block
-        # >     A code block
-        # >     ```
-        # >
-        # >     -----
-        # > + another list
-        # """,
+        fix_expected_file_contents="""> + + -----
+>     > block 1
+>     > block 2
+>
+>     ```block
+>     A code block
+>     ```
+>
+>     -----
+> + another list
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_list_in_list_in_block_quote_with_previous_block_with_thematics",
@@ -3146,18 +3164,19 @@ A code block
 {temp_source_path}:7:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        #         fix_expected_file_contents="""> + + -----
-        # >     + list 1
-        # >       list 2
-        # >     + list 3
-        # >
-        # >     ```block
-        # >     A code block
-        # >     ```
-        # >
-        # >     -----
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        fix_expected_file_contents="""> + + -----
+>     + list 1
+>       list 2
+>     + list 3
+>
+>     ```block
+>     A code block
+>     ```
+>
+>     -----
+> + another list
+""",
     ),
     pluginRuleTest(  # test_extra_044mcs1
         "bad_fenced_block_in_list_in_list_in_block_quote_with_previous_list_and_thematics",
@@ -3177,20 +3196,21 @@ A code block
 {temp_source_path}:8:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        use_fix_debug=True,
-        #         fix_expected_file_contents="""> + + -----
-        # >     + list 1
-        # >       list 2
-        # >     + list 3
-        # >     -----
-        # >
-        # >     ```block
-        # >     A code block
-        # >     ```
-        # >
-        # >     -----
-        # > + another list
-        # """,
+        mark_fix_as_skipped=True,
+        use_fix_debug=False,
+        fix_expected_file_contents="""> + + -----
+>     + list 1
+>       list 2
+>     + list 3
+>     -----
+>
+>     ```block
+>     A code block
+>     ```
+>
+>     -----
+> + another list
+""",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_list_in_list",
@@ -3316,7 +3336,7 @@ A code block
   + another list
 """,
     ),
-    pluginRuleTest(
+    pluginRuleTest(  # test_extra_047a0 test_extra_047a1
         "bad_fenced_block_in_list_in_list_with_previous_inner_list",
         source_file_contents="""+ + list 1
 + + + list 2.1
@@ -3331,6 +3351,8 @@ A code block
 {temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
+        use_fix_debug=False,
+        mark_fix_as_skipped=True,
         fix_expected_file_contents="""+ + list 1
 + + + list 2.1
       list 2.2
@@ -3358,6 +3380,7 @@ A code block
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
+        mark_fix_as_skipped=True,
         fix_expected_file_contents="""+ + list 1
 + + + list 2.1
       list 2.2
@@ -3386,6 +3409,8 @@ A code block
 """,
         disable_rules="md032",
         use_debug=True,
+        use_fix_debug=True,
+        mark_fix_as_skipped=True,
         fix_expected_file_contents="""+ + list 1
 + + + list 2.1
     list 2.2
@@ -3414,6 +3439,7 @@ A code block
 """,
         disable_rules="md032",
         use_debug=True,
+        mark_fix_as_skipped=True,
         fix_expected_file_contents="""+ + list 1
 + + + list 2.1
     list 2.2
@@ -3816,9 +3842,7 @@ def test_md031_scan(test: pluginRuleTest) -> None:
 
 
 @pytest.mark.parametrize(
-    "test",
-    [i for i in scanTests if i.fix_expected_file_contents is not None],
-    ids=id_test_plug_rule_fn,
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
 )
 def test_md031_fix(test: pluginRuleTest) -> None:
     """
diff --git a/test/rules/test_md035.py b/test/rules/test_md035.py
index 377c8a46..f5fbf6cc 100644
--- a/test/rules/test_md035.py
+++ b/test/rules/test_md035.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD035 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -260,10 +261,6 @@ ___
         scan_expected_output="",
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -274,7 +271,9 @@ def test_md035_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md035")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md035_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md037.py b/test/rules/test_md037.py
index 5df8b7ea..3f8a68a4 100644
--- a/test/rules/test_md037.py
+++ b/test/rules/test_md037.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD037 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -494,10 +495,6 @@ this text __is__ in bold
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -508,7 +505,9 @@ def test_md037_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md037")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md037_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md038.py b/test/rules/test_md038.py
index 2fbc744b..13ab7a9d 100644
--- a/test/rules/test_md038.py
+++ b/test/rules/test_md038.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD038 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -83,10 +84,6 @@ this is an only spaces `` codepsan
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -97,7 +94,9 @@ def test_md038_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md038")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md038_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md039.py b/test/rules/test_md039.py
index 34c88229..3f70ce35 100644
--- a/test/rules/test_md039.py
+++ b/test/rules/test_md039.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD039 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -473,10 +474,6 @@ link
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -487,7 +484,9 @@ def test_md039_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md039")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md039_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md044.py b/test/rules/test_md044.py
index fd8201c5..59cbca74 100644
--- a/test/rules/test_md044.py
+++ b/test/rules/test_md044.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD044 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -942,10 +943,6 @@ is bad
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -956,7 +953,9 @@ def test_md044_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md044")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md044_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md046.py b/test/rules/test_md046.py
index 9526ea4b..01cc5673 100644
--- a/test/rules/test_md046.py
+++ b/test/rules/test_md046.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD046 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -356,11 +357,6 @@ ghi
     ),
 ]
 
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents is not None:
-        fixTests.append(i)
-
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
 def test_md046_scan(test: pluginRuleTest) -> None:
@@ -370,7 +366,9 @@ def test_md046_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md046")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md046_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md047.py b/test/rules/test_md047.py
index 883f55bd..d010ff67 100644
--- a/test/rules/test_md047.py
+++ b/test/rules/test_md047.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD047 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_fix_test,
     execute_query_configuration_test,
     execute_scan_test,
@@ -58,7 +59,6 @@ The line after this line is blank, but contains two spaces.
     pluginRuleTest(
         "bad_end_with_no_blank_line_fix_and_debug",
         source_file_name=f"{source_path}end_with_no_blank_line.md",
-        use_fix_debug=True,
         source_file_contents="""# This is a test
 
 The line after this line should be blank.""",
@@ -69,6 +69,7 @@ The line after this line should be blank.""",
 
 The line after this line should be blank.
 """,
+        use_fix_debug=True,
         fix_expected_output="""md009-before:# This is a test:
 md010-before:# This is a test:
 md047-before:# This is a test:
@@ -138,10 +139,6 @@ a line of text
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -152,7 +149,9 @@ def test_md047_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md047")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md047_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_md048.py b/test/rules/test_md048.py
index d30d1370..e307f0c5 100644
--- a/test/rules/test_md048.py
+++ b/test/rules/test_md048.py
@@ -4,6 +4,7 @@ Module to provide tests related to the MD048 rule.
 
 import os
 from test.rules.utils import (
+    calculate_fix_tests,
     execute_configuration_test,
     execute_fix_test,
     execute_query_configuration_test,
@@ -200,10 +201,6 @@ def test():
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -214,7 +211,9 @@ def test_md048_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "md048")
 
 
-@pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+@pytest.mark.parametrize(
+    "test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn
+)
 def test_md048_fix(test: pluginRuleTest) -> None:
     """
     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/test_pml101.py b/test/rules/test_pml101.py
index 39d6c9dd..7128c949 100644
--- a/test/rules/test_pml101.py
+++ b/test/rules/test_pml101.py
@@ -537,10 +537,6 @@ scanTests = [
 """,
     ),
 ]
-fixTests = []
-for i in scanTests:
-    if i.fix_expected_file_contents:
-        fixTests.append(i)
 
 
 @pytest.mark.parametrize("test", scanTests, ids=id_test_plug_rule_fn)
@@ -551,7 +547,7 @@ def test_pml101_scan(test: pluginRuleTest) -> None:
     execute_scan_test(test, "pml101")
 
 
-# @pytest.mark.parametrize("test", fixTests, ids=id_test_plug_rule_fn)
+# @pytest.mark.parametrize("test", calculate_fix_tests(scanTests), ids=id_test_plug_rule_fn)
 # def test_pml101_fix(test: pluginRuleTest) -> None:
 #     """
 #     Execute a parameterized fix test for plugin md001.
diff --git a/test/rules/utils.py b/test/rules/utils.py
index c12fd5d7..35a7577b 100644
--- a/test/rules/utils.py
+++ b/test/rules/utils.py
@@ -10,6 +10,8 @@ from test.utils import (
 )
 from typing import Any, List, Optional
 
+import pytest
+
 
 @dataclass
 class pluginConfigErrorTest:
@@ -47,6 +49,7 @@ class pluginRuleTest:
     fix_expected_error: str = ""
     add_plugin_path: str = ""
     is_mix_test: bool = True
+    mark_fix_as_skipped: bool = False
 
 
 def id_test_plug_rule_fn(val: Any) -> str:
@@ -156,6 +159,14 @@ def execute_scan_test(test: pluginRuleTest, host_rule_id: str):
             assert_if_lists_different(disabled_rules, found_rules)
 
 
+def calculate_fix_tests(scanTests: List[pluginRuleTest]) -> List[pluginRuleTest]:
+    return [
+        (pytest.param(i, marks=pytest.mark.skip) if i.mark_fix_as_skipped else i)
+        for i in scanTests
+        if i.fix_expected_file_contents is not None
+    ]
+
+
 def execute_fix_test(test: pluginRuleTest):
     scanner = MarkdownScanner()
     with build_arguments(test, True) as (temp_source_path, supplied_arguments):
diff --git a/test/test_markdown_extra.py b/test/test_markdown_extra.py
index 8f029288..6d8a6404 100644
--- a/test/test_markdown_extra.py
+++ b/test/test_markdown_extra.py
@@ -2749,7 +2749,7 @@ that</p>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -6283,7 +6283,7 @@ list 3</li>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -6352,7 +6352,7 @@ list 3</li>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -9735,7 +9735,7 @@ list 2</li>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -9916,7 +9916,7 @@ def test_extra_044lex5b():
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -10087,7 +10087,7 @@ block 2</p>
 </ol>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -10539,7 +10539,7 @@ def test_extra_044mb():
 
 
 @pytest.mark.gfm
-def test_extra_044mcx():
+def test_extra_044mcxx():
     """
     TBD
     """
@@ -10572,7 +10572,40 @@ this</li>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+
+
+@pytest.mark.gfm
+def test_extra_044mcxa():
+    """
+    TBD
+    """
+
+    # Arrange
+    source_markdown = """+  list
+  this
++ that
+"""
+    expected_tokens = [
+        "[ulist(1,1):+::3::\n]",
+        "[para(1,4):\n  ]",
+        "[text(1,4):list\nthis::\n]",
+        "[end-para:::True]",
+        "[li(3,1):2::]",
+        "[para(3,3):]",
+        "[text(3,3):that:]",
+        "[end-para:::True]",
+        "[BLANK(4,1):]",
+        "[end-ulist:::True]",
+    ]
+    expected_gfm = """<ul>
+<li>list
+this</li>
+<li>that</li>
+</ul>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
 
 
 @pytest.mark.gfm
@@ -10720,7 +10753,7 @@ this</li>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
 
 
 @pytest.mark.gfm
@@ -10896,7 +10929,7 @@ def test_extra_044mcp():
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -11306,7 +11339,7 @@ list 2</li>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12185,7 +12218,7 @@ block 2</p>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12251,7 +12284,7 @@ block 2</p>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12311,7 +12344,7 @@ block 2</p>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12497,7 +12530,7 @@ block 2</p>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12561,7 +12594,7 @@ block 2</p>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12625,7 +12658,7 @@ block 2</p>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12688,7 +12721,7 @@ block 2</p>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12749,7 +12782,7 @@ block 2</p>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12811,7 +12844,7 @@ list 3</li>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12862,7 +12895,7 @@ list 2</h2>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -12935,7 +12968,7 @@ def test_extra_046b():
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -13205,196 +13238,216 @@ list 2</li>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
 
 
 @pytest.mark.gfm
-def test_extra_046dx():
+def test_extra_046cc2():
     """
     TBD
-    bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_and_para_continue_with_thematics
+    bad_fenced_block_in_list_in_list_in_block_quote_with_previous_list_sub1
     """
 
     # Arrange
-    source_markdown = """> + list 1
->   + list 2
->   list 3
->   ------
->
->   ```block
->   A code block
->   ```
->
->   ------
+    source_markdown = """> +
+>   + -----
+>     + list 1
+>       list 2
+>     + list 3
+>     ```block
+>     A code block
+>     ```
+>     -----
 > + another list
 """
     expected_tokens = [
-        "[block-quote(1,1)::> \n> \n> \n> \n>\n> \n> \n> \n>\n> \n> ]",
-        "[ulist(1,3):+::4::\n  \n  \n  \n\n  \n]",
-        "[para(1,5):]",
-        "[text(1,5):list 1:]",
-        "[end-para:::True]",
-        "[ulist(2,5):+::6:  :  \n  ]",
-        "[para(2,7):\n]",
-        "[text(2,7):list 2\nlist 3::\n]",
+        "[block-quote(1,1)::> \n> \n> \n> \n> \n> \n> \n> \n> \n> ]",
+        "[ulist(1,3):+::4::]",
+        "[BLANK(1,4):]",
+        "[ulist(2,5):+::6:  :    \n    \n    ]",
+        "[tbreak(2,7):-::-----]",
+        "[ulist(3,7):+::8:    :      \n    ]",
+        "[para(3,9):\n]",
+        "[text(3,9):list 1\nlist 2::\n]",
+        "[end-para:::True]",
+        "[li(5,7):8:    :]",
+        "[para(5,9):]",
+        "[text(5,9):list 3:]",
         "[end-para:::False]",
         "[end-ulist:::True]",
-        "[tbreak(4,5):-::------]",
-        "[BLANK(5,2):]",
-        "[fcode-block(6,5):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[fcode-block(6,7):`:3:block:::::]",
+        "[text(7,5):A code block:]",
         "[end-fcode-block:::3:False]",
-        "[BLANK(9,2):]",
-        "[tbreak(10,5):-::------]",
-        "[li(11,3):4::]",
-        "[para(11,5):]",
-        "[text(11,5):another list:]",
+        "[tbreak(9,7):-::-----]",
+        "[end-ulist:::True]",
+        "[li(10,3):4::]",
+        "[para(10,5):]",
+        "[text(10,5):another list:]",
         "[end-para:::True]",
-        "[BLANK(12,1):]",
+        "[BLANK(11,1):]",
         "[end-ulist:::True]",
         "[end-block-quote:::True]",
     ]
     expected_gfm = """<blockquote>
 <ul>
 <li>
-<p>list 1</p>
 <ul>
-<li>list 2
-list 3</li>
-</ul>
+<li>
 <hr />
+<ul>
+<li>list 1
+list 2</li>
+<li>list 3</li>
+</ul>
 <pre><code class="language-block">A code block
 </code></pre>
 <hr />
 </li>
-<li>
-<p>another list</p>
+</ul>
 </li>
+<li>another list</li>
 </ul>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
 
 
 @pytest.mark.gfm
-def test_extra_046da():
+def test_extra_046cc3():
     """
     TBD
-    bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_and_para_continue
+    bad_fenced_block_in_list_in_list_in_block_quote_with_previous_list_sub1
     """
 
     # Arrange
-    source_markdown = """> + list 1
->   + list 2
->   list 3
->   ```block
->   A code block
->   ```
->   ------
+    source_markdown = """> +
+>   + -----
+>     + list 1
+>       list 2
+>     + list 3
+>
+>     ```block
+>     A code block
+>     ```
+>
+>     -----
 > + another list
 """
     expected_tokens = [
-        "[block-quote(1,1)::> \n> \n> \n> \n> \n> \n> \n> ]",
-        "[ulist(1,3):+::4::  \n  \n  \n]",
-        "[para(1,5):]",
-        "[text(1,5):list 1:]",
+        "[block-quote(1,1)::> \n> \n> \n> \n> \n>\n> \n> \n> \n>\n> \n> ]",
+        "[ulist(1,3):+::4::]",
+        "[BLANK(1,4):]",
+        "[ulist(2,5):+::6:  :    \n    \n\n    ]",
+        "[tbreak(2,7):-::-----]",
+        "[ulist(3,7):+::8:    :      \n\n    ]",
+        "[para(3,9):\n]",
+        "[text(3,9):list 1\nlist 2::\n]",
         "[end-para:::True]",
-        "[ulist(2,5):+::6:  :  \n  ]",
-        "[para(2,7):\n]",
-        "[text(2,7):list 2\nlist 3::\n]",
-        "[end-para:::False]",
+        "[li(5,7):8:    :]",
+        "[para(5,9):]",
+        "[text(5,9):list 3:]",
+        "[end-para:::True]",
+        "[BLANK(6,2):]",
         "[end-ulist:::True]",
-        "[fcode-block(4,5):`:3:block:::::]",
-        "[text(5,3):A code block:]",
+        "[fcode-block(7,7):`:3:block:::::]",
+        "[text(8,5):A code block:]",
         "[end-fcode-block:::3:False]",
-        "[tbreak(7,5):-::------]",
-        "[li(8,3):4::]",
-        "[para(8,5):]",
-        "[text(8,5):another list:]",
+        "[BLANK(10,2):]",
+        "[tbreak(11,7):-::-----]",
+        "[end-ulist:::True]",
+        "[li(12,3):4::]",
+        "[para(12,5):]",
+        "[text(12,5):another list:]",
         "[end-para:::True]",
-        "[BLANK(9,1):]",
+        "[BLANK(13,1):]",
         "[end-ulist:::True]",
         "[end-block-quote:::True]",
     ]
     expected_gfm = """<blockquote>
 <ul>
-<li>list 1
+<li>
 <ul>
-<li>list 2
-list 3</li>
+<li>
+<hr />
+<ul>
+<li>list 1
+list 2</li>
+<li>list 3</li>
 </ul>
 <pre><code class="language-block">A code block
 </code></pre>
 <hr />
 </li>
+</ul>
+</li>
 <li>another list</li>
 </ul>
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
 
 
 @pytest.mark.gfm
-def test_extra_046db():
+def test_extra_046cc4():
     """
     TBD
-    bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_and_para_continue
+    bad_fenced_block_in_list_in_list_in_block_quote_with_previous_list_sub2
     """
 
     # Arrange
-    source_markdown = """> + list 1
->   + list 2
->   list 3
->
->   ```block
->   A code block
->   ```
->
->   ------
+    source_markdown = """> +
+>   + -----
+>     + list 1
+>       list 2
+>     ```block
+>     A code block
+>     ```
+>     -----
 > + another list
 """
     expected_tokens = [
-        "[block-quote(1,1)::> \n> \n> \n>\n> \n> \n> \n>\n> \n> ]",
-        "[ulist(1,3):+::4::  \n  \n\n  \n]",
-        "[para(1,5):]",
-        "[text(1,5):list 1:]",
-        "[end-para:::True]",
-        "[ulist(2,5):+::6:  :  \n\n  ]",
-        "[para(2,7):\n]",
-        "[text(2,7):list 2\nlist 3::\n]",
-        "[end-para:::True]",
-        "[BLANK(4,2):]",
+        "[block-quote(1,1)::> \n> \n> \n> \n> \n> \n> \n> \n> ]",
+        "[ulist(1,3):+::4::]",
+        "[BLANK(1,4):]",
+        "[ulist(2,5):+::6:  :    \n    \n    ]",
+        "[tbreak(2,7):-::-----]",
+        "[ulist(3,7):+::8:    :      \n    ]",
+        "[para(3,9):\n]",
+        "[text(3,9):list 1\nlist 2::\n]",
+        "[end-para:::False]",
         "[end-ulist:::True]",
-        "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[fcode-block(5,7):`:3:block:::::]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
-        "[BLANK(8,2):]",
-        "[tbreak(9,5):-::------]",
-        "[li(10,3):4::]",
-        "[para(10,5):]",
-        "[text(10,5):another list:]",
+        "[tbreak(8,7):-::-----]",
+        "[end-ulist:::True]",
+        "[li(9,3):4::]",
+        "[para(9,5):]",
+        "[text(9,5):another list:]",
         "[end-para:::True]",
-        "[BLANK(11,1):]",
+        "[BLANK(10,1):]",
         "[end-ulist:::True]",
         "[end-block-quote:::True]",
     ]
     expected_gfm = """<blockquote>
 <ul>
 <li>
-<p>list 1</p>
 <ul>
-<li>list 2
-list 3</li>
+<li>
+<hr />
+<ul>
+<li>list 1
+list 2</li>
 </ul>
 <pre><code class="language-block">A code block
 </code></pre>
 <hr />
 </li>
-<li>
-<p>another list</p>
+</ul>
 </li>
+<li>another list</li>
 </ul>
 </blockquote>"""
 
@@ -13403,21 +13456,277 @@ list 3</li>
 
 
 @pytest.mark.gfm
-def test_extra_046e():
+def test_extra_046cc5():
     """
     TBD
-    bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_with_thematics_sub3
     """
 
     # Arrange
-    source_markdown = """> + list 1
->   + list 2
+    source_markdown = """> +
+>   + list 1
+>     list 2
 >   + list 3
->   _____
 >   ```block
 >   A code block
 >   ```
->   _____
+>   -----
+> + another list
+"""
+    expected_tokens = [
+        "[block-quote(1,1)::> \n> \n> \n> \n> \n> \n> \n> \n> ]",
+        "[ulist(1,3):+::4::  \n  \n  \n]",
+        "[BLANK(1,4):]",
+        "[ulist(2,5):+::6:  :    \n  ]",
+        "[para(2,7):\n]",
+        "[text(2,7):list 1\nlist 2::\n]",
+        "[end-para:::True]",
+        "[li(4,5):6:  :]",
+        "[para(4,7):]",
+        "[text(4,7):list 3:]",
+        "[end-para:::False]",
+        "[end-ulist:::True]",
+        "[fcode-block(5,5):`:3:block:::::]",
+        "[text(6,3):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[tbreak(8,5):-::-----]",
+        "[li(9,3):4::]",
+        "[para(9,5):]",
+        "[text(9,5):another list:]",
+        "[end-para:::True]",
+        "[BLANK(10,1):]",
+        "[end-ulist:::True]",
+        "[end-block-quote:::True]",
+    ]
+    expected_gfm = """<blockquote>
+<ul>
+<li>
+<ul>
+<li>list 1
+list 2</li>
+<li>list 3</li>
+</ul>
+<pre><code class="language-block">A code block
+</code></pre>
+<hr />
+</li>
+<li>another list</li>
+</ul>
+</blockquote>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+
+
+@pytest.mark.gfm
+def test_extra_046dx():
+    """
+    TBD
+    bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_and_para_continue_with_thematics
+    """
+
+    # Arrange
+    source_markdown = """> + list 1
+>   + list 2
+>   list 3
+>   ------
+>
+>   ```block
+>   A code block
+>   ```
+>
+>   ------
+> + another list
+"""
+    expected_tokens = [
+        "[block-quote(1,1)::> \n> \n> \n> \n>\n> \n> \n> \n>\n> \n> ]",
+        "[ulist(1,3):+::4::\n  \n  \n  \n\n  \n]",
+        "[para(1,5):]",
+        "[text(1,5):list 1:]",
+        "[end-para:::True]",
+        "[ulist(2,5):+::6:  :  \n  ]",
+        "[para(2,7):\n]",
+        "[text(2,7):list 2\nlist 3::\n]",
+        "[end-para:::False]",
+        "[end-ulist:::True]",
+        "[tbreak(4,5):-::------]",
+        "[BLANK(5,2):]",
+        "[fcode-block(6,5):`:3:block:::::]",
+        "[text(7,3):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[BLANK(9,2):]",
+        "[tbreak(10,5):-::------]",
+        "[li(11,3):4::]",
+        "[para(11,5):]",
+        "[text(11,5):another list:]",
+        "[end-para:::True]",
+        "[BLANK(12,1):]",
+        "[end-ulist:::True]",
+        "[end-block-quote:::True]",
+    ]
+    expected_gfm = """<blockquote>
+<ul>
+<li>
+<p>list 1</p>
+<ul>
+<li>list 2
+list 3</li>
+</ul>
+<hr />
+<pre><code class="language-block">A code block
+</code></pre>
+<hr />
+</li>
+<li>
+<p>another list</p>
+</li>
+</ul>
+</blockquote>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+
+
+@pytest.mark.gfm
+def test_extra_046da():
+    """
+    TBD
+    bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_and_para_continue
+    """
+
+    # Arrange
+    source_markdown = """> + list 1
+>   + list 2
+>   list 3
+>   ```block
+>   A code block
+>   ```
+>   ------
+> + another list
+"""
+    expected_tokens = [
+        "[block-quote(1,1)::> \n> \n> \n> \n> \n> \n> \n> ]",
+        "[ulist(1,3):+::4::  \n  \n  \n]",
+        "[para(1,5):]",
+        "[text(1,5):list 1:]",
+        "[end-para:::True]",
+        "[ulist(2,5):+::6:  :  \n  ]",
+        "[para(2,7):\n]",
+        "[text(2,7):list 2\nlist 3::\n]",
+        "[end-para:::False]",
+        "[end-ulist:::True]",
+        "[fcode-block(4,5):`:3:block:::::]",
+        "[text(5,3):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[tbreak(7,5):-::------]",
+        "[li(8,3):4::]",
+        "[para(8,5):]",
+        "[text(8,5):another list:]",
+        "[end-para:::True]",
+        "[BLANK(9,1):]",
+        "[end-ulist:::True]",
+        "[end-block-quote:::True]",
+    ]
+    expected_gfm = """<blockquote>
+<ul>
+<li>list 1
+<ul>
+<li>list 2
+list 3</li>
+</ul>
+<pre><code class="language-block">A code block
+</code></pre>
+<hr />
+</li>
+<li>another list</li>
+</ul>
+</blockquote>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+
+
+@pytest.mark.gfm
+def test_extra_046db():
+    """
+    TBD
+    bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_and_para_continue
+    """
+
+    # Arrange
+    source_markdown = """> + list 1
+>   + list 2
+>   list 3
+>
+>   ```block
+>   A code block
+>   ```
+>
+>   ------
+> + another list
+"""
+    expected_tokens = [
+        "[block-quote(1,1)::> \n> \n> \n>\n> \n> \n> \n>\n> \n> ]",
+        "[ulist(1,3):+::4::  \n  \n\n  \n]",
+        "[para(1,5):]",
+        "[text(1,5):list 1:]",
+        "[end-para:::True]",
+        "[ulist(2,5):+::6:  :  \n\n  ]",
+        "[para(2,7):\n]",
+        "[text(2,7):list 2\nlist 3::\n]",
+        "[end-para:::True]",
+        "[BLANK(4,2):]",
+        "[end-ulist:::True]",
+        "[fcode-block(5,5):`:3:block:::::]",
+        "[text(6,3):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[BLANK(8,2):]",
+        "[tbreak(9,5):-::------]",
+        "[li(10,3):4::]",
+        "[para(10,5):]",
+        "[text(10,5):another list:]",
+        "[end-para:::True]",
+        "[BLANK(11,1):]",
+        "[end-ulist:::True]",
+        "[end-block-quote:::True]",
+    ]
+    expected_gfm = """<blockquote>
+<ul>
+<li>
+<p>list 1</p>
+<ul>
+<li>list 2
+list 3</li>
+</ul>
+<pre><code class="language-block">A code block
+</code></pre>
+<hr />
+</li>
+<li>
+<p>another list</p>
+</li>
+</ul>
+</blockquote>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+
+
+@pytest.mark.gfm
+def test_extra_046e():
+    """
+    TBD
+    bad_fenced_block_in_list_in_block_quote_with_previous_inner_list_with_thematics_sub3
+    """
+
+    # Arrange
+    source_markdown = """> + list 1
+>   + list 2
+>   + list 3
+>   _____
+>   ```block
+>   A code block
+>   ```
+>   _____
 > + another list
 """
     expected_tokens = [
@@ -13894,7 +14203,7 @@ def test_extra_046g2():
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
 
 
 @pytest.mark.gfm
@@ -14375,7 +14684,7 @@ def test_extra_046l1():
 </blockquote>"""
 
     # Act & Assert
-    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=True)
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
 @pytest.mark.gfm
@@ -15578,6 +15887,378 @@ A code block
     act_and_assert(source_markdown, expected_gfm, expected_tokens)
 
 
+@pytest.mark.gfm
+def test_extra_047a0():
+    """
+    TBD
+    bad_fenced_block_in_list_in_list_with_previous_inner_list
+    """
+
+    # Arrange
+    source_markdown = """+ + list 1
++ + + list 2.1
+      list 2.2
+    ```block
+    A code block
+    ```
+  + another list
+"""
+    expected_tokens = [
+        "[ulist(1,1):+::2:]",
+        "[ulist(1,3):+::4:  ]",
+        "[para(1,5):]",
+        "[text(1,5):list 1:]",
+        "[end-para:::True]",
+        "[end-ulist:::True]",
+        "[li(2,1):2::]",
+        "[ulist(2,3):+::4:  :    \n    \n    \n]",
+        "[ulist(2,5):+::6:    :      \n]",
+        "[para(2,7):\n]",
+        "[text(2,7):list 2.1\nlist 2.2::\n]",
+        "[end-para:::False]",
+        "[end-ulist:::True]",
+        "[fcode-block(4,5):`:3:block:::::]",
+        "[text(5,5):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[li(7,3):4:  :]",
+        "[para(7,5):]",
+        "[text(7,5):another list:]",
+        "[end-para:::True]",
+        "[BLANK(8,1):]",
+        "[end-ulist:::True]",
+        "[end-ulist:::True]",
+    ]
+    expected_gfm = """<ul>
+<li>
+<ul>
+<li>list 1</li>
+</ul>
+</li>
+<li>
+<ul>
+<li>
+<ul>
+<li>list 2.1
+list 2.2</li>
+</ul>
+<pre><code class="language-block">A code block
+</code></pre>
+</li>
+<li>another list</li>
+</ul>
+</li>
+</ul>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+
+
+@pytest.mark.gfm
+def test_extra_047a1():
+    """
+    TBD
+    bad_fenced_block_in_list_in_list_with_previous_inner_list
+    """
+
+    # Arrange
+    source_markdown = """+ + list 1
++ + + list 2.1
+      list 2.2
+
+    ```block
+    A code block
+    ```
+
+  + another list
+"""
+    expected_tokens = [
+        "[ulist(1,1):+::2:]",
+        "[ulist(1,3):+::4:  ]",
+        "[para(1,5):]",
+        "[text(1,5):list 1:]",
+        "[end-para:::True]",
+        "[end-ulist:::True]",
+        "[li(2,1):2::]",
+        "[ulist(2,3):+::4:  :    \n    \n    \n\n]",
+        "[ulist(2,5):+::6:    :      \n]",
+        "[para(2,7):\n]",
+        "[text(2,7):list 2.1\nlist 2.2::\n]",
+        "[end-para:::True]",
+        "[BLANK(4,1):]",
+        "[end-ulist:::True]",
+        "[fcode-block(5,5):`:3:block:::::]",
+        "[text(6,5):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[BLANK(8,1):]",
+        "[li(9,3):4:  :]",
+        "[para(9,5):]",
+        "[text(9,5):another list:]",
+        "[end-para:::True]",
+        "[BLANK(10,1):]",
+        "[end-ulist:::True]",
+        "[end-ulist:::True]",
+    ]
+    expected_gfm = """<ul>
+<li>
+<ul>
+<li>list 1</li>
+</ul>
+</li>
+<li>
+<ul>
+<li>
+<ul>
+<li>list 2.1
+list 2.2</li>
+</ul>
+<pre><code class="language-block">A code block
+</code></pre>
+</li>
+<li>
+<p>another list</p>
+</li>
+</ul>
+</li>
+</ul>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+
+
+@pytest.mark.gfm
+def test_extra_047b0():
+    """
+    TBD
+    bad_fenced_block_in_list_with_previous_inner_list
+    """
+
+    # Arrange
+    source_markdown = """+ list
+  + inner list
+    couple of lines
+  ```block
+  A code block
+  ```
++ another list
+"""
+    expected_tokens = [
+        "[ulist(1,1):+::2::  \n  \n  \n]",
+        "[para(1,3):]",
+        "[text(1,3):list:]",
+        "[end-para:::True]",
+        "[ulist(2,3):+::4:  :    ]",
+        "[para(2,5):\n]",
+        "[text(2,5):inner list\ncouple of lines::\n]",
+        "[end-para:::True]",
+        "[end-ulist:::True]",
+        "[fcode-block(4,3):`:3:block:::::]",
+        "[text(5,3):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[li(7,1):2::]",
+        "[para(7,3):]",
+        "[text(7,3):another list:]",
+        "[end-para:::True]",
+        "[BLANK(8,1):]",
+        "[end-ulist:::True]",
+    ]
+    expected_gfm = """<ul>
+<li>list
+<ul>
+<li>inner list
+couple of lines</li>
+</ul>
+<pre><code class="language-block">A code block
+</code></pre>
+</li>
+<li>another list</li>
+</ul>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+
+
+@pytest.mark.gfm
+def test_extra_047b1():
+    """
+    TBD
+    bad_fenced_block_in_list_with_previous_inner_list
+    """
+
+    # Arrange
+    source_markdown = """+ list
+  + inner list
+    couple of lines
+
+  ```block
+  A code block
+  ```
+
++ another list
+"""
+    expected_tokens = [
+        "[ulist(1,1):+::2::  \n  \n  \n\n]",
+        "[para(1,3):]",
+        "[text(1,3):list:]",
+        "[end-para:::True]",
+        "[ulist(2,3):+::4:  :    \n]",
+        "[para(2,5):\n]",
+        "[text(2,5):inner list\ncouple of lines::\n]",
+        "[end-para:::True]",
+        "[BLANK(4,1):]",
+        "[end-ulist:::True]",
+        "[fcode-block(5,3):`:3:block:::::]",
+        "[text(6,3):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[BLANK(8,1):]",
+        "[li(9,1):2::]",
+        "[para(9,3):]",
+        "[text(9,3):another list:]",
+        "[end-para:::True]",
+        "[BLANK(10,1):]",
+        "[end-ulist:::True]",
+    ]
+    expected_gfm = """<ul>
+<li>
+<p>list</p>
+<ul>
+<li>inner list
+couple of lines</li>
+</ul>
+<pre><code class="language-block">A code block
+</code></pre>
+</li>
+<li>
+<p>another list</p>
+</li>
+</ul>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+
+
+@pytest.mark.gfm
+def test_extra_047c0():
+    """
+    TBD
+    bad_fenced_block_in_list_with_previous_inner_list_with_thematics
+    """
+
+    # Arrange
+    source_markdown = """+ list
+  + inner list
+    couple of lines
+  -----
+  ```block
+  A code block
+  ```
+  -----
++ another list
+"""
+    expected_tokens = [
+        "[ulist(1,1):+::2::  \n  \n  \n  \n  \n]",
+        "[para(1,3):]",
+        "[text(1,3):list:]",
+        "[end-para:::True]",
+        "[ulist(2,3):+::4:  :    ]",
+        "[para(2,5):\n]",
+        "[text(2,5):inner list\ncouple of lines::\n]",
+        "[end-para:::True]",
+        "[end-ulist:::True]",
+        "[tbreak(4,3):-::-----]",
+        "[fcode-block(5,3):`:3:block:::::]",
+        "[text(6,3):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[tbreak(8,3):-::-----]",
+        "[li(9,1):2::]",
+        "[para(9,3):]",
+        "[text(9,3):another list:]",
+        "[end-para:::True]",
+        "[BLANK(10,1):]",
+        "[end-ulist:::True]",
+    ]
+    expected_gfm = """<ul>
+<li>list
+<ul>
+<li>inner list
+couple of lines</li>
+</ul>
+<hr />
+<pre><code class="language-block">A code block
+</code></pre>
+<hr />
+</li>
+<li>another list</li>
+</ul>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+
+
+@pytest.mark.gfm
+def test_extra_047c1():
+    """
+    TBD
+    bad_fenced_block_in_list_in_list
+    """
+
+    # Arrange
+    source_markdown = """+ list
+  + inner list
+    couple of lines
+  -----
+
+  ```block
+  A code block
+  ```
+
+  -----
++ another list
+"""
+    expected_tokens = [
+        "[ulist(1,1):+::2::  \n\n  \n  \n  \n\n  \n]",
+        "[para(1,3):]",
+        "[text(1,3):list:]",
+        "[end-para:::True]",
+        "[ulist(2,3):+::4:  :    ]",
+        "[para(2,5):\n]",
+        "[text(2,5):inner list\ncouple of lines::\n]",
+        "[end-para:::True]",
+        "[end-ulist:::True]",
+        "[tbreak(4,3):-::-----]",
+        "[BLANK(5,1):]",
+        "[fcode-block(6,3):`:3:block:::::]",
+        "[text(7,1):A code block:]",
+        "[end-fcode-block:::3:False]",
+        "[BLANK(9,1):]",
+        "[tbreak(10,3):-::-----]",
+        "[li(11,1):2::]",
+        "[para(11,3):]",
+        "[text(11,3):another list:]",
+        "[end-para:::True]",
+        "[BLANK(12,1):]",
+        "[end-ulist:::True]",
+    ]
+    expected_gfm = """<ul>
+<li>
+<p>list</p>
+<ul>
+<li>inner list
+couple of lines</li>
+</ul>
+<hr />
+<pre><code class="language-block">A code block
+</code></pre>
+<hr />
+</li>
+<li>
+<p>another list</p>
+</li>
+</ul>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens)
+
+
 @pytest.mark.gfm
 def test_extra_999():
     """