Source code for bauiv1lib.keyboard.englishkeyboard

# Released under the MIT License. See LICENSE for details.
#
"""Defines a default keyboards."""

# ba_meta require api 8
# (see https://ballistica.net/wiki/meta-tag-system)

from __future__ import annotations

from typing import TYPE_CHECKING

import bauiv1 as bui

if TYPE_CHECKING:
    from typing import Iterable


[docs] def split(chars: Iterable[str], maxlen: int) -> list[list[str]]: """Returns char groups with a fixed number of elements""" result = [] shatter: list[str] = [] for i in chars: if len(shatter) < maxlen: shatter.append(i) else: result.append(shatter) shatter = [i] if shatter: while len(shatter) < maxlen: shatter.append('') result.append(shatter) return result
[docs] def generate_emojis(maxlen: int) -> list[list[str]]: """Generates a lot of UTF8 emojis prepared for bui.Keyboard pages""" all_emojis = split([chr(i) for i in range(0x1F601, 0x1F650)], maxlen) all_emojis += split([chr(i) for i in range(0x2702, 0x27B1)], maxlen) all_emojis += split([chr(i) for i in range(0x1F680, 0x1F6C1)], maxlen) return all_emojis
# ba_meta export bauiv1.Keyboard
[docs] class EnglishKeyboard(bui.Keyboard): """Default English keyboard.""" name = 'English' chars = [ ('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'), ('a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'), ('z', 'x', 'c', 'v', 'b', 'n', 'm'), ] nums = ( '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '/', ':', ';', '(', ')', '$', '&', '@', '"', '.', ',', '?', '!', '\'', '_', ) pages: dict[str, tuple[str, ...]] = { f'emoji{i}': tuple(page) for i, page in enumerate(generate_emojis(len(nums))) }