Source code for bauiv1lib.keyboard.englishkeyboard

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

# ba_meta require api 9
# (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))) }
# Docs-generation hack; import some stuff that we likely only forward-declared # in our actual source code so that docs tools can find it. from typing import (Coroutine, Any, Literal, Callable, Generator, Awaitable, Sequence, Self) import asyncio from concurrent.futures import Future from pathlib import Path from enum import Enum