# block

URL: /patitas/api/lexer/scanners/block/
Section: scanners
Description: Block mode scanner mixin.

---

> For a complete page index, fetch /patitas/llms.txt.

Open LLM text
(/patitas/api/lexer/scanners/block/index.txt)

Share with AI

Ask Claude
(https://claude.ai/new?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fpatitas%2Fapi%2Flexer%2Fscanners%2Fblock%2Findex.txt)

Ask ChatGPT
(https://chatgpt.com/?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fpatitas%2Fapi%2Flexer%2Fscanners%2Fblock%2Findex.txt)

Ask Gemini
(https://gemini.google.com/app?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fpatitas%2Fapi%2Flexer%2Fscanners%2Fblock%2Findex.txt)

Ask Copilot
(https://copilot.microsoft.com/?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fpatitas%2Fapi%2Flexer%2Fscanners%2Fblock%2Findex.txt)

Module

#
`lexer.scanners.block`

Block mode scanner mixin.

1Class

## Classes

`BlockScannerMixin`

11

▼

Mixin providing block mode scanning logic.

Scans for block-level elements using window approach:
1…

Mixin providing block mode scanning logic.

Scans for block-level elements using window approach:

- Find end of current line (window)

- Classify the line content (pure logic)

- Emit token and commit position (always advances)

#### Attributes

Name
Type
Description

`_source`

`str`

—

`_pos`

`int`

—

`_consumed_newline`

`bool`

—

`_text_transformer`

`Callable[[str], str] | None`

—

#### Methods

Internal Methods
7

▼

`_save_location`

0

▼

Save current location for O(1) token location creation.

`def _save_location(self) -> None`

`_find_line_end`

0

`int`

▼

Find end of current line.

`def _find_line_end(self) -> int`

##### Returns

`int`

`_calc_indent`

1

`tuple[int, int]`

▼

Calculate indent level and content start position.

`def _calc_indent(self, line: str) -> tuple[int, int]`

##### Parameters

Name
Type
Description

`line`
`—`

##### Returns

`tuple[int, int]`

`_chars_for_indent`

2

`int`

▼

Calculate how many characters to skip to consume target_indent spaces.

`def _chars_for_indent(self, line: str, target_indent: int) -> int`

##### Parameters

Name
Type
Description

`line`
`—`

`target_indent`
`—`

##### Returns

`int`

`_commit_to`

1

▼

Commit position to line_end.

`def _commit_to(self, line_end: int) -> None`

##### Parameters

Name
Type
Description

`line_end`
`—`

`_make_token`

6

`Token (/patitas/api/tokens/#Token)`

▼

Create token with raw coordinates. Implemented by Lexer.

`def _make_token(self, token_type: TokenType, value: str, start_pos: int, *, start_col: int | None = None, end_pos: int | None = None, line_indent: int = -1) -> Token`

##### Parameters

Name
Type
Description

`token_type`
`—`

`value`
`—`

`start_pos`
`—`

`start_col`
`—`

Default:`None`

`end_pos`
`—`

Default:`None`

`line_indent`
`—`

Default:`-1`

##### Returns

`Token (/patitas/api/tokens/#Token)`

`_scan_block`

0

`Iterator[Token (/patitas/api/tokens/#Token)]`

▼

Scan for block-level elements using window approach.

`def _scan_block(self) -> Iterator[Token]`

##### Returns

`Iterator[Token (/patitas/api/tokens/#Token)]`
