c
The community/lang/c directory contains files that provide support for the C programming language in Talon.
The c.talon file defines the core grammar for C. It includes:
* Tags for identifying C code, such as user.code_imperative, user.code_block_c_like, user.code_comment_line, etc.
* Settings for formatting C code, such as user.code_private_function_formatter, user.code_public_variable_formatter, etc.
* State commands for common C preprocessor directives such as #include, typedef, #define, #ifdef, #if, #error, #pragma, etc.
* A push command to insert braces.
* Commands for declaring variables with types and names, such as <user.c_variable> <phrase>.
* Commands for casting, types, keywords, and standard integer types like cast to <user.c_cast>, standard cast to <user.stdint_cast>, <user.c_types>, <user.c_pointers>, <user.c_keywords>, <user.c_signed>, standard <user.stdint_types>.
* A command int main to insert int main().
* A command include <user.code_libraries> to insert a library include with the chosen library.
The c.py file contains the Python code that supports the grammar defined in c.talon. It:
* Defines a Talon Context that matches when code.language is c.
* Defines lists for common C elements, such as:
* self.c_pointers: *, **
* self.stdint_signed: signed, unsigned
* self.c_signed: signed, unsigned
* self.c_keywords: static, volatile, register
* self.stdint_types: int8_t, int16_t, int32_t, int64_t, void, double, etc.
* self.c_types: char, short, long, int, void, double, etc.
* user.code_libraries: assert.h, ctype.h, errno.h, math.h, stdio.h, stdlib.h, string.h, etc.
* user.code_common_function: memcpy, memset, strcat, strcmp, strlen, printf, malloc, free, etc.
* Defines captures for those lists, such as c_pointers, c_signed, c_keywords, c_types, and stdint_types.
* Defines captures for C casts, such as c_cast and stdint_cast.
* Defines a capture for variables using the previously defined captures, c_variable.
* Implements actions for inserting common C operators such as code_operator_indirection, code_operator_address_of, code_operator_structure_dereference, code_operator_subscript, code_operator_assignment, and many more.
* Implements actions for inserting control flow statements such as code_state_if, code_state_else, code_state_switch, code_state_for, code_state_while, code_state_return, etc.
* Implements actions for inserting code snippets, including: code_insert_null, code_insert_is_null, code_insert_is_not_null, code_comment_line_prefix, code_insert_function, code_private_function, code_private_static_function, and code_insert_library.
Together, c.talon and c.py provide a comprehensive set of tools for writing C code with Talon. c.talon defines the grammar and c.py implements the logic and provides the necessary data.