From 1378a3f6ddd611ff116899d29a3dd3f134674360 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 14 Feb 2023 16:07:30 +0100 Subject: [PATCH] Field width and mask control --- nomadnet/ui/textui/MicronParser.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/nomadnet/ui/textui/MicronParser.py b/nomadnet/ui/textui/MicronParser.py index 69586ae..fc1a6ec 100644 --- a/nomadnet/ui/textui/MicronParser.py +++ b/nomadnet/ui/textui/MicronParser.py @@ -167,11 +167,12 @@ def parse_line(line, state, url_delegate): widgets.append(("pack", tw)) else: if o["type"] == "field": - fw = 32 + fw = o["width"] fd = o["data"] fn = o["name"] fs = o["style"] - f = urwid.Edit(caption="", edit_text=fd, align=state["align"], multiline=True) + fmask = "*" if o["masked"] else None + f = urwid.Edit(caption="", edit_text=fd, align=state["align"], multiline=True, mask=fmask) f.field_name = fn fa = urwid.AttrMap(f, fs) widgets.append((fw, fa)) @@ -467,6 +468,20 @@ def make_output(state, line, url_delegate): pass else: field_name = line[i+1:i+field_name_end] + field_name_skip = len(field_name) + field_masked = False + field_width = 24 + + if "|" in field_name: + f_components = field_name.split("|") + field_flags = f_components[0] + field_name = f_components[1] + if "!" in field_flags: + field_flags = field_flags.replace("!", "") + field_masked = True + if len(field_flags) > 0: + field_width = min(int(field_flags), 256) + def sr(): return "@{"+str(random.randint(1000,9999))+"}" rsg = sr() @@ -480,9 +495,16 @@ def make_output(state, line, url_delegate): else: field_data = lr[1:endpos].replace(rsg, "\\>") - skip = len(field_data)+len(field_name)+2 + skip = len(field_data)+field_name_skip+2 field_data = field_data.replace("\\>", ">") - output.append({"type":"field", "name": field_name, "data": field_data, "style": make_style(state)}) + output.append({ + "type":"field", + "name": field_name, + "width": field_width, + "masked": field_masked, + "data": field_data, + "style": make_style(state) + }) elif c == "[": endpos = line[i:].find("]")