| 579 | |
| 580 | |
| 581 | class ExpressionNode: |
| 582 | def __init__(self, value, escape=True): |
| 583 | self.value = value.strip() |
| 584 | |
| 585 | # convert ${...} to $(...) |
| 586 | if value.startswith("{") and value.endswith("}"): |
| 587 | self.value = "(" + self.value[1:-1] + ")" |
| 588 | |
| 589 | self.escape = escape |
| 590 | |
| 591 | def emit(self, indent, begin_indent=""): |
| 592 | return f"escape_({self.value}, {bool(self.escape)})" |
| 593 | |
| 594 | def __repr__(self): |
| 595 | if self.escape: |
| 596 | escape = "" |
| 597 | else: |
| 598 | escape = ":" |
| 599 | return f"${escape}{self.value}" |
| 600 | |
| 601 | |
| 602 | class AssignmentNode: |