/home/huy/web-debugger

# Oct 13th, 2021

Started working on CSI sequence parser, it's fun to do all this works from scratch, there are too many cases with almost zero documentation/specs, lol.

According to Wikipedia, I think a CSI sequence can be parsed into a tuple of (param, intermediate, final) bytes like the following diagram:

ESC [ <0x30-0x3F>+ <0x20-0x2F>+ <0x40-0x7E>
↓           ↓           ↓
param    intermediate   final


For example, with a sequence like ESC[5A to move cursor up 5 lines, it would be parsed as (5, _, A). Longer and more complex commands like settting foreground color ESC[38;5;94m would be parsed as (38;5;94, _, m).

At first, I think I would use nom to write a parser, but I just feel lazy, so I wrote something similar to the idea of nom for parsing, luckily, the structure of the CSI sequence is not complex enough, so a simple iter chain would be enough to handle it.

With the parser ready, the first CSI sequence to be implemented is ESC[2J, what you got after sending clear command :D

4402407