From 3ec8b8b9684f301935a0ebedf649039c51574a2a Mon Sep 17 00:00:00 2001 From: Daker Fernandes Pinheiro Date: Wed, 12 Feb 2025 20:59:28 -0700 Subject: [PATCH] Fix _encode_identifier to always emit valid identifiers --- vcd/writer.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/vcd/writer.py b/vcd/writer.py index de55eed..2c991dd 100755 --- a/vcd/writer.py +++ b/vcd/writer.py @@ -752,8 +752,18 @@ def _encode_identifier(v: int) -> str: """Encode identifer value into base-94 string.""" assert v > 0, "identifier codes must be > 0" encoded = "" + # first char must be in range A-z + v -= 1 + modv = v % 52 + if modv <= ord('Z') - ord('A'): + encoded += chr(ord('A') + modv) + else: + encoded += chr(modv - ord('Z') + ord('A') + ord('a') - 1) + v //= 52 + # other chars can be from base-94 while v != 0: v -= 1 encoded += chr((v % 94) + 33) v //= 94 return encoded +