1
1
mirror of https://github.com/qvacua/vimr.git synced 2024-12-26 23:36:08 +03:00
vimr/bin/generate_cursor_shape.py
2020-11-20 08:52:25 +01:00

61 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python3
import io
import os
import re
from string import Template
# Assume that we're in $REPO_ROOT/NvimView
NVIM_CURSOR_SHAPE_ENUM_FILE = "./neovim/src/nvim/cursor_shape.h"
SWIFT_TEMPLATE_FILE = "../resources/cursor_shape.template.swift"
SHAPE_NAMES = {
"SHAPE_IDX_N": (0, "normal"),
"SHAPE_IDX_V": (1, "visual"),
"SHAPE_IDX_I": (2, "insert"),
"SHAPE_IDX_R": (3, "replace"),
"SHAPE_IDX_C": (4, "cmdlineNormal"),
"SHAPE_IDX_CI": (5, "cmdlineInsert"),
"SHAPE_IDX_CR": (6, "cmdlineReplace"),
"SHAPE_IDX_O": (7, "operatorPending"),
"SHAPE_IDX_VE": (8, "visualExclusive"),
"SHAPE_IDX_CLINE": (9, "onCmdline"),
"SHAPE_IDX_STATUS": (10, "onStatusLine"),
"SHAPE_IDX_SDRAG": (11, "draggingStatusLine"),
"SHAPE_IDX_VSEP": (12, "onVerticalSepLine"),
"SHAPE_IDX_VDRAG": (13, "draggingVerticalSepLine"),
"SHAPE_IDX_MORE": (14, "more"),
"SHAPE_IDX_MOREL": (15, "moreLastLine"),
"SHAPE_IDX_SM": (16, "showingMatchingParen"),
"SHAPE_IDX_TERM": (17, "termFocus"),
"SHAPE_IDX_COUNT": (18, "count"),
}
def are_shapes_same() -> bool:
with io.open(NVIM_CURSOR_SHAPE_ENUM_FILE, "r") as cursor_shape_header:
shape_regex = r'^\s*(SHAPE_IDX_[A-Z]+)\s*= ([0-9]+)'
shape_lines = [re.match(shape_regex, line) for line in cursor_shape_header]
nvim_shapes = [m.groups() for m in shape_lines if m]
return set(nvim_shapes) == set([(k, str(v[0])) for (k, v) in SHAPE_NAMES.items()])
def swift_shapes() -> str:
with io.open(SWIFT_TEMPLATE_FILE, "r") as template_file:
template = Template(template_file.read())
cases = "\n".join([f" case {v[1]} = {v[0]}" for (k, v) in SHAPE_NAMES.items()])
return template.substitute(
cursor_shapes=cases,
version=version
)
if __name__ == "__main__":
version = os.environ['version']
assert are_shapes_same()
print(swift_shapes())