Repository: jackdewinter/pymarkdown

Issue:
Test test_extra_049l7 has incorrect column for fenced code block start.
## 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

### Bug Type

* [X] Parse issue

### Description

Test test_extra_049l7  incorrectly reports the fcb starting at column 3 instead of column 5.

### 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?

No

What is the command line you invoke to get this behavior?

test_extra_049l7 

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 1
>   >   list 2
>   > + list 3
>   ```block
>   A code block
>   ```
>   -----
> + another list
```

### Actual Behavior

The FCB on line 5 is reported as starting on column 3, not column 5.  The text token containing the code block text should also start on column 5, not column 3.

### Expected Behavior

Both tokens start on column 5.

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

🧙 Sourcery is reviewing your pull request!

---

<details>
<summary>Tips and commands</summary>

#### Interacting with Sourcery

- **Trigger a new review:** Comment `@sourcery-ai review` on the pull request.
- **Continue discussions:** Reply directly to Sourcery's review comments.
- **Generate a GitHub issue from a review comment:** Ask Sourcery to create an
  issue from a review comment by replying to it.
- **Generate a pull request title:** Write `@sourcery-ai` anywhere in the pull
  request title to generate a title at any time.
- **Generate a pull request summary:** Write `@sourcery-ai summary` anywhere in
  the pull request body to generate a PR summary at any time. You can also use
  this command to specify where the summary should be inserted.

#### Customizing Your Experience

Access your [dashboard](https://app.sourcery.ai) to:
- Enable or disable review features such as the Sourcery-generated pull request
  summary, the reviewer's guide, and others.
- Change the review language.
- Add, remove or edit custom review instructions.
- Adjust other review settings.

#### Getting Help

- [Contact our support team](mailto:support@sourcery.ai) for questions or feedback.
- Visit our [documentation](https://docs.sourcery.ai) for detailed guides and information.
- Keep in touch with the Sourcery team by following us on [X/Twitter](https://x.com/SourceryAI), [LinkedIn](https://www.linkedin.com/company/sourcery-ai/) or [GitHub](https://github.com/sourcery-ai).

</details>

<!-- Generated by sourcery-ai[bot]: end review_guide -->
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/jackdewinter/pymarkdown/pull/1273?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 100.00%. Comparing base [(`7111ba4`)](https://app.codecov.io/gh/jackdewinter/pymarkdown/commit/7111ba41d1bdb18dc0d304f4403434ff2fa60299?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) to head [(`c77425f`)](https://app.codecov.io/gh/jackdewinter/pymarkdown/commit/c77425f6d1e76573bc3564ccaf855fd0cd53bc1d?dropdown=coverage&el=desc&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     #1273   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          191       191           
  Lines        21308     21362   +54     
  Branches      2732      2744   +12     
=========================================
+ Hits         21308     21362   +54     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/jackdewinter/pymarkdown/pull/1273?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).

----
🚨 Try these New Features:

- [Flaky Tests Detection](https://docs.codecov.com/docs/test-result-ingestion-beta) - Detect and resolve failed and flaky tests

Patch:
diff --git a/newdocs/src/changelog.md b/newdocs/src/changelog.md
index b47754a0..460bbd0e 100644
--- a/newdocs/src/changelog.md
+++ b/newdocs/src/changelog.md
@@ -20,6 +20,10 @@
 - [Issue 1270](https://github.com/jackdewinter/pymarkdown/issues/1270)
     - Fixed issue with Md027 not reporting line numbers properly within
       anything except the first paragraph.
+- [Issue 1272](https://github.com/jackdewinter/pymarkdown/issues/1272)
+    - Parsing of the FCB in certain cases was off, as was the text token
+      containing the code block's text. Resulted in the columns being
+      reported being indented less than expected.
 
 <!--- pyml disable-next-line no-duplicate-heading-->
 ### Changed
diff --git a/publish/coverage.json b/publish/coverage.json
index ca7cd8fb..9ac32f40 100644
--- a/publish/coverage.json
+++ b/publish/coverage.json
@@ -2,12 +2,12 @@
     "projectName": "pymarkdown",
     "reportSource": "pytest",
     "branchLevel": {
-        "totalMeasured": 5465,
-        "totalCovered": 5465
+        "totalMeasured": 5489,
+        "totalCovered": 5489
     },
     "lineLevel": {
-        "totalMeasured": 21308,
-        "totalCovered": 21308
+        "totalMeasured": 21362,
+        "totalCovered": 21362
     }
 }
 
diff --git a/pymarkdown/inline/inline_processor.py b/pymarkdown/inline/inline_processor.py
index 666e487a..9451694a 100644
--- a/pymarkdown/inline/inline_processor.py
+++ b/pymarkdown/inline/inline_processor.py
@@ -14,6 +14,9 @@ from pymarkdown.general.parser_logger import ParserLogger
 from pymarkdown.inline.inline_handler_helper import InlineHandlerHelper
 from pymarkdown.inline.inline_helper import InlineHelper
 from pymarkdown.inline.inline_text_block_helper import InlineTextBlockHelper
+from pymarkdown.plugins.utils.leading_space_index_tracker import (
+    LeadingSpaceIndexTracker,
+)
 from pymarkdown.tokens.atx_heading_markdown_token import AtxHeadingMarkdownToken
 from pymarkdown.tokens.block_quote_markdown_token import BlockQuoteMarkdownToken
 from pymarkdown.tokens.list_start_markdown_token import ListStartMarkdownToken
@@ -69,13 +72,35 @@ class InlineProcessor:
             else:
                 POGGER.info("-->not bq-")
 
+        lsi_tracker = LeadingSpaceIndexTracker()
+        token = coalesced_results[0]
+        if token.is_block_quote_start or token.is_list_start:
+            lsi_tracker.open_container(token)
+        # if token.is_block_quote_end or token.is_list_end:
+        assert not (token.is_block_quote_end or token.is_list_end)
+        # lsi_tracker.register_container_end(token)
+        # elif
+        lsi_tracker.track_since_last_non_end_token(token)
         for coalesce_index in range(1, len(coalesced_results)):
+
+            token = coalesced_results[coalesce_index]
+
+            if not token.is_end_token or token.is_end_of_stream:
+                while lsi_tracker.have_any_registered_container_ends():
+                    lsi_tracker.process_container_end(token)
+            if token.is_block_quote_start or token.is_list_start:
+                lsi_tracker.open_container(token)
+            elif token.is_block_quote_end or token.is_list_end:
+                lsi_tracker.register_container_end(token)
+            lsi_tracker.track_since_last_non_end_token(token)
+
             InlineProcessor.__process_next_coalesce_item(
                 coalesced_results,
                 coalesce_index,
                 coalesced_list,
                 coalesced_stack,
                 parse_properties,
+                lsi_tracker,
             )
         return coalesced_list
 
@@ -131,6 +156,7 @@ class InlineProcessor:
         coalesced_list: List[MarkdownToken],
         coalesced_stack: List[MarkdownToken],
         parse_properties: ParseBlockPassProperties,
+        lsi_tracker: LeadingSpaceIndexTracker,
     ) -> None:
         POGGER.info("coalesced_results:$<", coalesced_list[-1])
         POGGER.info("coalesced_stack:$<", coalesced_stack)
@@ -140,6 +166,7 @@ class InlineProcessor:
                 POGGER.info(
                     "$-->last->block->$", i, block_quote_token.leading_text_index
                 )
+
         if coalesced_results[coalesce_index].is_text and (
             coalesced_list[-1].is_paragraph
             or coalesced_list[-1].is_setext_heading
@@ -148,7 +175,11 @@ class InlineProcessor:
         ):
             if coalesced_list[-1].is_code_block:
                 processed_tokens = InlineProcessor.__parse_code_block(
-                    coalesced_results, coalesce_index, coalesced_list, coalesced_stack
+                    coalesced_results,
+                    coalesce_index,
+                    coalesced_list,
+                    coalesced_stack,
+                    lsi_tracker,
                 )
             elif coalesced_list[-1].is_setext_heading:
                 processed_tokens = InlineProcessor.__parse_setext_heading(
@@ -290,12 +321,61 @@ class InlineProcessor:
         )
         return processed_tokens
 
+    @staticmethod
+    def __parse_code_block_coalesced(
+        coalesced_stack: List[MarkdownToken],
+        lsi_tracker: LeadingSpaceIndexTracker,
+        text_token: TextMarkdownToken,
+    ) -> int:
+        new_column_number = 1
+        if coalesced_stack[-1].is_block_quote_start:
+            block_quote_token = cast(BlockQuoteMarkdownToken, coalesced_stack[-1])
+            assert block_quote_token.bleading_spaces, "Bleading spaces must be defined."
+            split_leading_spaces = block_quote_token.bleading_spaces.split(
+                ParserHelper.newline_character
+            )
+            split_index = lsi_tracker.get_tokens_block_quote_bleading_space_index(
+                text_token
+            )
+        else:
+            list_token = cast(ListStartMarkdownToken, coalesced_stack[-1])
+            assert (
+                list_token.leading_spaces is not None
+            ), "Leading spaces must be defined."
+            split_leading_spaces = list_token.leading_spaces.split(
+                ParserHelper.newline_character
+            )
+            split_index = lsi_tracker.get_tokens_list_leading_space_index(text_token)
+        if split_index < len(split_leading_spaces):
+            new_column_number += len(split_leading_spaces[split_index])
+        if coalesced_stack[-1].is_list_start:
+            stack_index = len(coalesced_stack) - 2
+            while stack_index >= 0 and coalesced_stack[stack_index].is_list_start:
+                stack_index -= 1
+            if stack_index >= 0:
+                assert coalesced_stack[stack_index].is_block_quote_start
+                block_quote_token = cast(
+                    BlockQuoteMarkdownToken, coalesced_stack[stack_index]
+                )
+                assert (
+                    block_quote_token.bleading_spaces
+                ), "Bleading spaces must be defined."
+                split_leading_spaces = block_quote_token.bleading_spaces.split(
+                    ParserHelper.newline_character
+                )
+                split_index = lsi_tracker.get_tokens_list_leading_space_index(
+                    text_token
+                )
+                new_column_number += len(split_leading_spaces[split_index])
+        return new_column_number
+
     @staticmethod
     def __parse_code_block(
         coalesced_results: List[MarkdownToken],
         coalesce_index: int,
         coalesced_list: List[MarkdownToken],
         coalesced_stack: List[MarkdownToken],
+        lsi_tracker: LeadingSpaceIndexTracker,
     ) -> List[MarkdownToken]:
         assert coalesced_results[
             coalesce_index
@@ -303,34 +383,15 @@ class InlineProcessor:
         text_token = cast(TextMarkdownToken, coalesced_results[coalesce_index])
         encoded_text = InlineHelper.append_text("", text_token.token_text)
         if coalesced_list[-1].is_fenced_code_block:
-            line_number_delta, new_column_number = 1, 1
+            line_number_delta = 1
 
             # POGGER.info("coalesced_stack:$<", coalesced_stack)
             if coalesced_stack:
-                if coalesced_stack[-1].is_block_quote_start:
-                    block_quote_token = cast(
-                        BlockQuoteMarkdownToken, coalesced_stack[-1]
-                    )
-                    assert (
-                        block_quote_token.bleading_spaces
-                    ), "Bleading spaces must be defined."
-                    split_leading_spaces = block_quote_token.bleading_spaces.split(
-                        ParserHelper.newline_character
-                    )
-                else:
-                    list_token = cast(ListStartMarkdownToken, coalesced_stack[-1])
-                    assert (
-                        list_token.leading_spaces is not None
-                    ), "Leading spaces must be defined."
-                    split_leading_spaces = list_token.leading_spaces.split(
-                        ParserHelper.newline_character
-                    )
-                new_column_number += (
-                    (len(split_leading_spaces[1]))
-                    if len(split_leading_spaces) >= 2
-                    else (len(split_leading_spaces[0]))
+                new_column_number = InlineProcessor.__parse_code_block_coalesced(
+                    coalesced_stack, lsi_tracker, text_token
                 )
             else:
+                new_column_number = 1
                 leading_whitespace = text_token.extracted_whitespace
                 # POGGER.debug(">>$<<", text_token)
                 assert (
diff --git a/pymarkdown/leaf_blocks/fenced_leaf_block_processor.py b/pymarkdown/leaf_blocks/fenced_leaf_block_processor.py
index e6401d89..366b8554 100644
--- a/pymarkdown/leaf_blocks/fenced_leaf_block_processor.py
+++ b/pymarkdown/leaf_blocks/fenced_leaf_block_processor.py
@@ -381,6 +381,48 @@ class FencedLeafBlockProcessor:
         assert fence_string in original_line, "fence_string must be in original line"
         return after_fence_index, adj_end, fence_string
 
+    @staticmethod
+    def __process_fenced_start_adjust(
+        parser_state: ParserState,
+        position_marker: PositionMarker,
+        new_tokens: List[MarkdownToken],
+    ) -> None:
+        pre_fenced_block_index = len(parser_state.token_stack) - 2
+        if parser_state.token_stack[pre_fenced_block_index].is_list:
+            additional_column_delta = (
+                cast(
+                    ListStackToken, parser_state.token_stack[pre_fenced_block_index]
+                ).indent_level
+                - position_marker.index_indent
+            )
+        else:
+            additional_column_delta = 0
+        fenced_token = cast(FencedCodeBlockMarkdownToken, new_tokens[-1])
+        assert fenced_token.is_fenced_code_block
+        new_position_marker = PositionMarker(
+            line_number=fenced_token.line_number,
+            index_number=fenced_token.column_number - 1 + additional_column_delta,
+            text_to_parse="",
+            index_indent=0,
+        )
+        new_fenced_token = FencedCodeBlockMarkdownToken(
+            fence_character=fenced_token.fence_character,
+            fence_count=fenced_token.fence_count,
+            extracted_text=fenced_token.extracted_text,
+            pre_extracted_text=fenced_token.pre_extracted_text,
+            text_after_extracted_text=fenced_token.text_after_extracted_text,
+            pre_text_after_extracted_text=fenced_token.pre_text_after_extracted_text,
+            extracted_whitespace=fenced_token.extracted_whitespace,
+            extracted_whitespace_before_info_string=fenced_token.extracted_whitespace_before_info_string,
+            position_marker=new_position_marker,
+        )
+        fenced_stack_token = parser_state.token_stack[-1]
+        fenced_stack_token.reset_matching_markdown_token(new_fenced_token)
+        adjusted_token_list = new_tokens[:-1]
+        adjusted_token_list.append(new_fenced_token)
+        new_tokens.clear()
+        new_tokens.extend(adjusted_token_list)
+
     # pylint: disable=too-many-arguments
     @staticmethod
     def __process_fenced_start(
@@ -422,6 +464,7 @@ class FencedLeafBlockProcessor:
                 grab_bag,
             )
 
+            POGGER.debug("new_tokens-->$<<", new_tokens)
             POGGER.debug("StackToken-->$<<", parser_state.token_stack[-1])
             POGGER.debug(
                 "StackToken>start_markdown_token-->$<<",
@@ -433,6 +476,7 @@ class FencedLeafBlockProcessor:
                 if adjusted_corrected_prefix is not None
                 else None
             )
+            before_correct_length = len(new_tokens)
             LeafBlockHelper.correct_for_leaf_block_start_in_list(
                 parser_state,
                 position_marker.index_indent,
@@ -442,6 +486,15 @@ class FencedLeafBlockProcessor:
                 alt_removed_chars_at_start=removed_char_length,
                 original_line=original_line,
             )
+
+            # TODO restructure this so we do not have to do this kludge
+            # need to place the correct_for_leaf_block_start_in_list call before
+            # we create the fenced token
+            POGGER.debug("new_tokens-->$<<", new_tokens)
+            if before_correct_length != len(new_tokens):
+                FencedLeafBlockProcessor.__process_fenced_start_adjust(
+                    parser_state, position_marker, new_tokens
+                )
         return new_tokens
 
     # pylint: enable=too-many-arguments
diff --git a/pymarkdown/plugins/rule_md_012.py b/pymarkdown/plugins/rule_md_012.py
index f6c558b9..496d244d 100644
--- a/pymarkdown/plugins/rule_md_012.py
+++ b/pymarkdown/plugins/rule_md_012.py
@@ -263,6 +263,11 @@ class RuleMd012(RulePlugin):
         if token.is_block_quote_end or token.is_list_end:
             self.__process_pending_container_end_fixes(context, token)
 
+        if not token.is_end_token or token.is_end_of_stream:
+            while (
+                self.__leading_space_index_tracker.have_any_registered_container_ends()
+            ):
+                self.__leading_space_index_tracker.process_container_end(token)
         if token.is_block_quote_start or token.is_list_start:
             self.__leading_space_index_tracker.open_container(token)
         elif token.is_block_quote_end or token.is_list_end:
diff --git a/pymarkdown/plugins/rule_md_031.py b/pymarkdown/plugins/rule_md_031.py
index 6c3f1e72..16ee5c26 100644
--- a/pymarkdown/plugins/rule_md_031.py
+++ b/pymarkdown/plugins/rule_md_031.py
@@ -576,26 +576,28 @@ class RuleMd031(RulePlugin):
         self.register_replace_tokens_request(context, token, token, replacement_tokens)
 
     def __calc_kludge_one(self, at_least_one_container: bool) -> bool:
-        is_kludge_one = False
-        if at_least_one_container:
-            last_stack_token = (
-                self.__leading_space_index_tracker.get_container_stack_item(-1)
-            )
-            if last_stack_token.is_list_start and self.__x1[-1].is_block_quote_start:
-                is_kludge_one = not any(i.is_block_quote_start for i in self.__x1[:-1])
-        return is_kludge_one
+        if not at_least_one_container:
+            return False
+        last_stack_token = self.__leading_space_index_tracker.get_container_stack_item(
+            -1
+        )
+        return (
+            not any(i.is_block_quote_start for i in self.__x1[:-1])
+            if last_stack_token.is_list_start and self.__x1[-1].is_block_quote_start
+            else False
+        )
 
-    def __calc_2(self, context: PluginScanContext, did_process_removals: bool) -> bool:
+    # def __calc_2(self, context: PluginScanContext, did_process_removals: bool) -> bool:
 
-        # This will most likely need rewriting for deeper nestings.
-        if (
-            not did_process_removals
-            and len(self.__x1) == 2
-            and self.__x1[0].is_block_quote_start
-            and self.__x1[1].is_list_start
-        ):
-            did_process_removals = self.__apply_tailing_block_quote_fix(0, context)
-        return did_process_removals
+    # This will most likely need rewriting for deeper nestings.
+    # if (
+    #     not did_process_removals
+    #     and len(self.__x1) == 2
+    #     and self.__x1[0].is_block_quote_start
+    #     and self.__x1[1].is_list_start
+    # ):
+    #     did_process_removals = self.__apply_tailing_block_quote_fix(0, context)
+    # return did_process_removals
 
     def __calc_3(
         self,
@@ -683,7 +685,7 @@ class RuleMd031(RulePlugin):
                 or not at_least_one_container
             )
 
-            did_process_removals = self.__calc_2(context, did_process_removals)
+            # did_process_removals = self.__calc_2(context, did_process_removals)
             did_process_removals, upgrade_kludge = self.__calc_3(
                 context, did_process_removals, at_least_one_container, upgrade_kludge
             )
diff --git a/pymarkdown/plugins/utils/leading_space_index_tracker.py b/pymarkdown/plugins/utils/leading_space_index_tracker.py
index 012b0d77..fd197ac4 100644
--- a/pymarkdown/plugins/utils/leading_space_index_tracker.py
+++ b/pymarkdown/plugins/utils/leading_space_index_tracker.py
@@ -206,11 +206,11 @@ class LeadingSpaceIndexTracker:
         container_index = alternate_index
         last_closed_container_info = self.get_closed_container_info(-1)
 
-        assert not last_closed_container_info.adjustment
-        # if last_closed_container_info.adjustment:
-        #     adjust = 2 if container_index >= 0 else 1
-        # else:
-        adjust = self.__calculate_adjust(initial_index, container_index)
+        # assert not last_closed_container_info.adjustment
+        if last_closed_container_info.adjustment:
+            adjust = 2 if container_index >= 0 else 1
+        else:
+            adjust = self.__calculate_adjust(initial_index, container_index)
         # endif
 
         index = (


Test patch:
diff --git a/publish/test-results.json b/publish/test-results.json
index c86283ff..c3d8e613 100644
--- a/publish/test-results.json
+++ b/publish/test-results.json
@@ -1303,7 +1303,7 @@
             "totalTests": 128,
             "failedTests": 0,
             "errorTests": 0,
-            "skippedTests": 4,
+            "skippedTests": 0,
             "elapsedTimeInMilliseconds": 0
         },
         {
@@ -1620,10 +1620,10 @@
         },
         {
             "name": "test.test_markdown_extra",
-            "totalTests": 262,
+            "totalTests": 263,
             "failedTests": 0,
             "errorTests": 0,
-            "skippedTests": 5,
+            "skippedTests": 3,
             "elapsedTimeInMilliseconds": 0
         },
         {
diff --git a/test/gfm/test_markdown_whitespace_fenced.py b/test/gfm/test_markdown_whitespace_fenced.py
index 7720326a..6ec72cd9 100644
--- a/test/gfm/test_markdown_whitespace_fenced.py
+++ b/test/gfm/test_markdown_whitespace_fenced.py
@@ -1958,7 +1958,7 @@ def test_whitespaces_fenced_code_open_with_tabs_before_within_block_quotes_repea
         "[text(1,3):abc\ndef::\n]",
         "[end-para:::False]",
         "[fcode-block(3,5):`:3:python::::\t:]",
-        "[text(4,3):ghi:\a\t\a\x03\a]",
+        "[text(4,2):ghi:\a\t\a\x03\a]",
         "[end-fcode-block::::True]",
         "[end-block-quote:::True]",
     ]
@@ -1991,7 +1991,7 @@ def test_whitespaces_fenced_code_open_with_tabs_before_within_block_quotes_repea
         "[text(1,3):abc\ndef::\n]",
         "[end-para:::False]",
         "[fcode-block(3,5):`:3:python::::\t:]",
-        "[text(4,3):ghi:\a\t\a\x03\a]",
+        "[text(4,2):ghi:\a\t\a\x03\a]",
         "[end-fcode-block:\t::3:False]",
         "[end-block-quote:::True]",
     ]
diff --git a/test/nested_three/test_markdown_nested_three_block_block_unordered.py b/test/nested_three/test_markdown_nested_three_block_block_unordered.py
index 6470b288..bae4a67d 100644
--- a/test/nested_three/test_markdown_nested_three_block_block_unordered.py
+++ b/test/nested_three/test_markdown_nested_three_block_block_unordered.py
@@ -2590,7 +2590,7 @@ def test_nested_three_block_block_unordered_nl_extra_block_drop_block_with_thema
         "[end-block-quote::> > :True]",
         "[tbreak(4,7):-::--------]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,7):-::--------]",
         "[end-ulist:::True]",
@@ -2653,7 +2653,7 @@ def test_nested_three_block_block_unordered_nl_extra_block_drop_block_with_thema
         "[tbreak(4,7):-::--------]",
         "[BLANK(5,4):]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,1):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,4):]",
         "[tbreak(10,7):-::--------]",
@@ -2713,7 +2713,7 @@ def test_nested_three_block_block_unordered_nl_extra_block_drop_block_with_fence
         "[end-para:::False]",
         "[end-block-quote::> > :True]",
         "[fcode-block(4,7):`:3:block:::::]",
-        "[text(5,1):A code block:]",
+        "[text(5,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(7,7):-::--------]",
         "[end-ulist:::True]",
@@ -2775,7 +2775,7 @@ def test_nested_three_block_block_unordered_nl_extra_block_drop_block_with_blank
         "[BLANK(4,4):]",
         "[end-block-quote:::True]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(8,4):]",
         "[tbreak(9,7):-::--------]",
@@ -2840,7 +2840,7 @@ def test_nested_three_block_block_unordered_nl_extra_list_li_drop_list_with_fenc
         "[end-para:::False]",
         "[end-ulist:::True]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,7):_::______]",
         "[end-ulist:::True]",
@@ -2908,7 +2908,7 @@ def test_nested_three_block_block_unordered_nl_extra_list_li_drop_list_with_blan
         "[BLANK(5,4):]",
         "[end-ulist:::True]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,4):]",
         "[tbreak(10,7):_::______]",
@@ -3106,7 +3106,7 @@ def test_nested_three_block_block_unordered_extra_list_li_drop_list_thematics_ar
         "[end-ulist:::True]",
         "[tbreak(5,7):_::______]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(9,7):_::______]",
         "[end-ulist:::True]",
@@ -3177,7 +3177,7 @@ def test_nested_three_block_block_unordered_extra_list_li_drop_list_thematics_ar
         "[tbreak(5,7):_::______]",
         "[BLANK(6,4):]",
         "[fcode-block(7,7):`:3:block:::::]",
-        "[text(8,3):A code block:]",
+        "[text(8,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(10,4):]",
         "[tbreak(11,7):_::______]",
@@ -3524,7 +3524,7 @@ def test_nested_three_block_block_unordered_extra_list_li_thematics_first_with_s
         "[end-ulist:::True]",
         "[tbreak(5,8):_: :______]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(9,7):_::______]",
         "[end-ulist:::True]",
@@ -3591,7 +3591,7 @@ def test_nested_three_block_block_unordered_extra_list_li_thematics_first_with_d
         "[tbreak(5,9):_::______]",
         "[end-ulist:::True]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(9,7):_::______]",
         "[end-ulist:::True]",
@@ -3654,7 +3654,7 @@ def test_nested_three_block_block_unordered_extra_list_thematics_first_with_doub
         "[tbreak(4,9):_::______]",
         "[end-ulist:::True]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,7):_::______]",
         "[end-ulist:::True]",
@@ -3715,7 +3715,7 @@ def test_nested_three_block_block_unordered_extra_list_single_line_thematics_fir
         "[tbreak(3,9):_::______]",
         "[end-ulist:::True]",
         "[fcode-block(4,7):`:3:block:::::]",
-        "[text(5,3):A code block:]",
+        "[text(5,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(7,7):_::______]",
         "[end-ulist:::True]",
@@ -3769,7 +3769,7 @@ def test_nested_three_block_block_unordered_thematics_around_fenced():
         "[tbreak(1,7):_::______]",
         "[tbreak(2,9):_:  :______]",
         "[fcode-block(3,7):`:3:block:::::]",
-        "[text(4,3):A code block:]",
+        "[text(4,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(6,7):_::______]",
         "[end-ulist:::True]",
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 bf216bfb..fbe84753 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
@@ -2514,7 +2514,7 @@ def test_nested_three_block_unordered_block_fenced_with_blanks_with_thematics():
         "[tbreak(1,7):-::-----]",
         "[BLANK(2,6):]",
         "[fcode-block(3,7):`:3:block:::::]",
-        "[text(4,6):A code block:]",
+        "[text(4,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(6,6):]",
         "[tbreak(7,7):-::-----]",
@@ -2750,7 +2750,7 @@ def test_nested_three_block_unordered_block_fenced_with_blanks_with_text_after_w
         "[tbreak(1,7):-::-----]",
         "[BLANK(2,6):]",
         "[fcode-block(3,7):`:3:block:::::]",
-        "[text(4,6):abc:]",
+        "[text(4,7):abc:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(6,6):]",
         "[para(7,7):]",
@@ -3035,7 +3035,7 @@ def test_nested_three_block_unordered_nl_block_drop_block_thematics_around_fence
         "[end-block-quote::> :True]",
         "[tbreak(4,5):-::------]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,5):-::------]",
         "[li(9,3):4::]",
@@ -3102,7 +3102,7 @@ def test_nested_three_block_unordered_nl_block_drop_block_thematics_around_blank
         "[tbreak(4,5):-::------]",
         "[BLANK(5,2):]",
         "[fcode-block(6,5):`:3:block:::::]",
-        "[text(7,1):A code block:]",
+        "[text(7,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,2):]",
         "[tbreak(10,5):-::------]",
@@ -3644,7 +3644,7 @@ def test_nested_three_block_unordered_block_extra_block_with_extra_single_indent
         "[end-block-quote:::True]",
         "[end-ulist:::True]",
         "[fcode-block(4,6):`:3:block:::: :]",
-        "[text(5,3):A code block:\a \a\x03\a]",
+        "[text(5,5):A code block:\a \a\x03\a]",
         "[end-fcode-block: ::3:False]",
         "[tbreak(7,6):-: :-----]",
         "[li(8,3):4::]",
@@ -3707,7 +3707,7 @@ def test_nested_three_block_unordered_block_extra_block_with_extra_double_indent
         "[end-block-quote:::True]",
         "[end-ulist:::True]",
         "[fcode-block(4,5):`:3:block:::::]",
-        "[text(5,3):A code block:]",
+        "[text(5,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(7,5):-::-----]",
         "[li(8,3):4::]",
@@ -3997,7 +3997,7 @@ def test_nested_three_block_unordered_nl_block_drop_block_with_fenced():
         "[end-para:::False]",
         "[end-block-quote::> :True]",
         "[fcode-block(4,5):`:3:block:::::]",
-        "[text(5,1):A code block:]",
+        "[text(5,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[li(7,3):4::]",
         "[para(7,5):]",
@@ -4058,7 +4058,7 @@ def test_nested_three_block_unordered_nl_block_drop_block_with_blanks_around_fen
         "[BLANK(4,2):]",
         "[end-block-quote:::True]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(8,2):]",
         "[li(9,3):4::]",
@@ -4646,7 +4646,7 @@ def test_nested_three_block_unordered_nl_block_drop_block_headings_around_fenced
         "[text(4,7):xxx: ]",
         "[end-atx::]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[atx(8,5):1:0:]",
         "[text(8,7):xxx: ]",
@@ -4712,7 +4712,7 @@ def test_nested_three_block_unordered_nl_block_drop_block_blank_thematics_around
         "[end-block-quote:::True]",
         "[tbreak(5,7):-::-----]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,1):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(9,7):-::-----]",
         "[end-ulist:::True]",
diff --git a/test/nested_three/test_markdown_nested_three_block_unordered_unordered.py b/test/nested_three/test_markdown_nested_three_block_unordered_unordered.py
index bb4d25ce..60827a97 100644
--- a/test/nested_three/test_markdown_nested_three_block_unordered_unordered.py
+++ b/test/nested_three/test_markdown_nested_three_block_unordered_unordered.py
@@ -1636,7 +1636,7 @@ def test_nested_three_block_unordered_unordered_nl_extra_block_drop_block_themat
         "[end-block-quote::>   :True]",
         "[tbreak(4,7):-::-----]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,7):-::-----]",
         "[end-ulist:::True]",
@@ -1707,7 +1707,7 @@ def test_nested_three_block_unordered_unordered_nl_extra_block_drop_block__with_
         "[tbreak(4,7):-::-----]",
         "[BLANK(5,2):]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,1):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,2):]",
         "[tbreak(10,7):-::-----]",
@@ -1781,7 +1781,7 @@ def test_nested_three_block_unordered_unordered_nl_extra_list_li_drop_list_with_
         "[end-ulist:::True]",
         "[tbreak(5,7):-::-----]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,5):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(9,7):-::-----]",
         "[end-ulist:::True]",
@@ -1858,7 +1858,7 @@ def test_nested_three_block_unordered_unordered_nl_extra_list_li_drop_list_with_
         "[tbreak(5,7):-::-----]",
         "[BLANK(6,2):]",
         "[fcode-block(7,7):`:3:block:::::]",
-        "[text(8,5):A code block:]",
+        "[text(8,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(10,2):]",
         "[tbreak(11,7):-::-----]",
@@ -1926,7 +1926,7 @@ def test_nested_three_block_unordered_unordered_nl_extra_block_drop_block_with_t
         "[end-para:::False]",
         "[end-block-quote::>   :True]",
         "[fcode-block(4,7):`:3:block:::::]",
-        "[text(5,1):A code block:]",
+        "[text(5,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(7,7):-::-----]",
         "[end-ulist:::True]",
@@ -1994,7 +1994,7 @@ def test_nested_three_block_unordered_unordered_nl_extra_block_drop_block_with_t
         "[BLANK(4,2):]",
         "[end-block-quote:::True]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(8,2):]",
         "[tbreak(9,7):-::-----]",
@@ -2066,7 +2066,7 @@ def test_nested_three_block_unordered_nl_unordered_drop_list_with_text_and_thema
         "[tbreak(4,5):-::------]",
         "[BLANK(5,2):]",
         "[fcode-block(6,5):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[text(7,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,2):]",
         "[tbreak(10,5):-::------]",
@@ -2134,7 +2134,7 @@ def test_nested_three_block_unordered_nl_unordered_drop_list_with_text_and_thema
         "[end-ulist:::True]",
         "[tbreak(4,5):-::------]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,5):-::------]",
         "[li(9,3):4::]",
@@ -2202,7 +2202,7 @@ def test_nested_three_block_unordered_nl_unordered_li_drop_list_with_thematics_a
         "[end-ulist:::True]",
         "[tbreak(4,5):_::_____]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,5):_::_____]",
         "[li(9,3):4::]",
@@ -2273,7 +2273,7 @@ def test_nested_three_block_unordered_nl_unordered_li_drop_list_with_thematics_a
         "[tbreak(4,5):_::_____]",
         "[BLANK(5,2):]",
         "[fcode-block(6,5):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[text(7,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,2):]",
         "[tbreak(10,5):_::_____]",
@@ -2341,7 +2341,7 @@ def test_nested_three_block_unordered_nl_unordered_drop_list_with_thematics_arou
         "[end-ulist:::True]",
         "[tbreak(4,5):-::------]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,5):-::------]",
         "[li(9,3):4::]",
@@ -2408,7 +2408,7 @@ def test_nested_three_block_unordered_nl_unordered_drop_list_with_thematics_arou
         "[tbreak(4,5):-::------]",
         "[BLANK(5,2):]",
         "[fcode-block(6,5):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[text(7,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,2):]",
         "[tbreak(10,5):-::------]",
@@ -2533,7 +2533,7 @@ def test_nested_three_block_unordered_nl_unordered_drop_list_with_fenced():
         "[end-para:::False]",
         "[end-ulist:::True]",
         "[fcode-block(4,5):`:3:block:::::]",
-        "[text(5,3):A code block:]",
+        "[text(5,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[li(7,3):4::]",
         "[para(7,5):]",
@@ -2594,7 +2594,7 @@ def test_nested_three_block_unordered_nl_unordered_drop_list_with_blanks_around_
         "[BLANK(4,2):]",
         "[end-ulist:::True]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(8,2):]",
         "[li(9,3):4::]",
@@ -2657,7 +2657,7 @@ def test_nested_three_block_unordered_nl_unordered_para_cont_drop_list_with_fenc
         "[end-para:::False]",
         "[end-ulist:::True]",
         "[fcode-block(4,5):`:3:block:::::]",
-        "[text(5,3):A code block:]",
+        "[text(5,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(7,5):-::------]",
         "[li(8,3):4::]",
@@ -2721,7 +2721,7 @@ def test_nested_three_block_unordered_nl_unordered_para_cont_drop_list_with_blan
         "[BLANK(4,2):]",
         "[end-ulist:::True]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(8,2):]",
         "[tbreak(9,5):-::------]",
@@ -2790,7 +2790,7 @@ def test_nested_three_block_unordered_unordered_extra_list_li_drop_list_fenced()
         "[end-para:::False]",
         "[end-ulist:::True]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,5):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,7):-::-----]",
         "[end-ulist:::True]",
@@ -2865,7 +2865,7 @@ def test_nested_three_block_unordered_unordered_extra_list_li_drop_list_blanks_a
         "[BLANK(5,2):]",
         "[end-ulist:::True]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,5):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,2):]",
         "[tbreak(10,7):-::-----]",
@@ -2939,7 +2939,7 @@ def test_nested_three_block_unordered_nl_unordered_extra_list_li_drop_list_fence
         "[end-para:::False]",
         "[end-ulist:::True]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,5):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(9,7):-::-----]",
         "[end-ulist:::True]",
@@ -3015,7 +3015,7 @@ def test_nested_three_block_unordered_nl_unordered_extra_list_li_drop_list_blank
         "[BLANK(6,2):]",
         "[end-ulist:::True]",
         "[fcode-block(7,7):`:3:block:::::]",
-        "[text(8,5):A code block:]",
+        "[text(8,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(10,2):]",
         "[tbreak(11,7):-::-----]",
@@ -3084,7 +3084,7 @@ def test_nested_three_block_unordered_nl_thematics_unordered_extra_list_drop_lis
         "[end-para:::False]",
         "[end-ulist:::True]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,5):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,7):-::-----]",
         "[end-ulist:::True]",
@@ -3153,7 +3153,7 @@ def test_nested_three_block_unordered_nl_unordered_extra_list_drop_listx_fenced(
         "[end-para:::False]",
         "[end-ulist:::True]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,5):-::-----]",
         "[li(9,3):4::]",
@@ -3217,7 +3217,7 @@ def test_nested_three_block_unordered_unordered_extra_block_drop_block_headings_
         "[text(4,9):before: ]",
         "[end-atx::]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[atx(8,7):1:0:]",
         "[text(8,9):after: ]",
@@ -3289,7 +3289,7 @@ def test_nested_three_block_unordered_unordered_extra_block_drop_block_html_arou
         "[text(4,7):<!-- before -->:]",
         "[end-html-block:::False]",
         "[fcode-block(5,7):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[html-block(8,7)]",
         "[text(8,7):<!-- after -->:]",
@@ -3362,7 +3362,7 @@ def test_nested_three_block_unordered_unordered_extra_block_with_extra_space_ind
         "[text(4,6):<!-- before -->: ]",
         "[end-html-block:::False]",
         "[fcode-block(5,6):`:3:block:::: :]",
-        "[text(6,3):A code block:\a \a\x03\a]",
+        "[text(6,5):A code block:\a \a\x03\a]",
         "[end-fcode-block: ::3:False]",
         "[html-block(8,5)]",
         "[text(8,6):<!-- after -->: ]",
@@ -3434,7 +3434,7 @@ def test_nested_three_block_unordered_unordered_extra_block_drop_list_html_aroun
         "[text(4,5):<!-- before -->:]",
         "[end-html-block:::False]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[html-block(8,5)]",
         "[text(8,5):<!-- after -->:]",
@@ -3655,7 +3655,7 @@ def test_nested_three_block_unordered_unordered_extra_block_drop_block_drop_list
         "[end-ulist:::True]",
         "[tbreak(4,5):-::-----]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,5):-::-----]",
         "[li(9,3):4::]",
@@ -3726,7 +3726,7 @@ def test_nested_three_block_unordered_unordered_extra_list_li_drop_list_thematic
         "[end-ulist:::True]",
         "[tbreak(5,7):_::______]",
         "[fcode-block(6,7):`:3:block:::::]",
-        "[text(7,5):A code block:]",
+        "[text(7,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(9,7):_::______]",
         "[end-ulist:::True]",
@@ -3855,7 +3855,7 @@ def test_nested_three_block_unordered_unordered_extra_block_drop_double_list_fen
         "[end-ulist:::True]",
         "[end-ulist:::True]",
         "[fcode-block(4,2):`:3:block:::::]",
-        "[text(5,3):A code block:]",
+        "[text(5,2):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(7,2):-::-----]",
         "[ulist(8,3):+::4:]",
diff --git a/test/nested_three/test_markdown_nested_three_ordered_block_block.py b/test/nested_three/test_markdown_nested_three_ordered_block_block.py
index 8ba6f3fa..43a99bcb 100644
--- a/test/nested_three/test_markdown_nested_three_ordered_block_block.py
+++ b/test/nested_three/test_markdown_nested_three_ordered_block_block.py
@@ -2240,7 +2240,7 @@ def test_nested_three_ordered_block_block_with_thematics_around_blanks_around_fe
         "[tbreak(1,8):-::----]",
         "[BLANK(2,7):]",
         "[fcode-block(3,8):`:3:block:::::]",
-        "[text(4,7):A code block:]",
+        "[text(4,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(6,7):]",
         "[tbreak(7,8):-::----]",
@@ -2579,7 +2579,7 @@ def test_nested_three_ordered_block_block_nl_extra_block_drop_block_with_themati
         "[tbreak(4,8):-::----]",
         "[BLANK(5,7):]",
         "[fcode-block(6,8):`:3:block:::::]",
-        "[text(7,7):A code block:]",
+        "[text(7,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,7):]",
         "[tbreak(10,8):-::----]",
diff --git a/test/nested_three/test_markdown_nested_three_ordered_block_unordered.py b/test/nested_three/test_markdown_nested_three_ordered_block_unordered.py
index 680396e5..fa741d76 100644
--- a/test/nested_three/test_markdown_nested_three_ordered_block_unordered.py
+++ b/test/nested_three/test_markdown_nested_three_ordered_block_unordered.py
@@ -1306,7 +1306,7 @@ def test_nested_three_ordered_block_unordered_nl_extra_block_drop_block_fenced()
         "[end-para:::False]",
         "[end-block-quote::   > :True]",
         "[fcode-block(4,8):`:3:block:::::]",
-        "[text(5,1):A code block:]",
+        "[text(5,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(7,8):-::----]",
         "[end-ulist:::True]",
@@ -1367,7 +1367,7 @@ def test_nested_three_ordered_block_unordered_nl_extra_block_drop_block_blanks_a
         "[BLANK(4,5):]",
         "[end-block-quote:::True]",
         "[fcode-block(5,8):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(8,5):]",
         "[tbreak(9,8):-::----]",
@@ -1421,7 +1421,7 @@ def test_nested_three_ordered_block_unordered_thematics_around_fenced():
         "[ulist(1,6):+::7::  \n  \n  \n  ]",
         "[tbreak(1,8):-::----]",
         "[fcode-block(2,8):`:3:block:::::]",
-        "[text(3,3):A code block:]",
+        "[text(3,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(5,8):-::----]",
         "[end-ulist:::True]",
@@ -1481,7 +1481,7 @@ def test_nested_three_ordered_block_unordered_extra_block_drop_block_with_headin
         "[text(4,10):header 1: ]",
         "[end-atx::]",
         "[fcode-block(5,8):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[atx(8,8):1:0:]",
         "[text(8,10):header 2: ]",
@@ -1549,7 +1549,7 @@ def test_nested_three_ordered_block_unordered_extra_list_li_drop_list_with_fence
         "[end-para:::False]",
         "[end-ulist:::True]",
         "[fcode-block(5,8):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,8):-::----]",
         "[end-ulist:::True]",
@@ -1618,7 +1618,7 @@ def test_nested_three_ordered_block_unordered_extra_list_li_drop_list_with_blank
         "[BLANK(5,5):]",
         "[end-ulist:::True]",
         "[fcode-block(6,8):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[text(7,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,5):]",
         "[tbreak(10,8):-::----]",
@@ -1687,7 +1687,7 @@ def test_nested_three_ordered_block_unordered_extra_list_li_drop_list_with_thema
         "[end-ulist:::True]",
         "[tbreak(5,8):-::----]",
         "[fcode-block(6,8):`:3:block:::::]",
-        "[text(7,3):A code block:]",
+        "[text(7,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(9,8):-::----]",
         "[end-ulist:::True]",
@@ -1759,7 +1759,7 @@ def test_nested_three_ordered_block_unordered_extra_list_li_drop_list_with_thema
         "[tbreak(5,8):-::----]",
         "[BLANK(6,5):]",
         "[fcode-block(7,8):`:3:block:::::]",
-        "[text(8,3):A code block:]",
+        "[text(8,8):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(10,5):]",
         "[tbreak(11,8):-::----]",
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 27d8f832..66b7409a 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
@@ -2551,7 +2551,7 @@ def test_nested_three_unordered_block_ordered_with_blank_fenced_e1():
         "[BLANK(4,4):]",
         "[end-block-quote:::True]",
         "[fcode-block(5,3):`:3:text:::::]",
-        "[text(6,1):text:]",
+        "[text(6,3):text:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(8,1):]",
         "[end-ulist:::True]",
@@ -2597,7 +2597,7 @@ def test_nested_three_unordered_block_ordered_with_blank_fenced_e2():
         "[end-para:::True]",
         "[end-block-quote:::True]",
         "[fcode-block(4,3):`:3:text:::::]",
-        "[text(5,1):text:]",
+        "[text(5,3):text:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(7,1):]",
         "[end-ulist:::True]",
diff --git a/test/nested_three/test_markdown_nested_three_unordered_unordered_block.py b/test/nested_three/test_markdown_nested_three_unordered_unordered_block.py
index 10bcb182..ed713b78 100644
--- a/test/nested_three/test_markdown_nested_three_unordered_unordered_block.py
+++ b/test/nested_three/test_markdown_nested_three_unordered_unordered_block.py
@@ -1255,7 +1255,7 @@ def test_nested_three_unordered_unordered_nl_block_drop_block_fenced():
         "[end-para:::True]",
         "[end-block-quote:::True]",
         "[fcode-block(4,5):`:3:block:::::]",
-        "[text(5,1):A code block:]",
+        "[text(5,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[li(7,3):4:  :]",
         "[para(7,5):]",
@@ -1316,7 +1316,7 @@ def test_nested_three_unordered_unordered_nl_block_drop_block_with_blanks_around
         "[end-block-quote:::True]",
         "[BLANK(4,1):]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,1):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(8,1):]",
         "[li(9,3):4:  :]",
diff --git a/test/nested_three/test_markdown_nested_three_unordered_unordered_unordered.py b/test/nested_three/test_markdown_nested_three_unordered_unordered_unordered.py
index 8be96b5d..eafc045c 100644
--- a/test/nested_three/test_markdown_nested_three_unordered_unordered_unordered.py
+++ b/test/nested_three/test_markdown_nested_three_unordered_unordered_unordered.py
@@ -1068,7 +1068,7 @@ def test_nested_three_unordered_unordered_unordered_nl_list_with_li_drop_list_wi
         "[tbreak(5,7):-::-----]",
         "[BLANK(6,1):]",
         "[fcode-block(7,7):`:3:block:::::]",
-        "[text(8,1):A code block:]",
+        "[text(8,7):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(10,1):]",
         "[tbreak(11,7):-::-----]",
@@ -1363,7 +1363,7 @@ def test_nested_three_unordered_unordered_nl_li_liunordered_drop_list_with_thema
         "[tbreak(4,5):-::----]",
         "[BLANK(5,1):]",
         "[fcode-block(6,5):`:3:block:::::]",
-        "[text(7,1):A code block:]",
+        "[text(7,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,1):]",
         "[li(10,3):4:  :]",
@@ -1502,7 +1502,7 @@ def test_nested_three_unordered_unordered_nl_unordered_drop_list_with_thematics_
         "[tbreak(4,5):-::----]",
         "[BLANK(5,1):]",
         "[fcode-block(6,5):`:3:block:::::]",
-        "[text(7,1):A code block:]",
+        "[text(7,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,1):]",
         "[li(10,3):4:  :]",
diff --git a/test/paragraph_series/test_markdown_paragraph_series_n.py b/test/paragraph_series/test_markdown_paragraph_series_n.py
index 68d6dddd..a05c0f4d 100644
--- a/test/paragraph_series/test_markdown_paragraph_series_n.py
+++ b/test/paragraph_series/test_markdown_paragraph_series_n.py
@@ -619,7 +619,7 @@ def test_paragraph_series_n_bq_t_nl_bq_fb_nl_with_bq():
         "[text(1,3):uvw:]",
         "[end-para:::False]",
         "[fcode-block(2,3):`:3::::::]",
-        "[text(3,3):\ndef\n:]",
+        "[text(3,2):\ndef\n:]",
         "[end-fcode-block:::3:False]",
         "[end-block-quote:::True]",
     ]
diff --git a/test/rules/test_md010.py b/test/rules/test_md010.py
index 9d1cff8f..7a065ed4 100644
--- a/test/rules/test_md010.py
+++ b/test/rules/test_md010.py
@@ -235,8 +235,8 @@ code	block
         disable_rules=__plugin_disable_md031_md040,
         source_file_contents="""+ this is text
 
-  ```text	def
-+ this contains	a tab
+  ```text\tdef
++ this contains\ta tab
   ```
 """,
         scan_expected_return_code=1,
diff --git a/test/rules/test_md031.py b/test/rules/test_md031.py
index 8f1030ee..b7bef26b 100644
--- a/test/rules/test_md031.py
+++ b/test/rules/test_md031.py
@@ -1068,7 +1068,7 @@ This is a blank line and some text.
 > ___
 >This is a blank line and some text.
 """,
-        disable_rules="md022,md026,md027",
+        disable_rules="md022,md026",
         scan_expected_return_code=1,
         scan_expected_output="""{temp_source_path}:6:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:8:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
@@ -2626,7 +2626,7 @@ A code block
         scan_expected_output="""{temp_source_path}:4:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> > >
 > > > > fourth block 1
 > > > > fourth block 2
@@ -2652,7 +2652,7 @@ A code block
         scan_expected_output="""{temp_source_path}:4:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_bad_markdown,
         fix_expected_file_contents="""> > >
 > > > > fourth block 1
@@ -2679,7 +2679,7 @@ A code block
         scan_expected_output="""{temp_source_path}:4:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_asserts,
         use_debug=True,
         fix_expected_file_contents="""> > >
@@ -2707,7 +2707,7 @@ A code block
         scan_expected_output="""{temp_source_path}:4:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> > >
 > > > > fourth block 1
 > > > > fourth block 2
@@ -2734,7 +2734,7 @@ A code block
         scan_expected_output="""{temp_source_path}:5:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> > >
 > > > > fourth block 1
 > > > > fourth block 2
@@ -2762,7 +2762,7 @@ A code block
         scan_expected_output="""{temp_source_path}:5:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> > >
 > > > > fourth block 1
 > > > > fourth block 2
@@ -2790,7 +2790,7 @@ A code block
         scan_expected_output="""{temp_source_path}:5:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_asserts,
         use_debug=True,
         fix_expected_file_contents="""> > >
@@ -2820,7 +2820,7 @@ A code block
         scan_expected_output="""{temp_source_path}:5:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> > >
 > > > > fourth block 1
 > > > > fourth block 2
@@ -2851,7 +2851,7 @@ A code block
         scan_expected_output="""{temp_source_path}:7:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:9:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027,md022,md024",
+        disable_rules="md032,md022,md024",
         fix_expected_file_contents="""> > >
 > > > > fourth block 1
 > > > > fourth block 2
@@ -4452,7 +4452,7 @@ A code block
         scan_expected_output="""{temp_source_path}:4:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         use_debug=True,
         fix_expected_file_contents="""1. > + ----
    >   > block 1
@@ -4479,7 +4479,8 @@ A code block
         scan_expected_output="""{temp_source_path}:4:6: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:6: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
+        mark_fix_as_skipped=True,
         fix_expected_file_contents="""1. > + ----
    >   > block 1
    >   > block 2
@@ -4505,7 +4506,7 @@ A code block
         scan_expected_output="""{temp_source_path}:4:4: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:4: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         use_debug=True,
         mark_fix_as_skipped=skip_fix_asserts,
         fix_expected_file_contents="""1. > + ----
@@ -4533,7 +4534,7 @@ A code block
         scan_expected_output="""{temp_source_path}:4:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         use_debug=True,
         mark_fix_as_skipped=skip_fix_asserts,
         fix_expected_file_contents="""1. > + ----
@@ -4562,7 +4563,7 @@ A code block
         scan_expected_output="""{temp_source_path}:5:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""1. > + ----
    >   > block 1
    >   > block 2
@@ -4590,7 +4591,7 @@ A code block
         scan_expected_output="""{temp_source_path}:5:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""1. > + ----
    >   > block 1
    >   > block 2
@@ -4618,7 +4619,7 @@ A code block
         scan_expected_output="""{temp_source_path}:5:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:8: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027,md022,md025",
+        disable_rules="md032,md022,md025",
         fix_expected_file_contents="""1. > + ----
    >   > block 1
    >   > block 2
@@ -5315,7 +5316,7 @@ A code block
         scan_expected_output="""{temp_source_path}:6:6: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:8:6: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_bad_markdown,
         fix_expected_file_contents="""1. > > ----
    > > + list 1
@@ -5531,7 +5532,7 @@ A code block
         scan_expected_output="""{temp_source_path}:5:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + list 1
 >   > block 2
 >   > block 3
@@ -5561,7 +5562,7 @@ A code block
         scan_expected_output="""{temp_source_path}:5:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + list 1
 >   > block 2
 >   > block 3
@@ -5591,7 +5592,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + list 1
 >   > block 2
 >   > block 3
@@ -5619,7 +5620,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + list 1
 >   > block 2
 >   > block 3
@@ -5645,7 +5646,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_bad_markdown,
         fix_expected_file_contents="""> + list 1
 >   > block 2
@@ -5672,7 +5673,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + list 1
 >   > block 2
 >   > block 3
@@ -5701,7 +5702,7 @@ another list
         scan_expected_output="""{temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:8:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + list 1
 >   > block 2
 >   > block 3
@@ -5733,7 +5734,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:8:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + list 1
 >   > block 2
 >   > block 3
@@ -5763,7 +5764,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + list 1
 >   > block 2
 >   ------
@@ -5793,7 +5794,7 @@ another list
         scan_expected_output="""{temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:8:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + list 1
 >   > block 1
 >   ------
@@ -6251,7 +6252,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=True,
         fix_expected_file_contents="""> + > -----
 >   > > block 1
@@ -6280,7 +6281,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         use_debug=True,
         mark_fix_as_skipped=skip_fix_asserts,
         fix_expected_file_contents="""> + > -----
@@ -6310,7 +6311,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027,md007,md023",
+        disable_rules="md032,md007,md023",
         use_debug=True,
         mark_fix_as_skipped=skip_fix_bad_markdown,
         fix_expected_file_contents="""> + > -----
@@ -6340,7 +6341,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + > -----
 >   > > block 1
 >   > > block 2
@@ -6404,7 +6405,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + > -----
 >   > > block 1
 >   > > block 2
@@ -6434,7 +6435,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_asserts,
         use_debug=True,
         fix_expected_file_contents="""> + > -----
@@ -6466,7 +6467,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_asserts,
         use_debug=True,
         fix_expected_file_contents="""> + > -----
@@ -6498,7 +6499,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + > -----
 >   > > block 1
 >   > > block 2
@@ -6527,7 +6528,7 @@ another list
 > + another list
 """,
         scan_expected_output="",
-        disable_rules="md032,md027",
+        disable_rules="md032",
     ),
     pluginRuleTest(
         "bad_fenced_block_in_block_quote_in_list_in_block_quote_with_previous_block_with_setext",
@@ -6548,7 +6549,7 @@ another list
         scan_expected_output="""{temp_source_path}:7:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:9:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027,md022",
+        disable_rules="md032,md022",
         fix_expected_file_contents="""> + > -----
 >   > > block 1
 >   > > block 2
@@ -6612,7 +6613,8 @@ another list
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
         disable_rules="md032",
-        mark_scan_as_skipped=True,
+        use_debug=True,
+        mark_fix_as_skipped=True,
         fix_expected_file_contents="""> + > -----
 >   > + list 1
 >   >   list 2
@@ -6918,7 +6920,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + + -----
 >     > block 1
 >     > block 2
@@ -6946,7 +6948,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_bad_markdown,
         fix_expected_file_contents="""> + + -----
 >     > block 1
@@ -6975,7 +6977,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_bad_markdown,
         fix_expected_file_contents="""> + + -----
 >     > block 1
@@ -7004,7 +7006,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + + -----
 >     > block 1
 >     > block 2
@@ -7033,7 +7035,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + + -----
 >     > block 1
 >     > block 2
@@ -7063,7 +7065,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_bad_markdown,
         fix_expected_file_contents="""> + + -----
 >     > block 1
@@ -7094,7 +7096,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:3: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         mark_fix_as_skipped=skip_fix_bad_markdown,
         fix_expected_file_contents="""> + + -----
 >     > block 1
@@ -7125,7 +7127,7 @@ another list
         scan_expected_output="""{temp_source_path}:5:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:7:1: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         fix_expected_file_contents="""> + + -----
 >     > block 1
 >     > block 2
@@ -7158,7 +7160,7 @@ another list
         scan_expected_output="""{temp_source_path}:7:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:9:7: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027,md022,md024",
+        disable_rules="md032,md022,md024",
         fix_expected_file_contents="""> + + -----
 >     > block 1
 >     > block 2
@@ -8731,7 +8733,7 @@ another list
         scan_expected_output="""{temp_source_path}:4:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 {temp_source_path}:6:5: MD031: Fenced code blocks should be surrounded by blank lines (blanks-around-fences)
 """,
-        disable_rules="md032,md027",
+        disable_rules="md032",
         use_debug=True,
         mark_scan_as_skipped=True,
         fix_expected_file_contents="""+ + + -----
diff --git a/test/test_markdown_extra.py b/test/test_markdown_extra.py
index a134a16d..0c8aa245 100644
--- a/test/test_markdown_extra.py
+++ b/test/test_markdown_extra.py
@@ -1523,7 +1523,7 @@ def test_extra_018x():
         "[text(1,6):list\nthis::\n]",
         "[end-para:::False]",
         "[fcode-block(3,6):`:3:html:::::]",
-        "[text(4,4):\a<\a&lt;\ahtml\a>\a&gt;\a:]",
+        "[text(4,6):\a<\a&lt;\ahtml\a>\a&gt;\a:]",
         "[end-fcode-block:::3:False]",
         "[li(6,3):5::1]",
         "[para(6,6):]",
@@ -1569,7 +1569,7 @@ def test_extra_018a():
         "[text(1,6):list\nthis::\n]",
         "[end-para:::False]",
         "[fcode-block(3,7):`:3:html:::: :]",
-        "[text(4,4):\a<\a&lt;\ahtml\a>\a&gt;\a:]",
+        "[text(4,6):\a<\a&lt;\ahtml\a>\a&gt;\a:]",
         "[end-fcode-block:::3:False]",
         "[li(6,3):5::1]",
         "[para(6,6):]",
@@ -1615,7 +1615,7 @@ def test_extra_018b():
         "[text(1,6):list\nthis::\n]",
         "[end-para:::False]",
         "[fcode-block(3,6):`:3:html:::::]",
-        "[text(4,4):\a<\a&lt;\ahtml\a>\a&gt;\a: ]",
+        "[text(4,6):\a<\a&lt;\ahtml\a>\a&gt;\a: ]",
         "[end-fcode-block:::3:False]",
         "[li(6,3):5::1]",
         "[para(6,6):]",
@@ -1661,7 +1661,7 @@ def test_extra_018c():
         "[text(1,6):list\nthis::\n]",
         "[end-para:::False]",
         "[fcode-block(3,6):`:3:html:::::]",
-        "[text(4,4):\a<\a&lt;\ahtml\a>\a&gt;\a:]",
+        "[text(4,6):\a<\a&lt;\ahtml\a>\a&gt;\a:]",
         "[end-fcode-block: ::3:False]",
         "[li(6,3):5::1]",
         "[para(6,6):]",
@@ -3447,6 +3447,9 @@ def test_extra_026a():
 def test_extra_026b():
     """
     TBD
+    note: this may look weird.  the ordered list has an indent of 3, with a single
+          space before fenced code block.  therefore, the text within the fcb starts
+          at column 4, with its first character being "special" space.
     """
 
     # Arrange
@@ -6538,7 +6541,7 @@ def test_extra_046a():
         "[text(1,5):list 1\nlist 2::\n]",
         "[end-setext::]",
         "[fcode-block(4,5):`:3:block:::::]",
-        "[text(5,3):A code block:]",
+        "[text(5,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(7,5):-::------]",
         "[li(8,3):4::]",
@@ -6647,7 +6650,7 @@ def test_extra_046l0():
         "[text(1,5):list:]",
         "[end-para:::False]",
         "[fcode-block(2,5):`:3:block:::::]",
-        "[text(3,3):A code block:]",
+        "[text(3,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[li(5,3):4::]",
         "[para(5,5):]",
@@ -6695,7 +6698,7 @@ def test_extra_046l1():
         "[end-para:::True]",
         "[BLANK(2,2):]",
         "[fcode-block(3,5):`:3:block:::::]",
-        "[text(4,3):A code block:]",
+        "[text(4,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(6,2):]",
         "[li(7,3):4::]",
@@ -7105,7 +7108,7 @@ def test_extra_047c1():
         "[tbreak(4,3):-::-----]",
         "[BLANK(5,1):]",
         "[fcode-block(6,3):`:3:block:::::]",
-        "[text(7,1):A code block:]",
+        "[text(7,3):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(9,1):]",
         "[tbreak(10,3):-::-----]",
@@ -8749,8 +8752,8 @@ def test_extra_049l7():
         "[end-para:::False]",
         "[end-ulist:::True]",
         "[end-block-quote:::True]",
-        "[fcode-block(5,3):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[fcode-block(5,5):`:3:block:::::]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(8,5):-::-----]",
         "[li(9,3):4::]",
@@ -8781,7 +8784,7 @@ 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=False)
 
 
 @pytest.mark.gfm
@@ -9545,7 +9548,7 @@ def test_extra_050d0():
         "[end-block-quote:::True]",
         "[end-ulist:::True]",
         "[fcode-block(4,5):`:3:block:::::]",
-        "[text(5,3):A code block:]",
+        "[text(5,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[tbreak(7,5):-::-----]",
         "[li(8,3):4::]",
@@ -9612,7 +9615,7 @@ def test_extra_050d1():
         "[end-block-quote:::True]",
         "[end-ulist:::True]",
         "[fcode-block(5,5):`:3:block:::::]",
-        "[text(6,3):A code block:]",
+        "[text(6,5):A code block:]",
         "[end-fcode-block:::3:False]",
         "[BLANK(8,2):]",
         "[tbreak(9,5):-::-----]",
@@ -12191,6 +12194,52 @@ def test_extra_051d():
     act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
 
 
+@pytest.mark.gfm
+def test_extra_051e():
+    """
+    TBD
+    bad_unordered_list_fall_off_after_fenced_open
+    """
+
+    # Arrange
+    source_markdown = """+ this is text
+
+  ```text\tdef
++ this contains\ta tab
+  ```
+"""
+    expected_tokens = [
+        "[ulist(1,1):+::2::\n  \n  \n]",
+        "[para(1,3):]",
+        "[text(1,3):this is text:]",
+        "[end-para:::True]",
+        "[BLANK(2,1):]",
+        "[fcode-block(3,3):`:3:text::\tdef:::]",
+        "[end-fcode-block::::True]",
+        "[li(4,1):2::]",
+        "[para(4,3):]",
+        "[text(4,3):this contains\ta tab:]",
+        "[end-para:::False]",
+        "[fcode-block(5,3):`:3::::::]",
+        "[text(6,1)::]",
+        "[end-fcode-block::::True]",
+        "[end-ulist:::True]",
+    ]
+    expected_gfm = """<ul>
+<li>
+<p>this is text</p>
+<pre><code class="language-text"></code></pre>
+</li>
+<li>
+<p>this contains\ta tab</p>
+<pre><code></code></pre>
+</li>
+</ul>"""
+
+    # Act & Assert
+    act_and_assert(source_markdown, expected_gfm, expected_tokens, show_debug=False)
+
+
 @pytest.mark.gfm
 def test_extra_999():
     """