Skip to content

Commit 58ff225

Browse files
committed
fix labels
1 parent cb2d33b commit 58ff225

File tree

5 files changed

+2298
-2284
lines changed

5 files changed

+2298
-2284
lines changed

scripts/asm/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,22 @@ def parse(self, parser):
1111

1212
args = [parser.parse_expression()]
1313

14+
if parser.stream.skip_if("comma"):
15+
args.append(parser.parse_expression())
16+
else:
17+
args.append(nodes.Const(0))
18+
1419
body = parser.parse_statements(
1520
["name:endasm"], drop_needle=True)
1621

1722
return nodes.CallBlock(
1823
self.call_method("_highlight", args), [], [], body
1924
).set_lineno(lineno)
2025

21-
def _highlight(self, mode: str, caller):
26+
def _highlight(self, mode: str, digits: int, caller):
2227
if mode == "epson":
2328
from asm.epson import render
2429
else:
2530
raise ValueError(mode)
2631

27-
return render(caller())
32+
return render(caller(), digits=digits)

scripts/asm/common.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ def __init__(self) -> None:
7575
def render(self):
7676
return ""
7777

78+
def __bool__(self):
79+
return False
80+
7881
@dataclass
7982
class Line:
8083
label: AccentedData
@@ -149,7 +152,7 @@ def lines(x) -> Sequence[str]:
149152

150153

151154
class Renderer:
152-
def __init__(self, use_positions=False) -> None:
155+
def __init__(self, use_positions=0) -> None:
153156
self.prefixes: list[str] = []
154157
self.lines: list[Line] = []
155158
self.label_anchors: dict[int,str] = {}
@@ -175,7 +178,7 @@ def queue(self, line: Line) -> None:
175178
else:
176179
if self.use_positions:
177180
if isinstance(line, (OperatorLine, DirectiveLine)) and line.position >= 0:
178-
pos = f"{line.position:06X}"
181+
pos = f"{line.position:0{self.use_positions}X}"
179182
self.prefix_anchors[self.cur_line] = pos
180183
self.prefixes.append(f"${pos}")
181184
else:
@@ -187,6 +190,7 @@ def queue(self, line: Line) -> None:
187190
if self.preroll_start < 0
188191
else self.preroll_start
189192
] = str(line.label)
193+
self.preroll_start = -1
190194

191195
self.lines.append(line)
192196
self.cur_line += 1
@@ -195,7 +199,12 @@ def render(self) -> str:
195199
res = '<pre><code class="language-s1c88 hljs">'
196200
longest = max(len(x) for x in self.prefixes)
197201
prefix_class = 'color="#6e7781" class="line-number"'
198-
for i, (p, l) in enumerate(zip(self.prefixes, self.lines)):
202+
if self.use_positions:
203+
lines = zip(self.prefixes, self.lines)
204+
else:
205+
lines = self.lines
206+
207+
for i, (p, l) in enumerate(lines):
199208
if p:
200209
if i in self.prefix_anchors:
201210
name = _id(self.prefix_anchors[i])

scripts/asm/epson/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ def identify_arg_type(arg: str, *, index_ok=True):
136136

137137
raise ValueError(f"unknown argument type: '{arg}'")
138138

139-
def process_epson(code, *, position=0) -> Renderer:
139+
def process_epson(code, *, position=0, digits=6) -> Renderer:
140140
cont = ""
141141
macros = defaultdict(set)
142142
macro_sizes = defaultdict(int)
@@ -149,7 +149,7 @@ def macro_or_op(x: str):
149149
return "title.function"
150150
return "keyword"
151151

152-
renderer = Renderer(position >= 0)
152+
renderer = Renderer(digits)
153153

154154
for line in lines(code):
155155
# TODO: remember and restore break points
@@ -312,6 +312,6 @@ def macro_or_op(x: str):
312312
return renderer
313313

314314

315-
def render(code, *, position=0) -> str:
316-
renderer = process_epson(code, position=position)
315+
def render(code, *, position=0, digits=6) -> str:
316+
renderer = process_epson(code, position=position, digits=digits)
317317
return renderer.render()

0 commit comments

Comments
 (0)