|
1 | 1 | import io |
| 2 | +import logging |
2 | 3 | from dataclasses import dataclass, field |
3 | 4 | from enum import Enum, auto |
4 | 5 | from typing import Dict, Iterable, List, Union, cast |
|
7 | 8 | from ..page import Page |
8 | 9 | from ..types import FileId |
9 | 10 |
|
| 11 | +logger = logging.getLogger(__name__) |
| 12 | + |
10 | 13 |
|
11 | 14 | def troff_escape(value: str) -> str: |
12 | 15 | """Escape values that troff may interpret.""" |
@@ -201,7 +204,13 @@ class SnootyToTroffTree: |
201 | 204 | """Transforms snooty AST nodes to an intermediate representation of ManNodes.""" |
202 | 205 |
|
203 | 206 | def handle(self, node: n.Node) -> List[ManNode]: |
204 | | - return cast(List[ManNode], getattr(self, f"handle_{type(node).__name__}")(node)) |
| 207 | + try: |
| 208 | + handler = getattr(self, f"handle_{type(node).__name__}") |
| 209 | + except AttributeError: |
| 210 | + logger.error("INTERNAL: Unknown node type: %s", type(node).__name__) |
| 211 | + return [] |
| 212 | + |
| 213 | + return cast(List[ManNode], handler(node)) |
205 | 214 |
|
206 | 215 | def children(self, nodes: Iterable[n.Node]) -> List[ManNode]: |
207 | 216 | list_of_lists = [self.handle(child) for child in nodes] |
@@ -379,6 +388,9 @@ def handle_Transition(self, node: n.Transition) -> List[ManNode]: |
379 | 388 | def handle_Table(self, node: n.Table) -> List[ManNode]: |
380 | 389 | return [] |
381 | 390 |
|
| 391 | + def handle_Comment(self, node: n.Comment) -> List[ManNode]: |
| 392 | + return [] |
| 393 | + |
382 | 394 |
|
383 | 395 | def render(page: Page, name: str, title: str, section: int) -> Dict[FileId, str]: |
384 | 396 | """Render the given page as a manpage.""" |
|
0 commit comments