Add chez-scintilla: Chez Scheme FFI bindings for Scintilla + termbox
ober
5d8620d01b800d1608076ab2f150b06e192e1b37
new file mode 100644 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.so +*.wpo new file mode 100644 --- /dev/null +++ b/Makefile @@ -0,0 +1,65 @@ +.PHONY: all build shim clean test vendor-deps + +# Gerbil-scintilla vendor directory (reuse already-built artifacts) +GERBIL_SCINTILLA ?= $(HOME)/mine/gerbil-scintilla + +# Vendor paths +VENDOR = $(GERBIL_SCINTILLA)/vendor +SCI_DIR = $(VENDOR)/scintilla +SCI_TB_DIR = $(SCI_DIR)/termbox +TERMBOX_DIR = $(SCI_TB_DIR)/termbox_next +LEXILLA_DIR = $(VENDOR)/lexilla + +# Static archives +SCINTILLA_A = $(SCI_DIR)/bin/scintilla.a +TERMBOX_A = $(TERMBOX_DIR)/bin/termbox.a +LEXILLA_A = $(LEXILLA_DIR)/bin/liblexilla.a + +# Include paths +CC_INCLUDES = \ + -I$(SCI_DIR)/include \ + -I$(SCI_DIR)/src \ + -I$(SCI_TB_DIR) \ + -I$(TERMBOX_DIR)/src \ + -I$(LEXILLA_DIR)/include + +# Chez Scheme library path +CHEZ_LIB = src +SHIM_SO = chez_scintilla_shim.so + +all: build + +# Build the C shim shared object +shim: $(SHIM_SO) + +$(SHIM_SO): chez_scintilla_shim.c $(SCINTILLA_A) $(LEXILLA_A) $(TERMBOX_A) + gcc -shared -fPIC -o $@ $< \ + $(CC_INCLUDES) \ + -Wl,--whole-archive $(SCINTILLA_A) $(LEXILLA_A) $(TERMBOX_A) -Wl,--no-whole-archive \ + -lstdc++ -lpthread + +# Build everything: shim + compile Scheme libraries +build: $(SHIM_SO) + @echo "Compiling Scheme libraries..." + @CHEZ_SCINTILLA_LIB=$(CURDIR) \ + scheme --libdirs $(CHEZ_LIB) --compile-imported-libraries --program /dev/null \ + < <(echo '(import (chez-scintilla ffi) (chez-scintilla constants) (chez-scintilla scintilla) (chez-scintilla tui) (chez-scintilla lexer) (chez-scintilla style) (chez-scintilla search) (chez-scintilla folding) (chez-scintilla autocomplete) (chez-scintilla markers))') \ + 2>&1 || true + @echo "Build complete." + +# Run tests +test: build + CHEZ_SCINTILLA_LIB=$(CURDIR) \ + scheme --libdirs $(CHEZ_LIB) --script tests/run-tests.ss + +# Check that vendor deps exist +vendor-deps: + @test -f $(SCINTILLA_A) || (echo "ERROR: scintilla.a not found. Run 'make vendor-deps' in $(GERBIL_SCINTILLA)" && exit 1) + @test -f $(LEXILLA_A) || (echo "ERROR: liblexilla.a not found." && exit 1) + @test -f $(TERMBOX_A) || (echo "ERROR: termbox.a not found." && exit 1) + @echo "Vendor dependencies OK." + +clean: + rm -f $(SHIM_SO) + find src -name '*.so' -delete + find src -name '*.wpo' -delete new file mode 100644 --- /dev/null +++ b/chez_scintilla_shim.c @@ -0,0 +1,341 @@ +/* chez_scintilla_shim.c — C shim for Chez Scheme FFI to Scintilla + termbox + * + * Extracted from gerbil-scintilla/ffi.ss c-declare block. + * Provides: instance lifecycle, message passing, notification ring buffer, + * input, display, clipboard, lexilla, and termbox wrappers. + * + * All functions use simple C types (void*, int, long, const char*) + * compatible with Chez Scheme's foreign-procedure. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdint.h> +#include <stdbool.h> + +#include "Scintilla.h" +#include "ScintillaTermbox.h" +#include "Lexilla.h" +#include "termbox.h" + +/* ================================================================ + Types + ================================================================ */ +typedef intptr_t sptr_t; +typedef uintptr_t uptr_t; +typedef void Scintilla; + +/* ================================================================ + Notification ring buffer (per-instance) + ================================================================ */ +#define NOTIFY_RING_SIZE 64 + +typedef struct { + int code; + long position; + int ch; + int modifiers; + int modification_type; + char text[256]; + long length; + long lines_added; + int message; + long line; + int fold_level_now; + int fold_level_prev; + int margin; + int list_type; + int x; + int y; + int token; + int updated; +} notify_entry_t; + +typedef struct instance_node { + Scintilla *view; + notify_entry_t ring[NOTIFY_RING_SIZE]; + int ring_head; + int ring_tail; + struct instance_node *next; +} instance_node_t; + +static instance_node_t *instance_list = NULL; + +/* Current notification (static, for drain_one -> accessor pattern) */ +static notify_entry_t current_scn; + +/* Find instance node by view pointer */ +static instance_node_t *find_instance(Scintilla *view) { + instance_node_t *n = instance_list; + while (n) { + if (n->view == view) return n; + n = n->next; + } + return NULL; +} + +/* Notification callback — called synchronously from C++ */ +static void notification_callback(Scintilla *view, int msg, + SCNotification *scn, void *userdata) { + instance_node_t *inst = find_instance(view); + if (!inst) return; + + int next_head = (inst->ring_head + 1) % NOTIFY_RING_SIZE; + if (next_head == inst->ring_tail) { + /* Ring full — drop oldest */ + inst->ring_tail = (inst->ring_tail + 1) % NOTIFY_RING_SIZE; + } + + notify_entry_t *e = &inst->ring[inst->ring_head]; + e->code = scn->nmhdr.code; + e->position = (long)scn->position; + e->ch = scn->ch; + e->modifiers = scn->modifiers; + e->modification_type = scn->modificationType; + e->length = (long)scn->length; + e->lines_added = (long)scn->linesAdded; + e->message = scn->message; + e->line = (long)scn->line; + e->fold_level_now = scn->foldLevelNow; + e->fold_level_prev = scn->foldLevelPrev; + e->margin = scn->margin; + e->list_type = scn->listType; + e->x = scn->x; + e->y = scn->y; + e->token = scn->token; + e->updated = scn->updated; + + if (scn->text && scn->length > 0) { + int copy_len = scn->length < 255 ? scn->length : 255; + memcpy(e->text, scn->text, copy_len); + e->text[copy_len] = '\0'; + } else { + e->text[0] = '\0'; + } + + inst->ring_head = next_head; +} + +/* ================================================================ + Instance lifecycle + ================================================================ */ +void *chez_scintilla_new(void) { + Scintilla *sci = scintilla_new(notification_callback, NULL); + if (!sci) return NULL; + + instance_node_t *node = (instance_node_t *)malloc(sizeof(instance_node_t)); + node->view = sci; + node->ring_head = 0; + node->ring_tail = 0; + node->next = instance_list; + instance_list = node; + + return (void *)sci; +} + +void chez_scintilla_delete(void *handle) { + Scintilla *sci = (Scintilla *)handle; + /* Remove from instance list */ + instance_node_t **pp = &instance_list; + while (*pp) { + if ((*pp)->view == sci) { + instance_node_t *rm = *pp; + *pp = rm->next; + free(rm); + break; + } + pp = &(*pp)->next; + } + scintilla_delete(sci); +} + +/* ================================================================ + Message passing + ================================================================ */ +long chez_scintilla_send_message(void *handle, unsigned int msg, + unsigned long wparam, long lparam) { + return (long)scintilla_send_message((Scintilla *)handle, msg, + (uptr_t)wparam, (sptr_t)lparam); +} + +/* Send message with string as lparam (cast char* to sptr_t) */ +long chez_scintilla_send_message_string(void *handle, unsigned int msg, + unsigned long wparam, const char *str) { + return (long)scintilla_send_message((Scintilla *)handle, msg, + (uptr_t)wparam, (sptr_t)str); +} + +/* Receive string: call msg twice (get length, then fill buffer) */ +#define RECV_BUF_SIZE 65536 +static char recv_buf[RECV_BUF_SIZE]; + +const char *chez_scintilla_receive_string(void *handle, unsigned int msg, + unsigned long wparam) { + long len = (long)scintilla_send_message((Scintilla *)handle, msg, + (uptr_t)wparam, (sptr_t)NULL); + if (len <= 0) { + recv_buf[0] = '\0'; + return recv_buf; + } + if (len >= RECV_BUF_SIZE) len = RECV_BUF_SIZE - 1; + scintilla_send_message((Scintilla *)handle, msg, + (uptr_t)wparam, (sptr_t)recv_buf); + recv_buf[len] = '\0'; + return recv_buf; +} + +/* Set property: wparam = key string, lparam = value string */ +long chez_scintilla_set_property(void *handle, unsigned int msg, + const char *key, const char *value) { + return (long)scintilla_send_message((Scintilla *)handle, msg, + (uptr_t)key, (sptr_t)value); +} + +/* ================================================================ + Input + ================================================================ */ +void chez_scintilla_send_key(void *handle, int key, + int shift, int ctrl, int alt) { + scintilla_send_key((Scintilla *)handle, key, shift, ctrl, alt); +} + +int chez_scintilla_send_mouse(void *handle, int event, int button, + int y, int x, + int shift, int ctrl, int alt) { + return scintilla_send_mouse((Scintilla *)handle, event, button, + y, x, shift, ctrl, alt); +} + +/* ================================================================ + Display + ================================================================ */ +void chez_scintilla_refresh(void *handle) { + scintilla_refresh((Scintilla *)handle); +} + +void chez_scintilla_resize(void *handle, int width, int height) { + scintilla_resize((Scintilla *)handle, width, height); +} + +void chez_scintilla_move(void *handle, int x, int y) { + scintilla_move((Scintilla *)handle, x, y); +} + +/* ================================================================ + Clipboard + ================================================================ */ +const char *chez_scintilla_get_clipboard(void *handle) { + int len = 0; + char *buf = scintilla_get_clipboard((Scintilla *)handle, &len); + if (!buf) return ""; + /* Copy into static buffer so Chez can read it, then free */ + if (len >= RECV_BUF_SIZE) len = RECV_BUF_SIZE - 1; + memcpy(recv_buf, buf, len); + recv_buf[len] = '\0'; + free(buf); + return recv_buf; +} + +/* ================================================================ + Lexilla integration + ================================================================ */ +#define SCI_SETILEXER_MSG 4033 + +void chez_scintilla_set_lexer_language(void *handle, const char *lang) { + ILexer5 *lexer = CreateLexer(lang); + scintilla_send_message((Scintilla *)handle, SCI_SETILEXER_MSG, + 0, (sptr_t)lexer); +} + +/* ================================================================ + Notification drain + ================================================================ */ +int chez_scintilla_drain_one(void *handle) { + instance_node_t *inst = find_instance((Scintilla *)handle); + if (!inst) return 0; + if (inst->ring_head == inst->ring_tail) return 0; + + current_scn = inst->ring[inst->ring_tail]; + inst->ring_tail = (inst->ring_tail + 1) % NOTIFY_RING_SIZE; + return 1; +} + +int chez_scn_code(void) { return current_scn.code; } +long chez_scn_position(void) { return current_scn.position; } +int chez_scn_ch(void) { return current_scn.ch; } +int chez_scn_modifiers(void) { return current_scn.modifiers; } +int chez_scn_modification_type(void) { return current_scn.modification_type; } +const char *chez_scn_text(void) { return current_scn.text; } +long chez_scn_length(void) { return current_scn.length; } +long chez_scn_lines_added(void) { return current_scn.lines_added; } +int chez_scn_message(void) { return current_scn.message; } +long chez_scn_line(void) { return current_scn.line; } +int chez_scn_fold_level_now(void) { return current_scn.fold_level_now; } +int chez_scn_fold_level_prev(void) { return current_scn.fold_level_prev; } +int chez_scn_margin(void) { return current_scn.margin; } +int chez_scn_list_type(void) { return current_scn.list_type; } +int chez_scn_x(void) { return current_scn.x; } +int chez_scn_y(void) { return current_scn.y; } +int chez_scn_token(void) { return current_scn.token; } +int chez_scn_updated(void) { return current_scn.updated; } + +/* ================================================================ + Termbox wrappers + ================================================================ */ +static struct tb_event last_tb_event; + +int chez_tb_init(void) { return tb_init(); } +void chez_tb_shutdown(void) { tb_shutdown(); } +int chez_tb_width(void) { return tb_width(); } +int chez_tb_height(void) { return tb_height(); } +void chez_tb_clear(void) { tb_clear(); } +void chez_tb_present(void) { tb_present(); } +void chez_tb_set_cursor(int x, int y) { tb_set_cursor(x, y); } + +int chez_tb_poll_event(void) { + return tb_poll_event(&last_tb_event); +} + +int chez_tb_peek_event(int timeout_ms) { + return tb_peek_event(&last_tb_event, timeout_ms); +} + +int chez_tb_event_type(void) { return last_tb_event.type; } +int chez_tb_event_mod(void) { return last_tb_event.mod; } +int chez_tb_event_key(void) { return last_tb_event.key; } +unsigned int chez_tb_event_ch(void) { return last_tb_event.ch; } +int chez_tb_event_w(void) { return last_tb_event.w; } +int chez_tb_event_h(void) { return last_tb_event.h; } +int chez_tb_event_x(void) { return last_tb_event.x; } +int chez_tb_event_y(void) { return last_tb_event.y; } + +/* ================================================================ + Termbox extended wrappers + ================================================================ */ +void chez_tb_change_cell(int x, int y, uint32_t ch, uint32_t fg, uint32_t bg) { + tb_change_cell(x, y, ch, fg, bg); +} + +void chez_tb_set_clear_attributes(uint32_t fg, uint32_t bg) { + tb_set_clear_attributes(fg, bg); +} + +int chez_tb_select_input_mode(int mode) { + return tb_select_input_mode(mode); +} + +int chez_tb_select_output_mode(int mode) { + return tb_select_output_mode(mode); +} + +void chez_tb_print_string(int x, int y, uint32_t fg, uint32_t bg, const char *str) { + uint32_t ch; + while (*str) { + int len = utf8_char_to_unicode(&ch, str); + if (len <= 0) break; + tb_change_cell(x, y, ch, fg, bg); + x++; + str += len; + } +} new file mode 100644 --- /dev/null +++ b/src/chez-scintilla/autocomplete.sls @@ -0,0 +1,180 @@ +;;; Autocomplete and calltips for Scintilla +;;; Chez Scheme port of gerbil-scintilla/autocomplete.ss +;;; +;;; Provides functions for autocompletion lists and call tips. + +(library (chez-scintilla autocomplete) + (export + ;; Autocomplete + editor-autocomplete-show + editor-autocomplete-cancel + editor-autocomplete-active? + editor-autocomplete-pos-start + editor-autocomplete-complete + editor-autocomplete-select + editor-autocomplete-get-current + editor-autocomplete-stops + + ;; Autocomplete settings + editor-autocomplete-set-separator + editor-autocomplete-get-separator + editor-autocomplete-set-ignore-case + editor-autocomplete-get-ignore-case? + editor-autocomplete-set-choose-single + editor-autocomplete-get-choose-single? + editor-autocomplete-set-auto-hide + editor-autocomplete-get-auto-hide? + editor-autocomplete-set-drop-rest-of-word + editor-autocomplete-get-drop-rest-of-word? + editor-autocomplete-set-cancel-at-start + editor-autocomplete-get-cancel-at-start? + editor-autocomplete-set-order + editor-autocomplete-get-order + editor-autocomplete-set-max-width + editor-autocomplete-get-max-width + editor-autocomplete-set-max-height + editor-autocomplete-get-max-height + editor-autocomplete-set-fill-ups + + ;; Calltips + editor-calltip-show + editor-calltip-cancel + editor-calltip-active? + editor-calltip-pos-start + editor-calltip-set-highlight + editor-calltip-set-background + editor-calltip-set-foreground + editor-calltip-set-foreground-highlight) + + (import (chezscheme) + (chez-scintilla constants) + (chez-scintilla scintilla)) + + ;; ==================================================================== + ;; Autocomplete operations + ;; ==================================================================== + + (define (editor-autocomplete-show editor len-entered items) + (send-message/string editor SCI_AUTOCSHOW items)) + + (define (editor-autocomplete-cancel editor) + (send-message editor SCI_AUTOCCANCEL)) + + (define (editor-autocomplete-active? editor) + (not (zero? (send-message editor SCI_AUTOCACTIVE)))) + + (define (editor-autocomplete-pos-start editor) + (send-message editor SCI_AUTOCPOSSTART)) + + (define (editor-autocomplete-complete editor) + (send-message editor SCI_AUTOCCOMPLETE)) + + (define (editor-autocomplete-select editor text) + (send-message/string editor SCI_AUTOCSELECT text)) + + (define (editor-autocomplete-get-current editor) + (send-message editor SCI_AUTOCGETCURRENT)) + + (define (editor-autocomplete-stops editor chars) + (send-message/string editor SCI_AUTOCSTOPS chars)) + + ;; ==================================================================== + ;; Autocomplete settings + ;; ==================================================================== + + (define (editor-autocomplete-set-separator editor char-code) + (send-message editor SCI_AUTOCSETSEPARATOR char-code)) + + (define (editor-autocomplete-get-separator editor) + (send-message editor SCI_AUTOCGETSEPARATOR)) + + (define (editor-autocomplete-set-ignore-case editor ignore?) + (send-message editor SCI_AUTOCSETIGNORECASE (if ignore? 1 0))) + + (define (editor-autocomplete-get-ignore-case? editor) + (not (zero? (send-message editor SCI_AUTOCGETIGNORECASE)))) + + (define (editor-autocomplete-set-choose-single editor choose?) + (send-message editor SCI_AUTOCSETCHOOSESINGLE (if choose? 1 0))) + + (define (editor-autocomplete-get-choose-single? editor) + (not (zero? (send-message editor SCI_AUTOCGETCHOOSESINGLE)))) + + (define (editor-autocomplete-set-auto-hide editor hide?) + (send-message editor SCI_AUTOCSETAUTOHIDE (if hide? 1 0))) + + (define (editor-autocomplete-get-auto-hide? editor) + (not (zero? (send-message editor SCI_AUTOCGETAUTOHIDE)))) + + (define (editor-autocomplete-set-drop-rest-of-word editor drop?) + (send-message editor SCI_AUTOCSETDROPRESTOFWORD (if drop? 1 0))) + + (define (editor-autocomplete-get-drop-rest-of-word? editor) + (not (zero? (send-message editor SCI_AUTOCGETDROPRESTOFWORD)))) + + (define (editor-autocomplete-set-cancel-at-start editor cancel?) + (send-message editor SCI_AUTOCSETCANCELATSTART (if cancel? 1 0))) + + (define (editor-autocomplete-get-cancel-at-start? editor) + (not (zero? (send-message editor SCI_AUTOCGETCANCELATSTART)))) + + (define (editor-autocomplete-set-order editor order) + (send-message editor SCI_AUTOCSETORDER + (case order + ((presorted) SC_ORDER_PRESORTED) + ((perform-sort) SC_ORDER_PERFORMSORT) + ((custom) SC_ORDER_CUSTOM) + (else SC_ORDER_PRESORTED)))) + + (define (editor-autocomplete-get-order editor) + (let ((mode (send-message editor SCI_AUTOCGETORDER))) + (cond + ((= mode SC_ORDER_PRESORTED) 'presorted) + ((= mode SC_ORDER_PERFORMSORT) 'perform-sort) + ((= mode SC_ORDER_CUSTOM) 'custom) + (else 'presorted)))) + + (define (editor-autocomplete-set-max-width editor chars) + (send-message editor SCI_AUTOCSETMAXWIDTH chars)) + + (define (editor-autocomplete-get-max-width editor) + (send-message editor SCI_AUTOCGETMAXWIDTH)) + + (define (editor-autocomplete-set-max-height editor rows) + (send-message editor SCI_AUTOCSETMAXHEIGHT rows)) + + (define (editor-autocomplete-get-max-height editor) + (send-message editor SCI_AUTOCGETMAXHEIGHT)) + + (define (editor-autocomplete-set-fill-ups editor chars) + (send-message/string editor SCI_AUTOCSETFILLUPS chars)) + + ;; ==================================================================== + ;; Calltips + ;; ==================================================================== + + (define (editor-calltip-show editor pos text) + (send-message/string editor SCI_CALLTIPSHOW text)) + + (define (editor-calltip-cancel editor) + (send-message editor SCI_CALLTIPCANCEL)) + + (define (editor-calltip-active? editor) + (not (zero? (send-message editor SCI_CALLTIPACTIVE)))) + + (define (editor-calltip-pos-start editor) + (send-message editor SCI_CALLTIPPOSSTART)) + + (define (editor-calltip-set-highlight editor highlight-start highlight-end) + (send-message editor SCI_CALLTIPSETHLT highlight-start highlight-end)) + + (define (editor-calltip-set-background editor color) + (send-message editor SCI_CALLTIPSETBACK color)) + + (define (editor-calltip-set-foreground editor color) + (send-message editor SCI_CALLTIPSETFORE color)) + + (define (editor-calltip-set-foreground-highlight editor color) + (send-message editor SCI_CALLTIPSETFOREHLT color)) + +) ;; end library new file mode 100644 --- /dev/null +++ b/src/chez-scintilla/constants.sls @@ -0,0 +1,837 @@ +;;; Scintilla message and notification constants +;;; Chez Scheme port of gerbil-scintilla/constants.ss + +(library (chez-scintilla constants) + (export + ;; Text operations + SCI_SETTEXT SCI_GETTEXT SCI_GETTEXTLENGTH SCI_GETCHARACTERPOINTER + SCI_ADDTEXT SCI_ADDSTYLEDTEXT SCI_INSERTTEXT SCI_CHANGEINSERTION + SCI_CLEARALL SCI_DELETERANGE SCI_CLEARDOCUMENTSTYLE SCI_APPENDTEXT + SCI_REPLACESEL SCI_TAB SCI_BACKTAB + ;; Selection and navigation + SCI_GETLENGTH SCI_GETCHARAT SCI_GETCURRENTPOS SCI_GETANCHOR + SCI_SETANCHOR SCI_SETCURRENTPOS SCI_SETSEL SCI_GETSELTEXT + SCI_SELECTALL SCI_GOTOPOS SCI_GOTOLINE + SCI_GETSELECTIONSTART SCI_GETSELECTIONEND + SCI_SETSELECTIONSTART SCI_SETSELECTIONEND SCI_GETSELECTIONEMPTY + SCI_SETMOVEEXTENDSSELECTION SCI_GETMOVEEXTENDSSELECTION + ;; Line operations + SCI_GETLINE SCI_GETLINECOUNT SCI_LINEFROMPOSITION SCI_POSITIONFROMLINE + SCI_GETLINEENDPOSITION SCI_LINESONSCREEN SCI_LINELENGTH + SCI_GETCOLUMN SCI_FINDCOLUMN SCI_POSITIONFROMPOINT + SCI_POSITIONFROMPOINTCLOSE SCI_POINTXFROMPOSITION SCI_POINTYFROMPOSITION + ;; Styling + SCI_GETSTYLEAT SCI_STYLECLEARALL SCI_STYLESETFORE SCI_STYLESETBACK + SCI_STYLESETBOLD SCI_STYLESETITALIC SCI_STYLESETSIZE SCI_STYLESETFONT + SCI_STYLESETEOLFILLED SCI_STYLERESETDEFAULT SCI_STYLESETUNDERLINE + SCI_STYLEGETFORE SCI_STYLEGETBACK SCI_STYLEGETBOLD SCI_STYLEGETITALIC + SCI_STYLEGETSIZE SCI_STYLEGETFONT SCI_STYLEGETUNDERLINE + SCI_STYLESETCASE SCI_STYLEGETCASE SCI_STYLESETCHARACTERSET + SCI_STYLESETVISIBLE SCI_STYLEGETVISIBLE SCI_STYLESETCHANGEABLE + SCI_STYLEGETCHANGEABLE SCI_STYLESETHOTSPOT SCI_STYLEGETHOTSPOT + SCI_STYLESETWEIGHT SCI_STYLEGETWEIGHT + ;; Style numbers + STYLE_DEFAULT STYLE_LINENUMBER STYLE_BRACELIGHT STYLE_BRACEBAD + STYLE_CONTROLCHAR STYLE_INDENTGUIDE STYLE_CALLTIP + STYLE_FOLDDISPLAYTEXT STYLE_LASTPREDEFINED STYLE_MAX + ;; Font weight + SC_WEIGHT_NORMAL SC_WEIGHT_SEMIBOLD SC_WEIGHT_BOLD + ;; Case mapping + SC_CASE_MIXED SC_CASE_UPPER SC_CASE_LOWER SC_CASE_CAMEL + ;; Lexer + SCI_SETLEXER SCI_GETLEXER SCI_SETLEXERLANGUAGE SCI_GETLEXERLANGUAGE + SCI_COLOURISE SCI_SETPROPERTY SCI_GETPROPERTY SCI_SETKEYWORDS + SCI_DESCRIBEKEYWORDSETS SCI_DESCRIBEPROPERTY SCI_GETPROPERTYEXPANDED + SCI_GETPROPERTYINT SCI_PRIVATELEXERCALL SCI_SETILEXER + SCI_LOADLEXERLIBRARY SCI_CREATELOADER + ;; Lexer IDs + SCLEX_CONTAINER SCLEX_NULL SCLEX_PYTHON SCLEX_CPP SCLEX_HTML + SCLEX_XML SCLEX_PERL SCLEX_SQL SCLEX_VB SCLEX_PROPERTIES + SCLEX_ERRORLIST SCLEX_MAKEFILE SCLEX_BATCH SCLEX_XCODE SCLEX_LATEX + SCLEX_LUA SCLEX_DIFF SCLEX_CONF SCLEX_PASCAL SCLEX_AVE SCLEX_ADA + SCLEX_LISP SCLEX_RUBY SCLEX_EIFFEL SCLEX_EIFFELKW SCLEX_TCL + SCLEX_NNCRONTAB SCLEX_BULLANT SCLEX_VBSCRIPT SCLEX_BAAN + SCLEX_MATLAB SCLEX_SCRIPTOL SCLEX_ASM SCLEX_CPPNOCASE + SCLEX_FORTRAN SCLEX_F77 SCLEX_CSS SCLEX_POV SCLEX_LOUT + SCLEX_ESCRIPT SCLEX_PS SCLEX_NSIS SCLEX_MMIXAL SCLEX_CLW + SCLEX_CLWNOCASE SCLEX_LOT SCLEX_YAML SCLEX_TEX SCLEX_METAPOST + SCLEX_POWERBASIC SCLEX_FORTH SCLEX_ERLANG SCLEX_OCTAVE SCLEX_MSSQL + SCLEX_VERILOG SCLEX_KIX SCLEX_GUI4CLI SCLEX_SPECMAN SCLEX_AU3 + SCLEX_APDL SCLEX_BASH SCLEX_ASN1 SCLEX_VHDL SCLEX_CAML + SCLEX_BLITZBASIC SCLEX_PUREBASIC SCLEX_HASKELL SCLEX_PHPSCRIPT + SCLEX_TADS3 SCLEX_REBOL SCLEX_SMALLTALK SCLEX_FLAGSHIP SCLEX_CSOUND + SCLEX_FREEBASIC SCLEX_INNOSETUP SCLEX_OPAL SCLEX_SPICE SCLEX_D + SCLEX_CMAKE SCLEX_GAP SCLEX_PLM SCLEX_PROGRESS SCLEX_ABAQUS + SCLEX_ASYMPTOTE SCLEX_R SCLEX_MAGIK SCLEX_POWERSHELL SCLEX_MYSQL + SCLEX_PO SCLEX_TAL SCLEX_COBOL SCLEX_TACL SCLEX_SORCUS + SCLEX_POWERPRO SCLEX_NIMROD SCLEX_SML SCLEX_MARKDOWN SCLEX_TXT2TAGS + SCLEX_A68K SCLEX_MODULA SCLEX_COFFEESCRIPT SCLEX_TCMD SCLEX_AVS + SCLEX_ECL SCLEX_OSCRIPT SCLEX_VISUALPROLOG SCLEX_LITERATEHASKELL + SCLEX_STTXT SCLEX_KVIRC SCLEX_RUST SCLEX_DMAP SCLEX_AS SCLEX_DMIS + SCLEX_REGISTRY SCLEX_BIBTEX SCLEX_SREC SCLEX_IHEX SCLEX_TEHEX + SCLEX_JSON SCLEX_EDIFACT SCLEX_INDENT SCLEX_MAXIMA SCLEX_STATA + SCLEX_SAS SCLEX_NIM SCLEX_CIL SCLEX_X12 SCLEX_DATAFLEX + SCLEX_HOLLYWOOD SCLEX_RAKU SCLEX_FSHARP SCLEX_JULIA SCLEX_ASCIIDOC + SCLEX_GDSCRIPT SCLEX_SCHEME + ;; Undo/Redo + SCI_UNDO SCI_CANUNDO SCI_EMPTYUNDOBUFFER SCI_REDO SCI_CANREDO + SCI_SETUNDOCOLLECTION SCI_GETUNDOCOLLECTION + SCI_BEGINUNDOACTION SCI_ENDUNDOACTION SCI_ADDUNDOACTION + ;; Search and replace + SCI_SEARCHANCHOR SCI_SEARCHNEXT SCI_SEARCHPREV SCI_FINDTEXT + SCI_SEARCHINTARGET SCI_REPLACETARGET SCI_REPLACETARGETRE + SCI_SETTARGETSTART SCI_GETTARGETSTART SCI_SETTARGETEND SCI_GETTARGETEND + SCI_TARGETFROMSELECTION SCI_TARGETWHOLEDOCUMENT + SCI_SETSEARCHFLAGS SCI_GETSEARCHFLAGS SCI_GETTARGETTEXT SCI_SETTARGETRANGE + SCFIND_NONE SCFIND_WHOLEWORD SCFIND_MATCHCASE SCFIND_WORDSTART + SCFIND_REGEXP SCFIND_POSIX SCFIND_CXX11REGEX + ;; Markers + SCI_MARKERDEFINE SCI_MARKERSETFORE SCI_MARKERSETBACK + SCI_MARKERSETBACKSELECTED SCI_MARKERENABLEHIGHLIGHT + SCI_MARKERADD SCI_MARKERDELETE SCI_MARKERDELETEALL + SCI_MARKERGET SCI_MARKERNEXT SCI_MARKERPREVIOUS + SCI_MARKERDEFINEPIXMAP SCI_MARKERADDSET SCI_MARKERSETALPHA + SCI_MARKERSETLAYER SCI_MARKERGETLAYER + SC_MARK_CIRCLE SC_MARK_ROUNDRECT SC_MARK_ARROW SC_MARK_SMALLRECT + SC_MARK_SHORTARROW SC_MARK_EMPTY SC_MARK_ARROWDOWN SC_MARK_MINUS + SC_MARK_PLUS SC_MARK_VLINE SC_MARK_LCORNER SC_MARK_TCORNER + SC_MARK_BOXPLUS SC_MARK_BOXPLUSCONNECTED SC_MARK_BOXMINUS + SC_MARK_BOXMINUSCONNECTED SC_MARK_LCORNERCURVE SC_MARK_TCORNERCURVE + SC_MARK_CIRCLEPLUS SC_MARK_CIRCLEPLUSCONNECTED + SC_MARK_CIRCLEMINUS SC_MARK_CIRCLEMINUSCONNECTED + SC_MARK_BACKGROUND SC_MARK_DOTDOTDOT SC_MARK_ARROWS SC_MARK_PIXMAP + SC_MARK_FULLRECT SC_MARK_LEFTRECT SC_MARK_AVAILABLE + SC_MARK_UNDERLINE SC_MARK_RGBAIMAGE SC_MARK_BOOKMARK + SC_MARK_VERTICALBOOKMARK + SC_MARKNUM_FOLDEREND SC_MARKNUM_FOLDEROPENMID SC_MARKNUM_FOLDERMIDTAIL + SC_MARKNUM_FOLDERTAIL SC_MARKNUM_FOLDERSUB SC_MARKNUM_FOLDER + SC_MARKNUM_FOLDEROPEN SC_MASK_FOLDERS + ;; Folding + SCI_SETFOLDLEVEL SCI_GETFOLDLEVEL SCI_GETLASTCHILD SCI_GETFOLDPARENT + SCI_SHOWLINES SCI_HIDELINES SCI_GETLINEVISIBLE SCI_GETALLLINESVISIBLE + SCI_SETFOLDEXPANDED SCI_GETFOLDEXPANDED SCI_TOGGLEFOLD + SCI_TOGGLEFOLDSHOWTEXT SCI_FOLDLINE SCI_FOLDCHILDREN SCI_EXPANDCHILDREN + SCI_FOLDALL SCI_CONTRACTEDFOLDNEXT SCI_SETAUTOMATICFOLD + SCI_GETAUTOMATICFOLD SCI_SETFOLDFLAGS SCI_ENSUREVISIBLE + SCI_ENSUREVISIBLEENFORCEPOLICY SCI_SETFOLDMARGINCOLOUR + SCI_SETFOLDMARGINHICOLOUR + SC_FOLDLEVELBASE SC_FOLDLEVELWHITEFLAG SC_FOLDLEVELHEADERFLAG + SC_FOLDLEVELNUMBERMASK + SC_FOLDACTION_CONTRACT SC_FOLDACTION_EXPAND SC_FOLDACTION_TOGGLE + SC_FOLDACTION_CONTRACT_EVERY_LEVEL + SC_AUTOMATICFOLD_NONE SC_AUTOMATICFOLD_SHOW SC_AUTOMATICFOLD_CLICK + SC_AUTOMATICFOLD_CHANGE + ;; Edge + SCI_SETEDGEMODE SCI_GETEDGEMODE SCI_SETEDGECOLUMN SCI_GETEDGECOLUMN + SCI_SETEDGECOLOUR SCI_GETEDGECOLOUR + EDGE_NONE EDGE_LINE EDGE_BACKGROUND EDGE_MULTILINE + ;; Scrolling + SCI_SETFIRSTVISIBLELINE SCI_GETFIRSTVISIBLELINE SCI_LINESCROLL + SCI_SCROLLCARET SCI_SCROLLRANGE SCI_SETXOFFSET SCI_GETXOFFSET + SCI_CHOOSECARETX SCI_SETXCARETPOLICY SCI_SETYCARETPOLICY + SCI_SETVISIBLEPOLICY SCI_SETHSCROLLBAR SCI_GETHSCROLLBAR + SCI_SETVSCROLLBAR SCI_GETVSCROLLBAR + CARET_SLOP CARET_STRICT CARET_JUMPS CARET_EVEN + ;; Indicators + SCI_INDICSETSTYLE SCI_INDICGETSTYLE SCI_INDICSETFORE SCI_INDICGETFORE + SCI_INDICSETUNDER SCI_INDICGETUNDER SCI_INDICSETHOVERSTYLE + SCI_INDICGETHOVERSTYLE SCI_INDICSETHOVERFORE SCI_INDICGETHOVERFORE + SCI_INDICSETFLAGS SCI_INDICGETFLAGS SCI_SETINDICATORCURRENT + SCI_GETINDICATORCURRENT SCI_SETINDICATORVALUE SCI_GETINDICATORVALUE + SCI_INDICATORFILLRANGE SCI_INDICATORCLEARRANGE SCI_INDICATORALLONFOR + SCI_INDICATORVALUEAT SCI_INDICATORSTART SCI_INDICATOREND + INDIC_PLAIN INDIC_SQUIGGLE INDIC_TT INDIC_DIAGONAL INDIC_STRIKE + INDIC_HIDDEN INDIC_BOX INDIC_ROUNDBOX INDIC_STRAIGHTBOX INDIC_DASH + INDIC_DOTS INDIC_SQUIGGLELOW INDIC_DOTBOX INDIC_SQUIGGLEPIXMAP + INDIC_COMPOSITIONTHICK INDIC_COMPOSITIONTHIN INDIC_FULLBOX + INDIC_TEXTFORE INDIC_POINT INDIC_POINTCHARACTER INDIC_GRADIENT + INDIC_GRADIENTCENTRE + ;; Autocomplete + SCI_AUTOCSHOW SCI_AUTOCCANCEL SCI_AUTOCACTIVE SCI_AUTOCPOSSTART + SCI_AUTOCCOMPLETE SCI_AUTOCSTOPS SCI_AUTOCSETSEPARATOR SCI_AUTOCGETSEPARATOR + SCI_AUTOCSELECT SCI_AUTOCGETCURRENT SCI_AUTOCGETCURRENTTEXT + SCI_AUTOCSETCANCELATSTART SCI_AUTOCGETCANCELATSTART + SCI_AUTOCSETFILLUPS SCI_AUTOCSETCHOOSESINGLE SCI_AUTOCGETCHOOSESINGLE + SCI_AUTOCSETIGNORECASE SCI_AUTOCGETIGNORECASE + SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR + SCI_AUTOCSETMULTI SCI_AUTOCGETMULTI SCI_AUTOCSETORDER SCI_AUTOCGETORDER + SCI_USERLISTSHOW SCI_AUTOCSETAUTOHIDE SCI_AUTOCGETAUTOHIDE + SCI_AUTOCSETOPTIONS SCI_AUTOCGETOPTIONS + SCI_AUTOCSETDROPRESTOFWORD SCI_AUTOCGETDROPRESTOFWORD + SCI_REGISTERIMAGE SCI_CLEARREGISTEREDIMAGES SCI_AUTOCGETTYPESEPARATOR + SCI_AUTOCSETTYPESEPARATOR SCI_AUTOCSETMAXWIDTH SCI_AUTOCGETMAXWIDTH + SCI_AUTOCSETMAXHEIGHT SCI_AUTOCGETMAXHEIGHT + SC_ORDER_PRESORTED SC_ORDER_PERFORMSORT SC_ORDER_CUSTOM + SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE + SC_MULTIAUTOC_ONCE SC_MULTIAUTOC_EACH + ;; Calltips + SCI_CALLTIPSHOW SCI_CALLTIPCANCEL SCI_CALLTIPACTIVE SCI_CALLTIPPOSSTART + SCI_CALLTIPSETPOSSTART SCI_CALLTIPSETHLT SCI_CALLTIPSETBACK + SCI_CALLTIPSETFORE SCI_CALLTIPSETFOREHLT SCI_CALLTIPUSESTYLE + SCI_CALLTIPSETPOSITION + ;; Margins + SCI_SETMARGINTYPEN SCI_GETMARGINTYPEN SCI_SETMARGINWIDTHN + SCI_GETMARGINWIDTHN SCI_SETMARGINMASKN SCI_GETMARGINMASKN + SCI_SETMARGINSENSITIVEN SCI_GETMARGINSENSITIVEN + SCI_SETMARGINCURSORN SCI_GETMARGINCURSORN + SCI_SETMARGINBACKN SCI_GETMARGINBACKN SCI_SETMARGINS SCI_GETMARGINS + SCI_MARGINSETTEXT SCI_MARGINGETTEXT SCI_MARGINSETSTYLE + SCI_MARGINGETSTYLE SCI_MARGINSETSTYLES SCI_MARGINGETSTYLES + SCI_MARGINTEXTCLEARALL SCI_MARGINSETSTYLEOFFSET SCI_MARGINGETSTYLEOFFSET + SCI_SETMARGINOPTIONS SCI_GETMARGINOPTIONS + SC_MARGIN_SYMBOL SC_MARGIN_NUMBER SC_MARGIN_BACK SC_MARGIN_FORE + SC_MARGIN_TEXT SC_MARGIN_RTEXT SC_MARGIN_COLOUR + ;; Brace matching + SCI_BRACEHIGHLIGHT SCI_BRACEHIGHLIGHTINDICATOR SCI_BRACEBADLIGHT + SCI_BRACEBADLIGHTINDICATOR SCI_BRACEMATCH SCI_BRACEMATCHNEXT + ;; Tab and indentation + SCI_SETTABWIDTH SCI_GETTABWIDTH SCI_SETTABMINIMUMWIDTH SCI_GETTABMINIMUMWIDTH + SCI_CLEARTABSTOPS SCI_ADDTABSTOP SCI_GETNEXTTABSTOP + SCI_SETUSETABS SCI_GETUSETABS SCI_SETINDENT SCI_GETINDENT + SCI_SETTABINDENTS SCI_GETTABINDENTS SCI_SETBACKSPACEUNINDENTS + SCI_GETBACKSPACEUNINDENTS SCI_SETLINEINDENTATION SCI_GETLINEINDENTATION + SCI_GETLINEINDENTPOSITION SCI_SETINDENTATIONGUIDES SCI_GETINDENTATIONGUIDES + SCI_SETHIGHLIGHTGUIDE SCI_GETHIGHLIGHTGUIDE + SC_IV_NONE SC_IV_REAL SC_IV_LOOKFORWARD SC_IV_LOOKBOTH + ;; EOL + SCI_SETEOLMODE SCI_GETEOLMODE SCI_CONVERTEOLS SCI_SETVIEWEOL SCI_GETVIEWEOL + SC_EOL_CRLF SC_EOL_CR SC_EOL_LF + ;; Whitespace + SCI_SETVIEWWS SCI_GETVIEWWS SCI_SETWHITESPACEFORE SCI_SETWHITESPACEBACK + SCI_SETWHITESPACESIZE SCI_GETWHITESPACESIZE + SCI_SETEXTRAASCENT SCI_GETEXTRAASCENT SCI_SETEXTRADESCENT SCI_GETEXTRADESCENT + SCWS_INVISIBLE SCWS_VISIBLEALWAYS SCWS_VISIBLEAFTERINDENT + SCWS_VISIBLEONLYININDENT + ;; Cursor + SCI_SETCURSOR SCI_GETCURSOR + SC_CURSORNORMAL SC_CURSORARROW SC_CURSORWAIT SC_CURSORREVERSEARROW + ;; Caret + SCI_SETCARETSTYLE SCI_GETCARETSTYLE SCI_SETCARETFORE SCI_GETCARETFORE + SCI_SETCARETWIDTH SCI_GETCARETWIDTH SCI_SETCARETPERIOD SCI_GETCARETPERIOD + SCI_SETCARETLINEVISIBLE SCI_GETCARETLINEVISIBLE + SCI_SETCARETLINEBACK SCI_GETCARETLINEBACK + SCI_SETCARETLINEBACKALPHA SCI_GETCARETLINEBACKALPHA + SCI_SETCARETLINELAYER SCI_GETCARETLINELAYER + SCI_SETCARETLINEFRAME SCI_GETCARETLINEFRAME + SCI_SETCARETSTICKY SCI_GETCARETSTICKY SCI_TOGGLECARETSTICKY + CARETSTYLE_INVISIBLE CARETSTYLE_LINE CARETSTYLE_BLOCK + CARETSTYLE_OVERSTRIKE_BAR CARETSTYLE_OVERSTRIKE_BLOCK + CARETSTYLE_CURSES CARETSTYLE_INS_MASK + SC_CARETSTICKY_OFF SC_CARETSTICKY_ON SC_CARETSTICKY_WHITESPACE + ;; Selection + SCI_SETSELFORE SCI_SETSELBACK SCI_GETSELALPHA SCI_SETSELALPHA + SCI_GETSELECTIONLAYER SCI_SETSELECTIONLAYER + SCI_SETSELEOLFILLED SCI_GETSELEOLFILLED SCI_HIDESELECTION + SCI_GETSELECTIONS SCI_CLEARSELECTIONS SCI_SETSELECTION SCI_ADDSELECTION + SCI_DROPSELECTIONN SCI_SETMAINSELECTION SCI_GETMAINSELECTION + SCI_SETSELECTIONNCARET SCI_GETSELECTIONNCARET + SCI_SETSELECTIONNCARETVIRTUALSPACE SCI_GETSELECTIONNCARETVIRTUALSPACE + SCI_SETSELECTIONNANCHOR SCI_GETSELECTIONNANCHOR + SCI_SETSELECTIONNANCHORVIRTUALSPACE SCI_GETSELECTIONNANCHORVIRTUALSPACE + SCI_SETSELECTIONNSTART SCI_GETSELECTIONNSTART + SCI_SETSELECTIONNEND SCI_GETSELECTIONNEND + SCI_SETRECTANGULARSELECTIONCARET SCI_GETRECTANGULARSELECTIONCARET + SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE + SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE + SCI_SETRECTANGULARSELECTIONANCHOR SCI_GETRECTANGULARSELECTIONANCHOR + SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE + SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE + SCI_SETVIRTUALSPACEOPTIONS SCI_GETVIRTUALSPACEOPTIONS + SCI_SETRECTANGULARSELECTIONMODIFIER SCI_GETRECTANGULARSELECTIONMODIFIER + SCI_SETADDITIONALSELFORE SCI_SETADDITIONALSELBACK + SCI_SETADDITIONALSELALPHA SCI_GETADDITIONALSELALPHA + SCI_SETADDITIONALCARETFORE SCI_GETADDITIONALCARETFORE + SCI_SETADDITIONALCARETSBLINK SCI_GETADDITIONALCARETSBLINK + SCI_SETADDITIONALCARETSVISIBLE SCI_GETADDITIONALCARETSVISIBLE + SCI_ROTATESELECTION SCI_SWAPMAINANCHORCARET + SCI_MULTIPLESELECTADDNEXT SCI_MULTIPLESELECTADDEACH + SCI_SETSELECTIONMODE SCI_GETSELECTIONMODE SCI_GETSELECTIONISRECTANGLE + SC_SEL_STREAM SC_SEL_RECTANGLE SC_SEL_LINES SC_SEL_THIN + ;; Notifications + SCN_STYLENEEDED SCN_CHARADDED SCN_SAVEPOINTREACHED SCN_SAVEPOINTLEFT + SCN_MODIFYATTEMPTRO SCN_KEY SCN_DOUBLECLICK SCN_UPDATEUI SCN_MODIFIED + SCN_MACRORECORD SCN_MARGINCLICK SCN_NEEDSHOWN SCN_PAINTED + SCN_USERLISTSELECTION SCN_URIDROPPED SCN_DWELLSTART SCN_DWELLEND + SCN_ZOOM SCN_HOTSPOTCLICK SCN_HOTSPOTDOUBLECLICK SCN_CALLTIPCLICK + SCN_AUTOCSELECTION SCN_INDICATORCLICK SCN_INDICATORRELEASE + SCN_AUTOCCANCELLED SCN_AUTOCCHARDELETED SCN_HOTSPOTRELEASECLICK + SCN_FOCUSIN SCN_FOCUSOUT SCN_AUTOCCOMPLETED SCN_MARGINRIGHTCLICK + SCN_AUTOCSELECTIONCHANGE + ;; Modification flags + SC_MOD_INSERTTEXT SC_MOD_DELETETEXT SC_MOD_CHANGESTYLE SC_MOD_CHANGEFOLD + SC_PERFORMED_USER SC_PERFORMED_UNDO SC_PERFORMED_REDO + SC_MULTISTEPUNDOREDO SC_LASTSTEPINUNDOREDO SC_MOD_CHANGEMARKER + SC_MOD_BEFOREINSERT SC_MOD_BEFOREDELETE SC_MULTILINEUNDOREDO + SC_STARTACTION SC_MOD_CHANGEINDICATOR SC_MOD_CHANGELINESTATE + SC_MOD_CHANGEMARGIN SC_MOD_CHANGEANNOTATION SC_MOD_CONTAINER + SC_MOD_LEXERSTATE SC_MOD_INSERTCHECK SC_MOD_CHANGETABSTOPS + SC_MOD_CHANGEEOLANNOTATION SC_MODEVENTMASKALL + ;; Update flags + SC_UPDATE_CONTENT SC_UPDATE_SELECTION SC_UPDATE_V_SCROLL SC_UPDATE_H_SCROLL + ;; Line wrap + SCI_SETWRAPMODE SCI_GETWRAPMODE SCI_SETWRAPVISUALFLAGS SCI_GETWRAPVISUALFLAGS + SCI_SETWRAPVISUALFLAGSLOCATION SCI_GETWRAPVISUALFLAGSLOCATION + SCI_SETWRAPSTARTINDENT SCI_GETWRAPSTARTINDENT + SCI_SETWRAPINDENTMODE SCI_GETWRAPINDENTMODE + SCI_SETLAYOUTCACHE SCI_GETLAYOUTCACHE + SCI_SETPOSITIONCACHE SCI_GETPOSITIONCACHE + SC_WRAP_NONE SC_WRAP_WORD SC_WRAP_CHAR SC_WRAP_WHITESPACE + SC_WRAPVISUALFLAG_NONE SC_WRAPVISUALFLAG_END SC_WRAPVISUALFLAG_START + SC_WRAPVISUALFLAG_MARGIN + SC_WRAPINDENT_FIXED SC_WRAPINDENT_SAME SC_WRAPINDENT_INDENT + SC_WRAPINDENT_DEEPINDENT + ;; Zoom + SCI_ZOOMIN SCI_ZOOMOUT SCI_SETZOOM SCI_GETZOOM + ;; Clipboard + SCI_CUT SCI_COPY SCI_PASTE SCI_CLEAR SCI_CANPASTE + SCI_COPYRANGE SCI_COPYTEXT SCI_COPYALLOWLINE + SCI_SETPASTECONVERTENDINGS SCI_GETPASTECONVERTENDINGS + ;; Error handling + SCI_SETSTATUS SCI_GETSTATUS + SC_STATUS_OK SC_STATUS_FAILURE SC_STATUS_BADALLOC + SC_STATUS_WARN_START SC_STATUS_WARN_REGEX + ;; Document management + SCI_GETDOCPOINTER SCI_SETDOCPOINTER SCI_CREATEDOCUMENT + SCI_ADDREFDOCUMENT SCI_RELEASEDOCUMENT SCI_GETDOCUMENTOPTIONS + SC_DOCUMENTOPTION_DEFAULT SC_DOCUMENTOPTION_STYLES_NONE + SC_DOCUMENTOPTION_TEXT_LARGE + ;; Printing + SCI_FORMATRANGE SCI_SETPRINTMAGNIFICATION SCI_GETPRINTMAGNIFICATION + SCI_SETPRINTCOLOURMODE SCI_GETPRINTCOLOURMODE + SCI_SETPRINTWRAPMODE SCI_GETPRINTWRAPMODE + SC_PRINT_NORMAL SC_PRINT_INVERTLIGHT SC_PRINT_BLACKONWHITE + SC_PRINT_COLOURONWHITE SC_PRINT_COLOURONWHITEDEFAULTBG SC_PRINT_SCREENCOLOURS + ;; Direct access + SCI_GETDIRECTFUNCTION SCI_GETDIRECTPOINTER SCI_GETDIRECTSTATUSFUNCTION + SCI_SETCHARACTERCATEGORYOPTIMIZATION SCI_GETCHARACTERCATEGORYOPTIMIZATION + ;; Virtual keys + SCK_DOWN SCK_UP SCK_LEFT SCK_RIGHT SCK_HOME SCK_END SCK_PRIOR SCK_NEXT + SCK_DELETE SCK_INSERT SCK_ESCAPE SCK_BACK SCK_TAB SCK_RETURN + SCK_ADD SCK_SUBTRACT SCK_DIVIDE SCK_WIN SCK_RWIN SCK_MENU + ;; Key modifiers + SCMOD_NORM SCMOD_SHIFT SCMOD_CTRL SCMOD_ALT SCMOD_SUPER SCMOD_META + ;; Read-only and modification + SCI_SETREADONLY SCI_GETREADONLY SCI_SETOVERTYPE SCI_GETOVERTYPE + SCI_SETSAVEPOINT SCI_GETMODIFY + ;; Word navigation + SCI_WORDSTARTPOSITION SCI_WORDENDPOSITION SCI_ISRANGEWORD + ;; Mouse dwell + SCI_SETMOUSEDWELLTIME SCI_GETMOUSEDWELLTIME + ;; Colors helper + rgb->scintilla scintilla->rgb + ;; Mouse event types + SCM_PRESS SCM_DRAG SCM_RELEASE) + + (import (chezscheme)) + + ;; ---- Text operations ---- + (define SCI_SETTEXT 2181) + (define SCI_GETTEXT 2182) + (define SCI_GETTEXTLENGTH 2183) + (define SCI_GETCHARACTERPOINTER 2520) + (define SCI_ADDTEXT 2001) + (define SCI_ADDSTYLEDTEXT 2002) + (define SCI_INSERTTEXT 2003) + (define SCI_CHANGEINSERTION 2672) + (define SCI_CLEARALL 2004) + (define SCI_DELETERANGE 2645) + (define SCI_CLEARDOCUMENTSTYLE 2005) + (define SCI_APPENDTEXT 2282) + (define SCI_REPLACESEL 2170) + (define SCI_TAB 2327) + (define SCI_BACKTAB 2328) + + ;; ---- Selection and navigation ---- + (define SCI_GETLENGTH 2006) + (define SCI_GETCHARAT 2007) + (define SCI_GETCURRENTPOS 2008) + (define SCI_GETANCHOR 2009) + (define SCI_SETANCHOR 2026) + (define SCI_SETCURRENTPOS 2141) + (define SCI_SETSEL 2160) + (define SCI_GETSELTEXT 2161) + (define SCI_SELECTALL 2013) + (define SCI_GOTOPOS 2025) + (define SCI_GOTOLINE 2024) + (define SCI_GETSELECTIONSTART 2143) + (define SCI_GETSELECTIONEND 2145) + (define SCI_SETSELECTIONSTART 2142) + (define SCI_SETSELECTIONEND 2144) + (define SCI_GETSELECTIONEMPTY 2650) + (define SCI_SETMOVEEXTENDSSELECTION 2719) + (define SCI_GETMOVEEXTENDSSELECTION 2720) + + ;; ---- Line operations ---- + (define SCI_GETLINE 2153) + (define SCI_GETLINECOUNT 2154) + (define SCI_LINEFROMPOSITION 2166) + (define SCI_POSITIONFROMLINE 2167) + (define SCI_GETLINEENDPOSITION 2136) + (define SCI_LINESONSCREEN 2370) + (define SCI_LINELENGTH 2350) + (define SCI_GETCOLUMN 2129) + (define SCI_FINDCOLUMN 2456) + (define SCI_POSITIONFROMPOINT 2022) + (define SCI_POSITIONFROMPOINTCLOSE 2023) + (define SCI_POINTXFROMPOSITION 2164) + (define SCI_POINTYFROMPOSITION 2165) + + ;; ---- Styling ---- + (define SCI_GETSTYLEAT 2010) + (define SCI_STYLECLEARALL 2050) + (define SCI_STYLESETFORE 2051) + (define SCI_STYLESETBACK 2052) + (define SCI_STYLESETBOLD 2053) + (define SCI_STYLESETITALIC 2054) + (define SCI_STYLESETSIZE 2055) + (define SCI_STYLESETFONT 2056) + (define SCI_STYLESETEOLFILLED 2057) + (define SCI_STYLERESETDEFAULT 2058) + (define SCI_STYLESETUNDERLINE 2059) + (define SCI_STYLEGETFORE 2481) + (define SCI_STYLEGETBACK 2482) + (define SCI_STYLEGETBOLD 2483) + (define SCI_STYLEGETITALIC 2484) + (define SCI_STYLEGETSIZE 2485) + (define SCI_STYLEGETFONT 2486) + (define SCI_STYLEGETUNDERLINE 2488) + (define SCI_STYLESETCASE 2060) + (define SCI_STYLEGETCASE 2489) + (define SCI_STYLESETCHARACTERSET 2066) + (define SCI_STYLESETVISIBLE 2074)