Skip to content

Commit e139a94

Browse files
committed
Add keyboard enums.
1 parent f458c4d commit e139a94

File tree

4 files changed

+1155
-30
lines changed

4 files changed

+1155
-30
lines changed

CHANGELOG.rst

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ v2.0.0
99
Unreleased
1010
------------------
1111
Added
12-
- Added some keyboard functions:
12+
- New keyboard enums:
13+
- `tcod.event.KeySym`
14+
- `tcod.event.Scancode`
15+
- `tcod.event.Modifier`
16+
- New functions:
1317
- `tcod.event.get_keyboard_state`
1418
- `tcod.event.get_modifier_state`
15-
- `tcod.event.key_from_scancode`
16-
- `tcod.event.scancode_from_key`
17-
- `tcod.event.get_key_name`
1819

1920
Fixed
2021
- Contexts now give a more useful error when pickled.

build_libtcod.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,21 @@ def update_module_all(filename: str, new_all: str) -> None:
436436
f.write("%s\n %s,\n %s" % (header, new_all, footer))
437437

438438

439+
def generate_enums(prefix: str) -> Iterator[str]:
440+
"""Generate attribute assignments suitable for a Python enum."""
441+
prefix_len = len(prefix) - len("SDL_") + 1
442+
for name, value in sorted(
443+
find_sdl_attrs(prefix), key=lambda item: item[1]
444+
):
445+
name = name.split("_", 1)[1]
446+
if name.isdigit():
447+
name = f"N{name}"
448+
if name in "IOl": # Handle Flake8 warnings.
449+
yield f"{name} = {value} # noqa: E741"
450+
else:
451+
yield f"{name} = {value}"
452+
453+
439454
def write_library_constants() -> None:
440455
"""Write libtcod constants into the tcod.constants module."""
441456
from tcod._libtcod import lib, ffi
@@ -514,6 +529,25 @@ def write_library_constants() -> None:
514529
all_names = ",\n ".join('"%s"' % name for name in all_names)
515530
f.write("\n__all__ = [\n %s,\n]\n" % (all_names,))
516531

532+
with open("tcod/event.py", "r") as f:
533+
event_py = f.read()
534+
535+
event_py = re.sub(
536+
r"(?<=# --- SDL scancodes ---\n ).*?(?=\n # --- end ---\n)",
537+
"\n ".join(generate_enums("SDL_SCANCODE")),
538+
event_py,
539+
flags=re.DOTALL,
540+
)
541+
event_py = re.sub(
542+
r"(?<=# --- SDL keyboard symbols ---\n ).*?(?=\n # --- end ---\n)",
543+
"\n ".join(generate_enums("SDLK")),
544+
event_py,
545+
flags=re.DOTALL,
546+
)
547+
548+
with open("tcod/event.py", "w") as f:
549+
f.write(event_py)
550+
517551

518552
if __name__ == "__main__":
519553
write_library_constants()

docs/tcod/event.rst

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,24 @@ tcod.event - SDL2 Event Handling
33

44
.. automodule:: tcod.event
55
:members:
6+
:member-order: bysource
7+
:exclude-members: KeySym, Scancode, Modifier
8+
9+
10+
Keyboard Enums
11+
--------------
12+
13+
- :class:`KeySym`: Keys based on their glyph.
14+
- :class:`Scancode`: Keys based on their physical location.
15+
- :class:`Modifier`: Keyboard modifier keys.
16+
17+
.. autoclass:: KeySym
18+
:members:
19+
20+
.. autoclass:: Scancode
21+
:members:
22+
23+
.. autoclass:: Modifier
24+
:members:
25+
:member-order: bysource
26+
:undoc-members:

0 commit comments

Comments
 (0)