feat(notion-writer): parse standalone images to image blocks
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -56,6 +56,7 @@ def format_id_with_dashes(raw_id: str) -> str:
|
||||
|
||||
|
||||
TABLE_SEPARATOR_RE = re.compile(r'^\s*\|?(\s*:?-{3,}:?\s*\|)+\s*:?-{3,}:?\s*\|?\s*$')
|
||||
IMAGE_RE = re.compile(r'^\s*!\[([^\]]*)\]\(([^)\s]+)\)\s*$')
|
||||
|
||||
|
||||
def _is_table_row(line: str) -> bool:
|
||||
@@ -210,6 +211,13 @@ def _parse_lines(lines: List[str]) -> List[Dict[str, Any]]:
|
||||
blocks.append(create_column_list_block(column_blocks))
|
||||
continue
|
||||
|
||||
image_match = IMAGE_RE.match(line)
|
||||
if image_match:
|
||||
blocks.append(create_image_block(
|
||||
image_match.group(1), image_match.group(2)))
|
||||
i += 1
|
||||
continue
|
||||
|
||||
if _is_table_row(line) and i + 1 < len(lines) and TABLE_SEPARATOR_RE.match(lines[i + 1]):
|
||||
header_cells = _split_table_row(line)
|
||||
i += 2
|
||||
@@ -507,6 +515,19 @@ def create_divider_block() -> Dict[str, Any]:
|
||||
}
|
||||
|
||||
|
||||
def create_image_block(alt: str, target: str) -> Dict[str, Any]:
|
||||
"""Image block in external shape. Local targets are converted to
|
||||
file_upload shape later by ntn_files.materialize_local_media."""
|
||||
block: Dict[str, Any] = {
|
||||
"object": "block",
|
||||
"type": "image",
|
||||
"image": {"type": "external", "external": {"url": target}},
|
||||
}
|
||||
if alt:
|
||||
block["image"]["caption"] = parse_rich_text(alt)
|
||||
return block
|
||||
|
||||
|
||||
def create_table_block(header_cells: List[str], body_rows: List[List[str]]) -> Dict[str, Any]:
|
||||
"""Build a Notion `table` block with header + body rows.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user