# fence

URL: /patitas/api/lexer/scanners/fence/
Section: scanners
Description: Fenced code mode scanner mixin.

---

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

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

Share with AI

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

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

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

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

Module

#
`lexer.scanners.fence`

Fenced code mode scanner mixin.

1Class

## Classes

`FenceScannerMixin`

15

▼

Mixin providing fenced code mode scanning logic.

Scans content inside fenced code blocks, detectin…

Mixin providing fenced code mode scanning logic.

Scans content inside fenced code blocks, detecting the closing fence.

#### Attributes

Name
Type
Description

`_source`

`str`

—

`_pos`

`int`

—

`_mode`

`LexerMode (/patitas/api/lexer/modes/#LexerMode)`

—

`_fence_char`

`str`

—

`_fence_count`

`int`

—

`_fence_info`

`str`

—

`_fence_indent`

`int`

—

`_consumed_newline`

`bool`

—

`_directive_stack`

`list[tuple[int, str]]`

—

#### Methods

Internal Methods
6

▼

`_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`

`_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)`

`_is_closing_fence`

1

`bool`

▼

Check if line is a closing fence. Implemented by FenceClassifierMixin.

`def _is_closing_fence(self, line: str) -> bool`

##### Parameters

Name
Type
Description

`line`
`—`

##### Returns

`bool`

`_scan_code_fence_content`

0

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

▼

Scan content inside fenced code block using window approach.

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

##### Returns

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