Преглед на файлове

feat: GtkSourceView 5 bindings (GtkSource namespace)

Add 49 hand-written modules covering the whole GtkSource 5 namespace
(gtksourceview 5.16), so the GtkSource* code-editor widgets are usable
from GNU Modula-2:

- buffer/view: GtkSourceBuffer, GtkSourceView
- language/style: GtkSourceLanguage(Manager), GtkSourceStyleScheme(Manager),
    GtkSourceStyle
- marks/tags: GtkSourceMark, GtkSourceMarkAttributes, GtkSourceTag
- gutters: GtkSourceGutter, GtkSourceGutterLines, GtkSourceGutterRenderer,
    GtkSourceGutterRendererText, GtkSourceGutterRendererPixbuf
- completion: GtkSourceCompletion, CompletionContext, CompletionCell,
    CompletionProposal, CompletionProvider, CompletionWords,
    CompletionSnippets
- snippets: GtkSourceSnippet, SnippetChunk, SnippetContext, SnippetManager
- search: GtkSourceSearchContext, GtkSourceSearchSettings
- regions: GtkSourceRegion, GtkSourceRegionIter
- file I/O: GtkSourceFile, GtkSourceFileLoader, GtkSourceFileSaver,
    GtkSourceEncoding
- misc: GtkSourceMap, GtkSourceSpaceDrawer, GtkSourceStyleSchemeChooser
    (+Button/Widget/Preview), GtkSourceHover(+Context/Display/Provider),
    GtkSourceIndenter, GtkSourcePrintCompositor, GtkSourceVimIMContext
- GtkSourceEnums, GtkSourceFunctions

Curation follows the libadwaita work: variadic functions are omitted,
callbacks are passed as ADDRESS (with _finish companions), value enum
returns use CARDINAL, and iterator parameters use GtkTextIter by VAR.

Also:
- tools/gir_verify.py + Makefile: verify the GtkSource-5 namespace too
- tests/test_sourceview.mod: buffer/view/managers/marks/gutter/map/
    drawer/search/region/snippet/completion/printing
- examples/sourceview.mod: a small GtkSourceView 5 editor
- Makefile/run_tests.sh: optional gtksourceview-5 detection
- README updated

Test suite: 44 passed. gir-verify: 0 unexpected (9052 identifiers).
Eric Streit преди 2 дни
родител
ревизия
7f74644691
променени са 55 файла, в които са добавени 3972 реда и са изтрити 17 реда
  1. 10 2
      Makefile
  2. 37 14
      README.md
  3. 100 0
      examples/sourceview.mod
  4. 194 0
      src/GtkSourceBuffer.def
  5. 79 0
      src/GtkSourceCompletion.def
  6. 71 0
      src/GtkSourceCompletionCell.def
  7. 96 0
      src/GtkSourceCompletionContext.def
  8. 23 0
      src/GtkSourceCompletionProposal.def
  9. 100 0
      src/GtkSourceCompletionProvider.def
  10. 21 0
      src/GtkSourceCompletionSnippets.def
  11. 34 0
      src/GtkSourceCompletionWords.def
  12. 54 0
      src/GtkSourceEncoding.def
  13. 142 0
      src/GtkSourceEnums.def
  14. 74 0
      src/GtkSourceFile.def
  15. 101 0
      src/GtkSourceFileLoader.def
  16. 116 0
      src/GtkSourceFileSaver.def
  17. 58 0
      src/GtkSourceFunctions.def
  18. 43 0
      src/GtkSourceGutter.def
  19. 127 0
      src/GtkSourceGutterLines.def
  20. 121 0
      src/GtkSourceGutterRenderer.def
  21. 76 0
      src/GtkSourceGutterRendererPixbuf.def
  22. 52 0
      src/GtkSourceGutterRendererText.def
  23. 27 0
      src/GtkSourceHover.def
  24. 42 0
      src/GtkSourceHoverContext.def
  25. 39 0
      src/GtkSourceHoverDisplay.def
  26. 32 0
      src/GtkSourceHoverProvider.def
  27. 37 0
      src/GtkSourceIndenter.def
  28. 68 0
      src/GtkSourceLanguage.def
  29. 69 0
      src/GtkSourceLanguageManager.def
  30. 27 0
      src/GtkSourceMap.def
  31. 34 0
      src/GtkSourceMark.def
  32. 90 0
      src/GtkSourceMarkAttributes.def
  33. 263 0
      src/GtkSourcePrintCompositor.def
  34. 84 0
      src/GtkSourceRegion.def
  35. 34 0
      src/GtkSourceRegionIter.def
  36. 159 0
      src/GtkSourceSearchContext.def
  37. 93 0
      src/GtkSourceSearchSettings.def
  38. 95 0
      src/GtkSourceSnippet.def
  39. 93 0
      src/GtkSourceSnippetChunk.def
  40. 71 0
      src/GtkSourceSnippetContext.def
  41. 61 0
      src/GtkSourceSnippetManager.def
  42. 69 0
      src/GtkSourceSpaceDrawer.def
  43. 23 0
      src/GtkSourceStyle.def
  44. 56 0
      src/GtkSourceStyleScheme.def
  45. 30 0
      src/GtkSourceStyleSchemeChooser.def
  46. 22 0
      src/GtkSourceStyleSchemeChooserButton.def
  47. 22 0
      src/GtkSourceStyleSchemeChooserWidget.def
  48. 69 0
      src/GtkSourceStyleSchemeManager.def
  49. 40 0
      src/GtkSourceStyleSchemePreview.def
  50. 20 0
      src/GtkSourceTag.def
  51. 241 0
      src/GtkSourceView.def
  52. 39 0
      src/GtkSourceVimIMContext.def
  53. 8 1
      tests/run_tests.sh
  54. 185 0
      tests/test_sourceview.mod
  55. 1 0
      tools/gir_verify.py

+ 10 - 2
Makefile

@@ -5,9 +5,12 @@ GTKCFG   := $(shell pkg-config --cflags gtk4 2>/dev/null)
 GTKLIBS  := $(shell pkg-config --libs gtk4 2>/dev/null || echo -lgtk-4)
 # libadwaita is optional; added to the flags when present.
 ADWLIBS  := $(shell pkg-config --libs libadwaita-1 2>/dev/null)
+# GtkSourceView 5 is optional too.
+SRCVLIBS := $(shell pkg-config --libs gtksourceview-5 2>/dev/null)
 GLLIBS   := $(shell pkg-config --libs gl 2>/dev/null)
 GTKCFG   += $(shell pkg-config --cflags libadwaita-1 2>/dev/null)
-GTKLIBS  += $(ADWLIBS) $(GLLIBS)
+GTKCFG   += $(shell pkg-config --cflags gtksourceview-5 2>/dev/null)
+GTKLIBS  += $(ADWLIBS) $(SRCVLIBS) $(GLLIBS)
 GM2FLAGS ?= -fiso
 GIR      ?= Gtk-4.0
 GIR_DIR  ?= /usr/share/gir-1.0
@@ -29,6 +32,11 @@ TESTS    += test_adw
 EXAMPLES += adw adw_widgets adw_views
 endif
 
+# Include the GtkSourceView example when gtksourceview-5 is installed.
+ifneq ($(SRCVLIBS),)
+EXAMPLES += sourceview
+endif
+
 .PHONY: all tests examples demos check clean gir gir-check gir-verify
 
 all: tests examples demos
@@ -96,7 +104,7 @@ gir-check:
 	./tools/run_gir_check.sh
 
 # Check that every generated identifier exists in the installed library.
-GIR_VERIFY ?= Gtk-4.0 GLib-2.0 Gio-2.0 Adw-1
+GIR_VERIFY ?= Gtk-4.0 GLib-2.0 Gio-2.0 Adw-1 GtkSource-5
 gir-verify:
 	set -e; for ns in $(GIR_VERIFY); do \
 	    python3 tools/gir_verify.py $$ns --gir-dir $(GIR_DIR); \

+ 37 - 14
README.md

@@ -14,22 +14,21 @@ Verified with `gm2` 16.0.1 (experimental), GTK 4.18.6 and libadwaita 1.7.6.
 
 ## Features
 
-- **224 hand-written binding modules** across GLib, GObject, Gio, GTK4
-  and libadwaita — windows, widgets, inputs, containers, model-backed
-  views, actions/menus/accelerators, dialogs, CSS, drawing (Cairo/Pango),
-  rich text, gestures, drag-and-drop, media, OpenGL, printing,
-  expressions/constraints/shortcuts, settings, and the **complete GNOME
-  (libadwaita) widget set** — every `Adw*` class, including view stacks,
-  switchers, navigation, tabs, carousels, breakpoints, adaptive
-  containers, dialogs and animations.
+- **273 hand-written binding modules** across GLib, GObject, Gio, GTK4,
+  libadwaita and GtkSourceView 5 — windows, widgets, inputs, containers,
+  model-backed views, actions/menus/accelerators, dialogs, CSS, drawing
+  (Cairo/Pango), rich text, gestures, drag-and-drop, media, OpenGL,
+  printing, expressions/constraints/shortcuts, settings, the **complete
+  GNOME (libadwaita) widget set** — every `Adw*` class — and the
+  **GtkSourceView 5** code-editor widgets.
 - **Pure-Modula-2 helpers**: `GtkUtils` (string/number conversion,
   `Connect`, `SetAccel`, ownership and `GError` helpers) and
   `GtkClosures` (per-connection signal contexts with cleanup).
-- **43 tests**, **28 runnable examples**, and an **m2 gtk-demo**
+- **44 tests**, **29 runnable examples**, and an **m2 gtk-demo**
   browser (`demos/`) modelled on GTK's own `gtk4-demo`.
 - **Generator + verifier**: `tools/gir2def.py` turns a `.gir` file into
   `.def` files; `tools/gir_verify.py` checks every generated identifier
-  against the installed library. Verified clean across 8602 identifiers.
+  against the installed library. Verified clean across 9052 identifiers.
 
 ## Requirements
 
@@ -38,6 +37,10 @@ Verified with `gm2` 16.0.1 (experimental), GTK 4.18.6 and libadwaita 1.7.6.
 - libadwaita development files (`pkg-config --cflags --libs libadwaita-1`,
   tested 1.7.6) — **optional**; enables the `Adw*` modules, `test_adw`
   and the `adw` example. The build detects them automatically.
+- GtkSourceView 5 development files
+  (`pkg-config --cflags --libs gtksourceview-5`, tested 5.16.0) —
+  **optional**; enables the `GtkSource*` modules, `test_sourceview` and
+  the `sourceview` example.
 
 ```sh
 export PATH=$HOME/bin/Modula2/Gm2/bin:$PATH
@@ -136,6 +139,7 @@ gm2 -fiso -Isrc -Ilib myprog.mod \
 | `adw` | libadwaita preferences app (toolbar view, rows, toast, about) |
 | `adw_widgets` | view-switcher title, view stack, banner, squeezer, wrap box, avatar, spinner |
 | `adw_views` | tabbed window: `AdwTabView`/`AdwTabBar`/`AdwTabButton`/`AdwTabOverview` |
+| `sourceview` | GtkSourceView 5 code editor (highlighting, line numbers, style scheme) |
 
 ## m2 gtk-demo (`demos/`)
 
@@ -260,6 +264,25 @@ make demos
 | `AdwAboutWindow`, `AdwMessageDialog` | about and message dialogs |
 | `AdwEnums` | shared Adw enums (view switcher, animation/easing, flap/leaflet, dialog, tab shortcuts, …) |
 
+### GtkSourceView 5
+
+| Module | Contents |
+|---|---|
+| `GtkSourceBuffer`, `GtkSourceView` | source buffer and view (highlighting, line numbers, marks, gutter) |
+| `GtkSourceLanguage`, `GtkSourceLanguageManager` | syntax-language definitions and lookup |
+| `GtkSourceStyleScheme`, `GtkSourceStyleSchemeManager`, `GtkSourceStyle` | colour schemes |
+| `GtkSourceMark`, `GtkSourceMarkAttributes`, `GtkSourceTag` | source marks and tags |
+| `GtkSourceGutter`, `GtkSourceGutterLines`, `GtkSourceGutterRenderer`, `GtkSourceGutterRendererText`, `GtkSourceGutterRendererPixbuf` | gutters and renderers |
+| `GtkSourceCompletion`, `GtkSourceCompletionContext`, `GtkSourceCompletionCell`, `GtkSourceCompletionProposal`, `GtkSourceCompletionProvider`, `GtkSourceCompletionWords`, `GtkSourceCompletionSnippets` | code completion |
+| `GtkSourceSnippet`, `GtkSourceSnippetChunk`, `GtkSourceSnippetContext`, `GtkSourceSnippetManager` | snippets |
+| `GtkSourceSearchContext`, `GtkSourceSearchSettings` | search and replace |
+| `GtkSourceRegion`, `GtkSourceRegionIter` | subregions of a buffer |
+| `GtkSourceFile`, `GtkSourceFileLoader`, `GtkSourceFileSaver`, `GtkSourceEncoding` | file I/O and encodings |
+| `GtkSourceMap`, `GtkSourceSpaceDrawer`, `GtkSourceStyleSchemeChooser`, `GtkSourceStyleSchemeChooserButton`, `GtkSourceStyleSchemeChooserWidget`, `GtkSourceStyleSchemePreview` | minimap, whitespace and scheme choosers |
+| `GtkSourceHover`, `GtkSourceHoverContext`, `GtkSourceHoverDisplay`, `GtkSourceHoverProvider` | hover providers |
+| `GtkSourceIndenter`, `GtkSourcePrintCompositor`, `GtkSourceVimIMContext` | indentation, printing and the Vim input method |
+| `GtkSourceEnums`, `GtkSourceFunctions` | shared enums and namespace functions |
+
 ### Helpers and the C shim (`lib/`)
 
 | Module | Contents |
@@ -323,10 +346,10 @@ make gir-verify           # check every identifier exists in the library
 
 It produces one module per class/interface/record, namespace functions in
 `<Namespace>Functions.def`, and enums in `<Namespace>Enums.def`; procedure
-names are the exact GIR `c:identifier`. Across Gtk/GLib/Gio/Adw, 633
-generated modules parse under `gm2 -fiso` and all 8602 identifiers resolve
-in the installed libraries. Output goes to `gen/` (git-ignored) and is
-meant to be cherry-picked, not to replace `src/`. See `tools/README.md`
+names are the exact GIR `c:identifier`. Across Gtk/GLib/Gio/Adw/GtkSource,
+682 generated modules parse under `gm2 -fiso` and all 9052 identifiers
+resolve in the installed libraries. Output goes to `gen/` (git-ignored) and
+is meant to be cherry-picked, not to replace `src/`. See `tools/README.md`
 for the type mapping and limits.
 
 ## Repository layout

+ 100 - 0
examples/sourceview.mod

@@ -0,0 +1,100 @@
+MODULE sourceview ;
+
+(*
+   m2-GTK4 example - a small source-code editor built from
+   GtkSourceView 5:
+
+     GtkApplicationWindow > GtkScrolledWindow > GtkSourceView
+       driven by a GtkSourceBuffer with the "C" language definition and
+       the "Adwaita" style scheme, line numbers, current-line highlight
+       and a 4-column tab width.
+
+   Build:  make examples
+   Run:    ./build/examples/sourceview
+*)
+
+FROM Gio IMPORT g_application_run;
+FROM GtkApplication IMPORT gtk_application_new;
+FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_title,
+   gtk_window_set_default_size, gtk_window_set_child, gtk_window_present;
+FROM GtkScrolledWindow IMPORT gtk_scrolled_window_new,
+   gtk_scrolled_window_set_child;
+FROM GtkWidget IMPORT gtk_widget_set_vexpand;
+FROM GtkTextBuffer IMPORT gtk_text_buffer_set_text;
+FROM GtkUtils IMPORT Connect;
+FROM GtkSourceFunctions IMPORT gtk_source_init;
+FROM GtkSourceBuffer IMPORT gtk_source_buffer_new,
+   gtk_source_buffer_set_language, gtk_source_buffer_set_style_scheme;
+FROM GtkSourceLanguageManager IMPORT gtk_source_language_manager_get_default,
+   gtk_source_language_manager_get_language;
+FROM GtkSourceStyleSchemeManager IMPORT
+   gtk_source_style_scheme_manager_get_default,
+   gtk_source_style_scheme_manager_get_scheme;
+FROM GtkSourceView IMPORT gtk_source_view_new_with_buffer,
+   gtk_source_view_set_show_line_numbers,
+   gtk_source_view_set_highlight_current_line, gtk_source_view_set_tab_width;
+FROM SYSTEM IMPORT ADDRESS, ADR;
+FROM libc IMPORT printf;
+
+CONST
+   AppId = "org.example.m2gtk4.SourceView";
+
+   Sample =
+"/* hello.c - a tiny C program */\n" +
+"#include <stdio.h>\n" +
+"\n" +
+"int main (int argc, char **argv)\n" +
+"{\n" +
+"  for (int i = 0; i < 3; i++)\n" +
+"    printf ('Hello, GNU Modula-2 + GtkSourceView! (%d)\\n', i);\n" +
+"  return 0;\n" +
+"}\n";
+
+PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
+VAR
+   window, sw, view, buffer, lang, scheme: ADDRESS;
+BEGIN
+   buffer := gtk_source_buffer_new(NIL);
+
+   lang := gtk_source_language_manager_get_language
+              (gtk_source_language_manager_get_default(), "c");
+   IF lang # NIL THEN
+      gtk_source_buffer_set_language(buffer, lang)
+   END;
+
+   scheme := gtk_source_style_scheme_manager_get_scheme
+                (gtk_source_style_scheme_manager_get_default(), "Adwaita");
+   IF scheme # NIL THEN
+      gtk_source_buffer_set_style_scheme(buffer, scheme)
+   END;
+
+   gtk_text_buffer_set_text(buffer, Sample, -1);
+
+   view := gtk_source_view_new_with_buffer(buffer);
+   gtk_source_view_set_show_line_numbers(view, 1);
+   gtk_source_view_set_highlight_current_line(view, 1);
+   gtk_source_view_set_tab_width(view, 4);
+
+   sw := gtk_scrolled_window_new();
+   gtk_scrolled_window_set_child(sw, view);
+   gtk_widget_set_vexpand(sw, 1);
+
+   window := gtk_application_window_new(application);
+   gtk_window_set_title(window, "m2-GTK4 - GtkSourceView");
+   gtk_window_set_default_size(window, 640, 480);
+   gtk_window_set_child(window, sw);
+   gtk_window_present(window)
+END OnActivate;
+
+VAR
+   app: ADDRESS;
+BEGIN
+   gtk_source_init();
+   app := gtk_application_new(AppId, 0);
+   IF app = NIL THEN
+      printf("gtk_application_new failed\n");
+      HALT(1)
+   END;
+   Connect(app, "activate", ADR(OnActivate), NIL);
+   g_application_run(app, 0, NIL)
+END sourceview.

+ 194 - 0
src/GtkSourceBuffer.def

@@ -0,0 +1,194 @@
+DEFINITION MODULE FOR "C" GtkSourceBuffer ;
+
+(*
+   m2-GTK4 - GtkSourceBuffer: a GtkTextBuffer with syntax highlighting,
+   source marks and context classes.  Mapped onto
+   <gtksourceview/gtksourcebuffer.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+FROM GtkSourceEnums IMPORT GtkSourceChangeCaseType, GtkSourceSortFlags;
+
+EXPORT UNQUALIFIED
+   GtkSourceBuffer,
+   gtk_source_buffer_new, gtk_source_buffer_new_with_language,
+   gtk_source_buffer_get_language, gtk_source_buffer_set_language,
+   gtk_source_buffer_get_style_scheme, gtk_source_buffer_set_style_scheme,
+   gtk_source_buffer_get_highlight_syntax,
+   gtk_source_buffer_set_highlight_syntax,
+   gtk_source_buffer_get_highlight_matching_brackets,
+   gtk_source_buffer_set_highlight_matching_brackets,
+   gtk_source_buffer_get_implicit_trailing_newline,
+   gtk_source_buffer_set_implicit_trailing_newline,
+   gtk_source_buffer_get_loading,
+   gtk_source_buffer_change_case, gtk_source_buffer_join_lines,
+   gtk_source_buffer_sort_lines, gtk_source_buffer_ensure_highlight,
+   gtk_source_buffer_create_source_mark,
+   gtk_source_buffer_get_source_marks_at_iter,
+   gtk_source_buffer_get_source_marks_at_line,
+   gtk_source_buffer_remove_source_marks,
+   gtk_source_buffer_forward_iter_to_source_mark,
+   gtk_source_buffer_backward_iter_to_source_mark,
+   gtk_source_buffer_iter_has_context_class,
+   gtk_source_buffer_iter_forward_to_context_class_toggle,
+   gtk_source_buffer_iter_backward_to_context_class_toggle,
+   gtk_source_buffer_get_context_classes_at_iter;
+
+TYPE
+   GtkSourceBuffer = ADDRESS;
+
+(* GtkSourceBuffer *gtk_source_buffer_new(GtkTextTagTable *table) *)
+PROCEDURE gtk_source_buffer_new (table: ADDRESS) : GtkSourceBuffer;
+
+(* GtkSourceBuffer *gtk_source_buffer_new_with_language(
+                       GtkSourceLanguage *language) *)
+PROCEDURE gtk_source_buffer_new_with_language (language: ADDRESS)
+                                               : GtkSourceBuffer;
+
+(* GtkSourceLanguage *gtk_source_buffer_get_language(GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_buffer_get_language (buffer: GtkSourceBuffer) : ADDRESS;
+
+(* void gtk_source_buffer_set_language(GtkSourceBuffer *buffer,
+                                       GtkSourceLanguage *language) *)
+PROCEDURE gtk_source_buffer_set_language (buffer: GtkSourceBuffer;
+                                          language: ADDRESS);
+
+(* GtkSourceStyleScheme *gtk_source_buffer_get_style_scheme(
+                           GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_buffer_get_style_scheme (buffer: GtkSourceBuffer)
+                                              : ADDRESS;
+
+(* void gtk_source_buffer_set_style_scheme(GtkSourceBuffer *buffer,
+                                            GtkSourceStyleScheme *scheme) *)
+PROCEDURE gtk_source_buffer_set_style_scheme (buffer: GtkSourceBuffer;
+                                              scheme: ADDRESS);
+
+(* gboolean gtk_source_buffer_get_highlight_syntax(GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_buffer_get_highlight_syntax (buffer: GtkSourceBuffer)
+                                                  : INTEGER;
+
+(* void gtk_source_buffer_set_highlight_syntax(GtkSourceBuffer *buffer,
+                                                gboolean highlight) *)
+PROCEDURE gtk_source_buffer_set_highlight_syntax (buffer: GtkSourceBuffer;
+                                                  highlight: INTEGER);
+
+(* gboolean gtk_source_buffer_get_highlight_matching_brackets(
+              GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_buffer_get_highlight_matching_brackets
+              (buffer: GtkSourceBuffer) : INTEGER;
+
+(* void gtk_source_buffer_set_highlight_matching_brackets(
+          GtkSourceBuffer *buffer, gboolean highlight) *)
+PROCEDURE gtk_source_buffer_set_highlight_matching_brackets
+              (buffer: GtkSourceBuffer; highlight: INTEGER);
+
+(* gboolean gtk_source_buffer_get_implicit_trailing_newline(
+              GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_buffer_get_implicit_trailing_newline
+              (buffer: GtkSourceBuffer) : INTEGER;
+
+(* void gtk_source_buffer_set_implicit_trailing_newline(
+          GtkSourceBuffer *buffer, gboolean implicit_trailing_newline) *)
+PROCEDURE gtk_source_buffer_set_implicit_trailing_newline
+              (buffer: GtkSourceBuffer; implicit_trailing_newline: INTEGER);
+
+(* gboolean gtk_source_buffer_get_loading(GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_buffer_get_loading (buffer: GtkSourceBuffer) : INTEGER;
+
+(* void gtk_source_buffer_change_case(GtkSourceBuffer *buffer,
+                                      GtkSourceChangeCaseType case_type,
+                                      GtkTextIter *start, GtkTextIter *end) *)
+PROCEDURE gtk_source_buffer_change_case (buffer: GtkSourceBuffer;
+                                         case_type: GtkSourceChangeCaseType;
+                                         VAR start, theEnd: GtkTextIter);
+
+(* void gtk_source_buffer_join_lines(GtkSourceBuffer *buffer,
+                                     GtkTextIter *start, GtkTextIter *end) *)
+PROCEDURE gtk_source_buffer_join_lines (buffer: GtkSourceBuffer;
+                                        VAR start, theEnd: GtkTextIter);
+
+(* void gtk_source_buffer_sort_lines(GtkSourceBuffer *buffer,
+                                     GtkTextIter *start, GtkTextIter *end,
+                                     GtkSourceSortFlags flags, gint column) *)
+PROCEDURE gtk_source_buffer_sort_lines (buffer: GtkSourceBuffer;
+                                        VAR start, theEnd: GtkTextIter;
+                                        flags: GtkSourceSortFlags;
+                                        column: INTEGER);
+
+(* void gtk_source_buffer_ensure_highlight(GtkSourceBuffer *buffer,
+                                           GtkTextIter *start,
+                                           GtkTextIter *end) *)
+PROCEDURE gtk_source_buffer_ensure_highlight (buffer: GtkSourceBuffer;
+                                              VAR start, theEnd: GtkTextIter);
+
+(* GtkSourceMark *gtk_source_buffer_create_source_mark(
+                     GtkSourceBuffer *buffer, const char *name,
+                     const char *category, GtkTextIter *where) *)
+PROCEDURE gtk_source_buffer_create_source_mark (buffer: GtkSourceBuffer;
+                                                name, category: ARRAY OF CHAR;
+                                                VAR where: GtkTextIter)
+                                               : ADDRESS;
+
+(* GSList *gtk_source_buffer_get_source_marks_at_iter(
+             GtkSourceBuffer *buffer, GtkTextIter *iter,
+             const char *category) *)
+PROCEDURE gtk_source_buffer_get_source_marks_at_iter
+              (buffer: GtkSourceBuffer; VAR iter: GtkTextIter;
+               category: ARRAY OF CHAR) : ADDRESS;
+
+(* GSList *gtk_source_buffer_get_source_marks_at_line(
+             GtkSourceBuffer *buffer, gint line, const char *category) *)
+PROCEDURE gtk_source_buffer_get_source_marks_at_line
+              (buffer: GtkSourceBuffer; line: INTEGER;
+               category: ARRAY OF CHAR) : ADDRESS;
+
+(* void gtk_source_buffer_remove_source_marks(GtkSourceBuffer *buffer,
+                                              GtkTextIter *start,
+                                              GtkTextIter *end,
+                                              const char *category) *)
+PROCEDURE gtk_source_buffer_remove_source_marks (buffer: GtkSourceBuffer;
+                                                 VAR start, theEnd: GtkTextIter;
+                                                 category: ARRAY OF CHAR);
+
+(* gboolean gtk_source_buffer_forward_iter_to_source_mark(
+              GtkSourceBuffer *buffer, GtkTextIter *iter,
+              const char *category) *)
+PROCEDURE gtk_source_buffer_forward_iter_to_source_mark
+              (buffer: GtkSourceBuffer; VAR iter: GtkTextIter;
+               category: ARRAY OF CHAR) : INTEGER;
+
+(* gboolean gtk_source_buffer_backward_iter_to_source_mark(
+              GtkSourceBuffer *buffer, GtkTextIter *iter,
+              const char *category) *)
+PROCEDURE gtk_source_buffer_backward_iter_to_source_mark
+              (buffer: GtkSourceBuffer; VAR iter: GtkTextIter;
+               category: ARRAY OF CHAR) : INTEGER;
+
+(* gboolean gtk_source_buffer_iter_has_context_class(
+              GtkSourceBuffer *buffer, GtkTextIter *iter,
+              const char *context_class) *)
+PROCEDURE gtk_source_buffer_iter_has_context_class
+              (buffer: GtkSourceBuffer; VAR iter: GtkTextIter;
+               context_class: ARRAY OF CHAR) : INTEGER;
+
+(* gboolean gtk_source_buffer_iter_forward_to_context_class_toggle(
+              GtkSourceBuffer *buffer, GtkTextIter *iter,
+              const char *context_class) *)
+PROCEDURE gtk_source_buffer_iter_forward_to_context_class_toggle
+              (buffer: GtkSourceBuffer; VAR iter: GtkTextIter;
+               context_class: ARRAY OF CHAR) : INTEGER;
+
+(* gboolean gtk_source_buffer_iter_backward_to_context_class_toggle(
+              GtkSourceBuffer *buffer, GtkTextIter *iter,
+              const char *context_class) *)
+PROCEDURE gtk_source_buffer_iter_backward_to_context_class_toggle
+              (buffer: GtkSourceBuffer; VAR iter: GtkTextIter;
+               context_class: ARRAY OF CHAR) : INTEGER;
+
+(* char **gtk_source_buffer_get_context_classes_at_iter(
+            GtkSourceBuffer *buffer, GtkTextIter *iter) *)
+PROCEDURE gtk_source_buffer_get_context_classes_at_iter
+              (buffer: GtkSourceBuffer; VAR iter: GtkTextIter) : ADDRESS;
+
+END GtkSourceBuffer.

+ 79 - 0
src/GtkSourceCompletion.def

@@ -0,0 +1,79 @@
+DEFINITION MODULE FOR "C" GtkSourceCompletion ;
+
+(*
+   m2-GTK4 - GtkSourceCompletion: the completion controller of a
+   GtkSourceView.  Mapped onto <gtksourceview/gtksourcecompletion.h>.
+
+   Obtain it from gtk_source_view_get_completion(); it has no public
+   constructor.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceCompletion,
+   gtk_source_completion_add_provider, gtk_source_completion_remove_provider,
+   gtk_source_completion_show, gtk_source_completion_hide,
+   gtk_source_completion_block_interactive,
+   gtk_source_completion_unblock_interactive,
+   gtk_source_completion_get_view, gtk_source_completion_get_buffer,
+   gtk_source_completion_get_page_size, gtk_source_completion_set_page_size,
+   gtk_source_completion_fuzzy_match, gtk_source_completion_fuzzy_highlight;
+
+TYPE
+   GtkSourceCompletion = ADDRESS;
+
+(* void gtk_source_completion_add_provider(GtkSourceCompletion *self,
+                                            GtkSourceCompletionProvider *provider) *)
+PROCEDURE gtk_source_completion_add_provider (self: GtkSourceCompletion;
+                                              provider: ADDRESS);
+
+(* void gtk_source_completion_remove_provider(
+          GtkSourceCompletion *self, GtkSourceCompletionProvider *provider) *)
+PROCEDURE gtk_source_completion_remove_provider (self: GtkSourceCompletion;
+                                                 provider: ADDRESS);
+
+(* void gtk_source_completion_show(GtkSourceCompletion *self) *)
+PROCEDURE gtk_source_completion_show (self: GtkSourceCompletion);
+
+(* void gtk_source_completion_hide(GtkSourceCompletion *self) *)
+PROCEDURE gtk_source_completion_hide (self: GtkSourceCompletion);
+
+(* void gtk_source_completion_block_interactive(GtkSourceCompletion *self) *)
+PROCEDURE gtk_source_completion_block_interactive (self: GtkSourceCompletion);
+
+(* void gtk_source_completion_unblock_interactive(GtkSourceCompletion *self) *)
+PROCEDURE gtk_source_completion_unblock_interactive
+              (self: GtkSourceCompletion);
+
+(* GtkSourceView *gtk_source_completion_get_view(GtkSourceCompletion *self) *)
+PROCEDURE gtk_source_completion_get_view (self: GtkSourceCompletion)
+                                          : ADDRESS;
+
+(* GtkSourceBuffer *gtk_source_completion_get_buffer(GtkSourceCompletion *self) *)
+PROCEDURE gtk_source_completion_get_buffer (self: GtkSourceCompletion)
+                                            : ADDRESS;
+
+(* guint gtk_source_completion_get_page_size(GtkSourceCompletion *self) *)
+PROCEDURE gtk_source_completion_get_page_size (self: GtkSourceCompletion)
+                                               : CARDINAL;
+
+(* void gtk_source_completion_set_page_size(GtkSourceCompletion *self,
+                                            guint page_size) *)
+PROCEDURE gtk_source_completion_set_page_size (self: GtkSourceCompletion;
+                                               page_size: CARDINAL);
+
+(* gboolean gtk_source_completion_fuzzy_match(const char *haystack,
+                                              const char *casefold_needle,
+                                              guint *priority) *)
+PROCEDURE gtk_source_completion_fuzzy_match (haystack: ARRAY OF CHAR;
+                                             casefold_needle: ARRAY OF CHAR;
+                                             VAR priority: CARDINAL) : INTEGER;
+
+(* char *gtk_source_completion_fuzzy_highlight(const char *haystack,
+                                               const char *casefold_query) *)
+PROCEDURE gtk_source_completion_fuzzy_highlight (haystack: ARRAY OF CHAR;
+                                                 casefold_query: ARRAY OF CHAR)
+                                                : ADDRESS;
+
+END GtkSourceCompletion.

+ 71 - 0
src/GtkSourceCompletionCell.def

@@ -0,0 +1,71 @@
+DEFINITION MODULE FOR "C" GtkSourceCompletionCell ;
+
+(*
+   m2-GTK4 - GtkSourceCompletionCell: one cell in the completion popup.
+   Mapped onto <gtksourceview/gtksourcecompletioncell.h>.
+
+   The column uses the GtkSourceCompletionColumn values.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceCompletionCell,
+   gtk_source_completion_cell_get_column, gtk_source_completion_cell_get_widget,
+   gtk_source_completion_cell_set_widget, gtk_source_completion_cell_set_text,
+   gtk_source_completion_cell_set_markup, gtk_source_completion_cell_set_gicon,
+   gtk_source_completion_cell_set_icon_name,
+   gtk_source_completion_cell_set_paintable,
+   gtk_source_completion_cell_set_text_with_attributes;
+
+TYPE
+   GtkSourceCompletionCell = ADDRESS;
+
+(* GtkSourceCompletionColumn gtk_source_completion_cell_get_column(
+        GtkSourceCompletionCell *self) *)
+PROCEDURE gtk_source_completion_cell_get_column
+              (self: GtkSourceCompletionCell) : CARDINAL;
+
+(* GtkWidget *gtk_source_completion_cell_get_widget(
+               GtkSourceCompletionCell *self) *)
+PROCEDURE gtk_source_completion_cell_get_widget
+              (self: GtkSourceCompletionCell) : ADDRESS;
+
+(* void gtk_source_completion_cell_set_widget(GtkSourceCompletionCell *self,
+                                              GtkWidget *child) *)
+PROCEDURE gtk_source_completion_cell_set_widget
+              (self: GtkSourceCompletionCell; child: ADDRESS);
+
+(* void gtk_source_completion_cell_set_text(GtkSourceCompletionCell *self,
+                                            const char *text) *)
+PROCEDURE gtk_source_completion_cell_set_text (self: GtkSourceCompletionCell;
+                                               text: ARRAY OF CHAR);
+
+(* void gtk_source_completion_cell_set_markup(GtkSourceCompletionCell *self,
+                                              const char *markup) *)
+PROCEDURE gtk_source_completion_cell_set_markup
+              (self: GtkSourceCompletionCell; markup: ARRAY OF CHAR);
+
+(* void gtk_source_completion_cell_set_gicon(GtkSourceCompletionCell *self,
+                                             GIcon *gicon) *)
+PROCEDURE gtk_source_completion_cell_set_gicon (self: GtkSourceCompletionCell;
+                                                gicon: ADDRESS);
+
+(* void gtk_source_completion_cell_set_icon_name(
+          GtkSourceCompletionCell *self, const char *icon_name) *)
+PROCEDURE gtk_source_completion_cell_set_icon_name
+              (self: GtkSourceCompletionCell; icon_name: ARRAY OF CHAR);
+
+(* void gtk_source_completion_cell_set_paintable(
+          GtkSourceCompletionCell *self, GdkPaintable *paintable) *)
+PROCEDURE gtk_source_completion_cell_set_paintable
+              (self: GtkSourceCompletionCell; paintable: ADDRESS);
+
+(* void gtk_source_completion_cell_set_text_with_attributes(
+          GtkSourceCompletionCell *self, const char *text,
+          GtkSourceAttributes *attrs) *)
+PROCEDURE gtk_source_completion_cell_set_text_with_attributes
+              (self: GtkSourceCompletionCell; text: ARRAY OF CHAR;
+               attrs: ADDRESS);
+
+END GtkSourceCompletionCell.

+ 96 - 0
src/GtkSourceCompletionContext.def

@@ -0,0 +1,96 @@
+DEFINITION MODULE FOR "C" GtkSourceCompletionContext ;
+
+(*
+   m2-GTK4 - GtkSourceCompletionContext: the context passed to
+   completion providers.  Mapped onto
+   <gtksourceview/gtksourcecompletioncontext.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+
+EXPORT UNQUALIFIED
+   GtkSourceCompletionContext,
+   gtk_source_completion_context_get_activation,
+   gtk_source_completion_context_get_bounds,
+   gtk_source_completion_context_get_buffer,
+   gtk_source_completion_context_get_completion,
+   gtk_source_completion_context_get_language,
+   gtk_source_completion_context_get_view,
+   gtk_source_completion_context_get_word,
+   gtk_source_completion_context_get_busy,
+   gtk_source_completion_context_get_empty,
+   gtk_source_completion_context_list_providers,
+   gtk_source_completion_context_get_proposals_for_provider,
+   gtk_source_completion_context_set_proposals_for_provider;
+
+TYPE
+   GtkSourceCompletionContext = ADDRESS;
+
+(* GtkSourceCompletionActivation gtk_source_completion_context_get_activation(
+        GtkSourceCompletionContext *self) *)
+PROCEDURE gtk_source_completion_context_get_activation
+              (self: GtkSourceCompletionContext) : CARDINAL;
+
+(* gboolean gtk_source_completion_context_get_bounds(
+              GtkSourceCompletionContext *self, GtkTextIter *begin,
+              GtkTextIter *end) *)
+PROCEDURE gtk_source_completion_context_get_bounds
+              (self: GtkSourceCompletionContext; VAR begin, theEnd: GtkTextIter)
+              : INTEGER;
+
+(* GtkSourceBuffer *gtk_source_completion_context_get_buffer(
+                      GtkSourceCompletionContext *self) *)
+PROCEDURE gtk_source_completion_context_get_buffer
+              (self: GtkSourceCompletionContext) : ADDRESS;
+
+(* GtkSourceCompletion *gtk_source_completion_context_get_completion(
+                          GtkSourceCompletionContext *self) *)
+PROCEDURE gtk_source_completion_context_get_completion
+              (self: GtkSourceCompletionContext) : ADDRESS;
+
+(* GtkSourceLanguage *gtk_source_completion_context_get_language(
+                        GtkSourceCompletionContext *self) *)
+PROCEDURE gtk_source_completion_context_get_language
+              (self: GtkSourceCompletionContext) : ADDRESS;
+
+(* GtkSourceView *gtk_source_completion_context_get_view(
+                    GtkSourceCompletionContext *self) *)
+PROCEDURE gtk_source_completion_context_get_view
+              (self: GtkSourceCompletionContext) : ADDRESS;
+
+(* const char *gtk_source_completion_context_get_word(
+                GtkSourceCompletionContext *self) *)
+PROCEDURE gtk_source_completion_context_get_word
+              (self: GtkSourceCompletionContext) : ADDRESS;
+
+(* gboolean gtk_source_completion_context_get_busy(
+              GtkSourceCompletionContext *self) *)
+PROCEDURE gtk_source_completion_context_get_busy
+              (self: GtkSourceCompletionContext) : INTEGER;
+
+(* gboolean gtk_source_completion_context_get_empty(
+              GtkSourceCompletionContext *self) *)
+PROCEDURE gtk_source_completion_context_get_empty
+              (self: GtkSourceCompletionContext) : INTEGER;
+
+(* GListModel *gtk_source_completion_context_list_providers(
+                GtkSourceCompletionContext *self) *)
+PROCEDURE gtk_source_completion_context_list_providers
+              (self: GtkSourceCompletionContext) : ADDRESS;
+
+(* GListModel *gtk_source_completion_context_get_proposals_for_provider(
+        GtkSourceCompletionContext *self,
+        GtkSourceCompletionProvider *provider) *)
+PROCEDURE gtk_source_completion_context_get_proposals_for_provider
+              (self: GtkSourceCompletionContext; provider: ADDRESS)
+              : ADDRESS;
+
+(* void gtk_source_completion_context_set_proposals_for_provider(
+          GtkSourceCompletionContext *self,
+          GtkSourceCompletionProvider *provider, GListModel *results) *)
+PROCEDURE gtk_source_completion_context_set_proposals_for_provider
+              (self: GtkSourceCompletionContext; provider: ADDRESS;
+               results: ADDRESS);
+
+END GtkSourceCompletionContext.

+ 23 - 0
src/GtkSourceCompletionProposal.def

@@ -0,0 +1,23 @@
+DEFINITION MODULE FOR "C" GtkSourceCompletionProposal ;
+
+(*
+   m2-GTK4 - GtkSourceCompletionProposal: the interface implemented by
+   objects shown in the completion popup.  Mapped onto
+   <gtksourceview/gtksourcecompletionproposal.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceCompletionProposal,
+   gtk_source_completion_proposal_get_typed_text;
+
+TYPE
+   GtkSourceCompletionProposal = ADDRESS;
+
+(* char *gtk_source_completion_proposal_get_typed_text(
+           GtkSourceCompletionProposal *proposal) *)
+PROCEDURE gtk_source_completion_proposal_get_typed_text
+              (proposal: GtkSourceCompletionProposal) : ADDRESS;
+
+END GtkSourceCompletionProposal.

+ 100 - 0
src/GtkSourceCompletionProvider.def

@@ -0,0 +1,100 @@
+DEFINITION MODULE FOR "C" GtkSourceCompletionProvider ;
+
+(*
+   m2-GTK4 - GtkSourceCompletionProvider: the interface implemented by
+   completion providers.  Mapped onto
+   <gtksourceview/gtksourcecompletionprovider.h>.
+
+   These are the interface's public entry points; implement the
+   interface itself in C (via the shim) and drive it from here.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+
+EXPORT UNQUALIFIED
+   GtkSourceCompletionProvider,
+   gtk_source_completion_provider_get_title,
+   gtk_source_completion_provider_get_priority,
+   gtk_source_completion_provider_activate,
+   gtk_source_completion_provider_display,
+   gtk_source_completion_provider_is_trigger,
+   gtk_source_completion_provider_key_activates,
+   gtk_source_completion_provider_list_alternates,
+   gtk_source_completion_provider_populate_async,
+   gtk_source_completion_provider_populate_finish,
+   gtk_source_completion_provider_refilter;
+
+TYPE
+   GtkSourceCompletionProvider = ADDRESS;
+
+(* const char *gtk_source_completion_provider_get_title(
+                GtkSourceCompletionProvider *self) *)
+PROCEDURE gtk_source_completion_provider_get_title
+              (self: GtkSourceCompletionProvider) : ADDRESS;
+
+(* int gtk_source_completion_provider_get_priority(
+       GtkSourceCompletionProvider *self, GtkSourceCompletionContext *context) *)
+PROCEDURE gtk_source_completion_provider_get_priority
+              (self: GtkSourceCompletionProvider; context: ADDRESS) : INTEGER;
+
+(* void gtk_source_completion_provider_activate(
+          GtkSourceCompletionProvider *self, GtkSourceCompletionContext *context,
+          GtkSourceCompletionProposal *proposal) *)
+PROCEDURE gtk_source_completion_provider_activate
+              (self: GtkSourceCompletionProvider; context: ADDRESS;
+               proposal: ADDRESS);
+
+(* void gtk_source_completion_provider_display(
+          GtkSourceCompletionProvider *self, GtkSourceCompletionContext *context,
+          GtkSourceCompletionProposal *proposal,
+          GtkSourceCompletionCell *cell) *)
+PROCEDURE gtk_source_completion_provider_display
+              (self: GtkSourceCompletionProvider; context: ADDRESS;
+               proposal: ADDRESS; cell: ADDRESS);
+
+(* gboolean gtk_source_completion_provider_is_trigger(
+              GtkSourceCompletionProvider *self, GtkTextIter *iter,
+              gunichar ch) *)
+PROCEDURE gtk_source_completion_provider_is_trigger
+              (self: GtkSourceCompletionProvider; VAR iter: GtkTextIter;
+               ch: CARDINAL) : INTEGER;
+
+(* gboolean gtk_source_completion_provider_key_activates(
+              GtkSourceCompletionProvider *self,
+              GtkSourceCompletionContext *context,
+              GtkSourceCompletionProposal *proposal, guint keyval,
+              GdkModifierType state) *)
+PROCEDURE gtk_source_completion_provider_key_activates
+              (self: GtkSourceCompletionProvider; context: ADDRESS;
+               proposal: ADDRESS; keyval: CARDINAL; state: CARDINAL) : INTEGER;
+
+(* void gtk_source_completion_provider_list_alternates(
+          GtkSourceCompletionProvider *self,
+          GtkSourceCompletionContext *context,
+          GtkSourceCompletionProposal *proposal) *)
+PROCEDURE gtk_source_completion_provider_list_alternates
+              (self: GtkSourceCompletionProvider; context: ADDRESS;
+               proposal: ADDRESS);
+
+(* void gtk_source_completion_provider_populate_async(
+          GtkSourceCompletionProvider *self,
+          GtkSourceCompletionContext *context, GCancellable *cancellable,
+          GAsyncReadyCallback callback, gpointer user_data) *)
+PROCEDURE gtk_source_completion_provider_populate_async
+              (self: GtkSourceCompletionProvider; context: ADDRESS;
+               cancellable: ADDRESS; callback: ADDRESS; user_data: ADDRESS);
+
+(* GListModel *gtk_source_completion_provider_populate_finish(
+                GtkSourceCompletionProvider *self, GAsyncResult *result) *)
+PROCEDURE gtk_source_completion_provider_populate_finish
+              (self: GtkSourceCompletionProvider; result: ADDRESS) : ADDRESS;
+
+(* void gtk_source_completion_provider_refilter(
+          GtkSourceCompletionProvider *self,
+          GtkSourceCompletionContext *context, GListModel *model) *)
+PROCEDURE gtk_source_completion_provider_refilter
+              (self: GtkSourceCompletionProvider; context: ADDRESS;
+               model: ADDRESS);
+
+END GtkSourceCompletionProvider.

+ 21 - 0
src/GtkSourceCompletionSnippets.def

@@ -0,0 +1,21 @@
+DEFINITION MODULE FOR "C" GtkSourceCompletionSnippets ;
+
+(*
+   m2-GTK4 - GtkSourceCompletionSnippets: a completion provider for
+   snippets.  Mapped onto
+   <gtksourceview/gtksourcecompletionsnippets.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceCompletionSnippets,
+   gtk_source_completion_snippets_new;
+
+TYPE
+   GtkSourceCompletionSnippets = ADDRESS;
+
+(* GtkSourceCompletionProvider *gtk_source_completion_snippets_new(void) *)
+PROCEDURE gtk_source_completion_snippets_new () : ADDRESS;
+
+END GtkSourceCompletionSnippets.

+ 34 - 0
src/GtkSourceCompletionWords.def

@@ -0,0 +1,34 @@
+DEFINITION MODULE FOR "C" GtkSourceCompletionWords ;
+
+(*
+   m2-GTK4 - GtkSourceCompletionWords: a completion provider that
+   offers words found in the buffers registered with it.  Mapped onto
+   <gtksourceview/gtksourcecompletionwords.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceCompletionWords,
+   gtk_source_completion_words_new,
+   gtk_source_completion_words_register,
+   gtk_source_completion_words_unregister;
+
+TYPE
+   GtkSourceCompletionWords = ADDRESS;
+
+(* GtkSourceCompletionProvider *gtk_source_completion_words_new(
+                                  const char *title) *)
+PROCEDURE gtk_source_completion_words_new (title: ARRAY OF CHAR) : ADDRESS;
+
+(* void gtk_source_completion_words_register(GtkSourceCompletionWords *words,
+                                             GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_completion_words_register
+              (words: GtkSourceCompletionWords; buffer: ADDRESS);
+
+(* void gtk_source_completion_words_unregister(GtkSourceCompletionWords *words,
+                                               GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_completion_words_unregister
+              (words: GtkSourceCompletionWords; buffer: ADDRESS);
+
+END GtkSourceCompletionWords.

+ 54 - 0
src/GtkSourceEncoding.def

@@ -0,0 +1,54 @@
+DEFINITION MODULE FOR "C" GtkSourceEncoding ;
+
+(*
+   m2-GTK4 - GtkSourceEncoding: a character encoding (a boxed type).
+   Mapped onto <gtksourceview/gtksourceencoding.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceEncoding,
+   gtk_source_encoding_copy, gtk_source_encoding_free,
+   gtk_source_encoding_get_charset, gtk_source_encoding_get_name,
+   gtk_source_encoding_to_string,
+   gtk_source_encoding_get_all, gtk_source_encoding_get_current,
+   gtk_source_encoding_get_utf8, gtk_source_encoding_get_from_charset,
+   gtk_source_encoding_get_default_candidates;
+
+TYPE
+   GtkSourceEncoding = ADDRESS;
+
+(* GtkSourceEncoding *gtk_source_encoding_copy(const GtkSourceEncoding *enc) *)
+PROCEDURE gtk_source_encoding_copy (enc: GtkSourceEncoding) : ADDRESS;
+
+(* void gtk_source_encoding_free(GtkSourceEncoding *enc) *)
+PROCEDURE gtk_source_encoding_free (enc: GtkSourceEncoding);
+
+(* const char *gtk_source_encoding_get_charset(const GtkSourceEncoding *enc) *)
+PROCEDURE gtk_source_encoding_get_charset (enc: GtkSourceEncoding) : ADDRESS;
+
+(* const char *gtk_source_encoding_get_name(const GtkSourceEncoding *enc) *)
+PROCEDURE gtk_source_encoding_get_name (enc: GtkSourceEncoding) : ADDRESS;
+
+(* char *gtk_source_encoding_to_string(const GtkSourceEncoding *enc) *)
+PROCEDURE gtk_source_encoding_to_string (enc: GtkSourceEncoding) : ADDRESS;
+
+(* const GSList *gtk_source_encoding_get_all(void) *)
+PROCEDURE gtk_source_encoding_get_all () : ADDRESS;
+
+(* const GtkSourceEncoding *gtk_source_encoding_get_current(void) *)
+PROCEDURE gtk_source_encoding_get_current () : ADDRESS;
+
+(* GtkSourceEncoding *gtk_source_encoding_get_utf8(void) *)
+PROCEDURE gtk_source_encoding_get_utf8 () : ADDRESS;
+
+(* GtkSourceEncoding *gtk_source_encoding_get_from_charset(
+                         const char *charset) *)
+PROCEDURE gtk_source_encoding_get_from_charset (charset: ARRAY OF CHAR)
+                                                : ADDRESS;
+
+(* const GSList *gtk_source_encoding_get_default_candidates(void) *)
+PROCEDURE gtk_source_encoding_get_default_candidates () : ADDRESS;
+
+END GtkSourceEncoding.

+ 142 - 0
src/GtkSourceEnums.def

@@ -0,0 +1,142 @@
+DEFINITION MODULE FOR "C" GtkSourceEnums ;
+
+(*
+   m2-GTK4 - GtkSourceView enumerations.  Mapped onto
+   <gtksourceview/gtksource.h>.
+
+   Shared home for the GtkSource enum values used by several widgets
+   (change case, newline type, smart home/end, sort flags, space
+   locations/types, file-saver flags, gutter alignment, completion
+   activation/columns, ...).  Numeric values match the C enumerators.
+*)
+
+EXPORT UNQUALIFIED
+   GtkSourceBackgroundPatternType,
+   GtkSourceBackgroundPatternNone, GtkSourceBackgroundPatternGrid,
+   GtkSourceBracketMatchType,
+   GtkSourceBracketMatchNone, GtkSourceBracketMatchOutOfRange,
+   GtkSourceBracketMatchNotFound, GtkSourceBracketMatchFound,
+   GtkSourceChangeCaseType,
+   GtkSourceChangeCaseLower, GtkSourceChangeCaseUpper,
+   GtkSourceChangeCaseToggle, GtkSourceChangeCaseTitle,
+   GtkSourceCompletionActivation,
+   GtkSourceCompletionActivationNone,
+   GtkSourceCompletionActivationInteractive,
+   GtkSourceCompletionActivationUserRequested,
+   GtkSourceCompletionColumn,
+   GtkSourceCompletionColumnIcon, GtkSourceCompletionColumnBefore,
+   GtkSourceCompletionColumnTypedText, GtkSourceCompletionColumnAfter,
+   GtkSourceCompletionColumnComment, GtkSourceCompletionColumnDetails,
+   GtkSourceCompressionType,
+   GtkSourceCompressionNone, GtkSourceCompressionGzip,
+   GtkSourceFileSaverFlags,
+   GtkSourceFileSaverFlagNone, GtkSourceFileSaverFlagIgnoreInvalidChars,
+   GtkSourceFileSaverFlagIgnoreModificationTime,
+   GtkSourceFileSaverFlagCreateBackup,
+   GtkSourceGutterRendererAlignmentMode,
+   GtkSourceGutterAlignmentCell, GtkSourceGutterAlignmentFirst,
+   GtkSourceGutterAlignmentLast,
+   GtkSourceNewlineType,
+   GtkSourceNewlineLf, GtkSourceNewlineCr, GtkSourceNewlineCrLf,
+   GtkSourceSmartHomeEndType,
+   GtkSourceSmartHomeEndDisabled, GtkSourceSmartHomeEndBefore,
+   GtkSourceSmartHomeEndAfter, GtkSourceSmartHomeEndAlways,
+   GtkSourceSortFlags,
+   GtkSourceSortFlagNone, GtkSourceSortFlagCaseSensitive,
+   GtkSourceSortFlagReverseOrder, GtkSourceSortFlagRemoveDuplicates,
+   GtkSourceSortFlagFilename,
+   GtkSourceSpaceLocationFlags,
+   GtkSourceSpaceLocationNone, GtkSourceSpaceLocationLeading,
+   GtkSourceSpaceLocationInsideText, GtkSourceSpaceLocationTrailing,
+   GtkSourceSpaceLocationAll,
+   GtkSourceSpaceTypeFlags,
+   GtkSourceSpaceTypeNone, GtkSourceSpaceTypeSpace, GtkSourceSpaceTypeTab,
+   GtkSourceSpaceTypeNewline, GtkSourceSpaceTypeNbsp, GtkSourceSpaceTypeAll,
+   GtkSourceViewGutterPosition,
+   GtkSourceViewGutterLines, GtkSourceViewGutterMarks;
+
+TYPE
+   GtkSourceBackgroundPatternType = CARDINAL;
+   GtkSourceBracketMatchType = CARDINAL;
+   GtkSourceChangeCaseType = CARDINAL;
+   GtkSourceCompletionActivation = CARDINAL;
+   GtkSourceCompletionColumn = CARDINAL;
+   GtkSourceCompressionType = CARDINAL;
+   GtkSourceFileSaverFlags = CARDINAL;
+   GtkSourceGutterRendererAlignmentMode = CARDINAL;
+   GtkSourceNewlineType = CARDINAL;
+   GtkSourceSmartHomeEndType = CARDINAL;
+   GtkSourceSortFlags = CARDINAL;
+   GtkSourceSpaceLocationFlags = CARDINAL;
+   GtkSourceSpaceTypeFlags = CARDINAL;
+   GtkSourceViewGutterPosition = INTEGER;
+
+CONST
+   GtkSourceBackgroundPatternNone = 0;  (* GTK_SOURCE_BACKGROUND_PATTERN_TYPE_NONE *)
+   GtkSourceBackgroundPatternGrid = 1;  (* GTK_SOURCE_BACKGROUND_PATTERN_TYPE_GRID *)
+
+   GtkSourceBracketMatchNone       = 0;  (* GTK_SOURCE_BRACKET_MATCH_NONE *)
+   GtkSourceBracketMatchOutOfRange = 1;
+   GtkSourceBracketMatchNotFound   = 2;
+   GtkSourceBracketMatchFound      = 3;
+
+   GtkSourceChangeCaseLower  = 0;  (* GTK_SOURCE_CHANGE_CASE_LOWER *)
+   GtkSourceChangeCaseUpper  = 1;
+   GtkSourceChangeCaseToggle = 2;
+   GtkSourceChangeCaseTitle  = 3;
+
+   GtkSourceCompletionActivationNone          = 0;
+   GtkSourceCompletionActivationInteractive   = 1;
+   GtkSourceCompletionActivationUserRequested = 2;
+
+   GtkSourceCompletionColumnIcon      = 0;
+   GtkSourceCompletionColumnBefore    = 1;
+   GtkSourceCompletionColumnTypedText = 2;
+   GtkSourceCompletionColumnAfter     = 3;
+   GtkSourceCompletionColumnComment   = 4;
+   GtkSourceCompletionColumnDetails   = 5;
+
+   GtkSourceCompressionNone = 0;  (* GTK_SOURCE_COMPRESSION_TYPE_NONE *)
+   GtkSourceCompressionGzip = 1;  (* GTK_SOURCE_COMPRESSION_TYPE_GZIP *)
+
+   GtkSourceFileSaverFlagNone                    = 0;  (* GTK_SOURCE_FILE_SAVER_FLAGS_NONE *)
+   GtkSourceFileSaverFlagIgnoreInvalidChars      = 1;
+   GtkSourceFileSaverFlagIgnoreModificationTime  = 2;
+   GtkSourceFileSaverFlagCreateBackup            = 4;
+
+   GtkSourceGutterAlignmentCell  = 0;
+   GtkSourceGutterAlignmentFirst = 1;
+   GtkSourceGutterAlignmentLast  = 2;
+
+   GtkSourceNewlineLf   = 0;  (* GTK_SOURCE_NEWLINE_TYPE_LF *)
+   GtkSourceNewlineCr   = 1;  (* GTK_SOURCE_NEWLINE_TYPE_CR *)
+   GtkSourceNewlineCrLf = 2;  (* GTK_SOURCE_NEWLINE_TYPE_CR_LF *)
+
+   GtkSourceSmartHomeEndDisabled = 0;
+   GtkSourceSmartHomeEndBefore   = 1;
+   GtkSourceSmartHomeEndAfter    = 2;
+   GtkSourceSmartHomeEndAlways   = 3;
+
+   GtkSourceSortFlagNone             = 0;  (* GTK_SOURCE_SORT_FLAGS_NONE *)
+   GtkSourceSortFlagCaseSensitive    = 1;
+   GtkSourceSortFlagReverseOrder     = 2;
+   GtkSourceSortFlagRemoveDuplicates = 4;
+   GtkSourceSortFlagFilename         = 8;
+
+   GtkSourceSpaceLocationNone       = 0;  (* GTK_SOURCE_SPACE_LOCATION_NONE *)
+   GtkSourceSpaceLocationLeading    = 1;
+   GtkSourceSpaceLocationInsideText = 2;
+   GtkSourceSpaceLocationTrailing   = 4;
+   GtkSourceSpaceLocationAll        = 7;
+
+   GtkSourceSpaceTypeNone    = 0;  (* GTK_SOURCE_SPACE_TYPE_NONE *)
+   GtkSourceSpaceTypeSpace   = 1;
+   GtkSourceSpaceTypeTab     = 2;
+   GtkSourceSpaceTypeNewline = 4;
+   GtkSourceSpaceTypeNbsp    = 8;
+   GtkSourceSpaceTypeAll     = 15;
+
+   GtkSourceViewGutterLines = -30;  (* GTK_SOURCE_VIEW_GUTTER_POSITION_LINES *)
+   GtkSourceViewGutterMarks = -20;  (* GTK_SOURCE_VIEW_GUTTER_POSITION_MARKS *)
+
+END GtkSourceEnums.

+ 74 - 0
src/GtkSourceFile.def

@@ -0,0 +1,74 @@
+DEFINITION MODULE FOR "C" GtkSourceFile ;
+
+(*
+   m2-GTK4 - GtkSourceFile: associates a GtkSourceBuffer with a GFile
+   location, encoding and newline type.  Mapped onto
+   <gtksourceview/gtksourcefile.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkSourceEnums IMPORT GtkSourceCompressionType, GtkSourceNewlineType;
+
+EXPORT UNQUALIFIED
+   GtkSourceFile,
+   gtk_source_file_new,
+   gtk_source_file_get_location, gtk_source_file_set_location,
+   gtk_source_file_get_encoding,
+   gtk_source_file_get_newline_type,
+   gtk_source_file_get_compression_type,
+   gtk_source_file_is_local, gtk_source_file_is_deleted,
+   gtk_source_file_is_readonly, gtk_source_file_is_externally_modified,
+   gtk_source_file_check_file_on_disk,
+   gtk_source_file_set_mount_operation_factory;
+
+TYPE
+   GtkSourceFile = ADDRESS;
+
+(* GtkSourceFile *gtk_source_file_new(void) *)
+PROCEDURE gtk_source_file_new () : GtkSourceFile;
+
+(* GFile *gtk_source_file_get_location(GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_get_location (file: GtkSourceFile) : ADDRESS;
+
+(* void gtk_source_file_set_location(GtkSourceFile *file, GFile *location) *)
+PROCEDURE gtk_source_file_set_location (file: GtkSourceFile;
+                                        location: ADDRESS);
+
+(* const GtkSourceEncoding *gtk_source_file_get_encoding(GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_get_encoding (file: GtkSourceFile) : ADDRESS;
+
+(* GtkSourceNewlineType gtk_source_file_get_newline_type(GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_get_newline_type (file: GtkSourceFile)
+                                            : GtkSourceNewlineType;
+
+(* GtkSourceCompressionType gtk_source_file_get_compression_type(
+        GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_get_compression_type (file: GtkSourceFile)
+                                                : GtkSourceCompressionType;
+
+(* gboolean gtk_source_file_is_local(GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_is_local (file: GtkSourceFile) : INTEGER;
+
+(* gboolean gtk_source_file_is_deleted(GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_is_deleted (file: GtkSourceFile) : INTEGER;
+
+(* gboolean gtk_source_file_is_readonly(GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_is_readonly (file: GtkSourceFile) : INTEGER;
+
+(* gboolean gtk_source_file_is_externally_modified(GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_is_externally_modified (file: GtkSourceFile)
+                                                  : INTEGER;
+
+(* void gtk_source_file_check_file_on_disk(GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_check_file_on_disk (file: GtkSourceFile);
+
+(* void gtk_source_file_set_mount_operation_factory(
+          GtkSourceFile *file,
+          GtkSourceMountOperationFactory callback,
+          gpointer user_data, GDestroyNotify notify) *)
+PROCEDURE gtk_source_file_set_mount_operation_factory (file: GtkSourceFile;
+                                                       callback: ADDRESS;
+                                                       user_data: ADDRESS;
+                                                       notify: ADDRESS);
+
+END GtkSourceFile.

+ 101 - 0
src/GtkSourceFileLoader.def

@@ -0,0 +1,101 @@
+DEFINITION MODULE FOR "C" GtkSourceFileLoader ;
+
+(*
+   m2-GTK4 - GtkSourceFileLoader: loads a GtkSourceFile into a buffer
+   asynchronously.  Mapped onto <gtksourceview/gtksourcefileloader.h>.
+
+   The async/await pair follows the GtkFileDialog convention: pass the
+   GAsyncReadyCallback as ADDRESS and read the result with
+   load_finish().
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkSourceEnums IMPORT GtkSourceCompressionType, GtkSourceNewlineType;
+
+EXPORT UNQUALIFIED
+   GtkSourceFileLoader,
+   gtk_source_file_loader_new, gtk_source_file_loader_new_from_stream,
+   gtk_source_file_loader_get_buffer, gtk_source_file_loader_get_file,
+   gtk_source_file_loader_get_location,
+   gtk_source_file_loader_get_input_stream,
+   gtk_source_file_loader_get_encoding,
+   gtk_source_file_loader_get_newline_type,
+   gtk_source_file_loader_get_compression_type,
+   gtk_source_file_loader_set_candidate_encodings,
+   gtk_source_file_loader_load_async, gtk_source_file_loader_load_finish;
+
+TYPE
+   GtkSourceFileLoader = ADDRESS;
+
+(* GtkSourceFileLoader *gtk_source_file_loader_new(GtkSourceBuffer *buffer,
+                                                   GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_loader_new (buffer, file: ADDRESS)
+                                      : GtkSourceFileLoader;
+
+(* GtkSourceFileLoader *gtk_source_file_loader_new_from_stream(
+        GtkSourceBuffer *buffer, GtkSourceFile *file, GInputStream *stream) *)
+PROCEDURE gtk_source_file_loader_new_from_stream (buffer, file,
+                                                  stream: ADDRESS)
+                                                 : GtkSourceFileLoader;
+
+(* GtkSourceBuffer *gtk_source_file_loader_get_buffer(
+                      GtkSourceFileLoader *loader) *)
+PROCEDURE gtk_source_file_loader_get_buffer (loader: GtkSourceFileLoader)
+                                             : ADDRESS;
+
+(* GtkSourceFile *gtk_source_file_loader_get_file(
+                    GtkSourceFileLoader *loader) *)
+PROCEDURE gtk_source_file_loader_get_file (loader: GtkSourceFileLoader)
+                                           : ADDRESS;
+
+(* GFile *gtk_source_file_loader_get_location(GtkSourceFileLoader *loader) *)
+PROCEDURE gtk_source_file_loader_get_location (loader: GtkSourceFileLoader)
+                                               : ADDRESS;
+
+(* GInputStream *gtk_source_file_loader_get_input_stream(
+                   GtkSourceFileLoader *loader) *)
+PROCEDURE gtk_source_file_loader_get_input_stream
+              (loader: GtkSourceFileLoader) : ADDRESS;
+
+(* const GtkSourceEncoding *gtk_source_file_loader_get_encoding(
+                              GtkSourceFileLoader *loader) *)
+PROCEDURE gtk_source_file_loader_get_encoding (loader: GtkSourceFileLoader)
+                                               : ADDRESS;
+
+(* GtkSourceNewlineType gtk_source_file_loader_get_newline_type(
+        GtkSourceFileLoader *loader) *)
+PROCEDURE gtk_source_file_loader_get_newline_type
+              (loader: GtkSourceFileLoader) : GtkSourceNewlineType;
+
+(* GtkSourceCompressionType gtk_source_file_loader_get_compression_type(
+        GtkSourceFileLoader *loader) *)
+PROCEDURE gtk_source_file_loader_get_compression_type
+              (loader: GtkSourceFileLoader) : GtkSourceCompressionType;
+
+(* void gtk_source_file_loader_set_candidate_encodings(
+          GtkSourceFileLoader *loader,
+          const GSList *candidate_encodings) *)
+PROCEDURE gtk_source_file_loader_set_candidate_encodings
+              (loader: GtkSourceFileLoader; candidate_encodings: ADDRESS);
+
+(* void gtk_source_file_loader_load_async(
+          GtkSourceFileLoader *loader, gint io_priority,
+          GCancellable *cancellable, GFileProgressCallback progress_callback,
+          gpointer progress_callback_data, GDestroyNotify progress_callback_notify,
+          GAsyncReadyCallback callback, gpointer user_data) *)
+PROCEDURE gtk_source_file_loader_load_async (loader: GtkSourceFileLoader;
+                                             io_priority: INTEGER;
+                                             cancellable: ADDRESS;
+                                             progress_callback: ADDRESS;
+                                             progress_data: ADDRESS;
+                                             progress_notify: ADDRESS;
+                                             callback: ADDRESS;
+                                             user_data: ADDRESS);
+
+(* gboolean gtk_source_file_loader_load_finish(GtkSourceFileLoader *loader,
+                                                GAsyncResult *result,
+                                                GError **error) *)
+PROCEDURE gtk_source_file_loader_load_finish (loader: GtkSourceFileLoader;
+                                              result: ADDRESS) : INTEGER;
+
+END GtkSourceFileLoader.

+ 116 - 0
src/GtkSourceFileSaver.def

@@ -0,0 +1,116 @@
+DEFINITION MODULE FOR "C" GtkSourceFileSaver ;
+
+(*
+   m2-GTK4 - GtkSourceFileSaver: saves a GtkSourceBuffer to a
+   GtkSourceFile asynchronously.  Mapped onto
+   <gtksourceview/gtksourcefilesaver.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkSourceEnums IMPORT GtkSourceCompressionType, GtkSourceNewlineType,
+   GtkSourceFileSaverFlags;
+
+EXPORT UNQUALIFIED
+   GtkSourceFileSaver,
+   gtk_source_file_saver_new, gtk_source_file_saver_new_with_target,
+   gtk_source_file_saver_get_buffer, gtk_source_file_saver_get_file,
+   gtk_source_file_saver_get_location,
+   gtk_source_file_saver_get_encoding,
+   gtk_source_file_saver_get_newline_type,
+   gtk_source_file_saver_get_compression_type, gtk_source_file_saver_get_flags,
+   gtk_source_file_saver_set_encoding,
+   gtk_source_file_saver_set_newline_type,
+   gtk_source_file_saver_set_compression_type,
+   gtk_source_file_saver_set_flags,
+   gtk_source_file_saver_save_async, gtk_source_file_saver_save_finish;
+
+TYPE
+   GtkSourceFileSaver = ADDRESS;
+
+(* GtkSourceFileSaver *gtk_source_file_saver_new(GtkSourceBuffer *buffer,
+                                                 GtkSourceFile *file) *)
+PROCEDURE gtk_source_file_saver_new (buffer, file: ADDRESS)
+                                     : GtkSourceFileSaver;
+
+(* GtkSourceFileSaver *gtk_source_file_saver_new_with_target(
+        GtkSourceBuffer *buffer, GtkSourceFile *file, GFile *target_location) *)
+PROCEDURE gtk_source_file_saver_new_with_target (buffer, file,
+                                                 target_location: ADDRESS)
+                                                : GtkSourceFileSaver;
+
+(* GtkSourceBuffer *gtk_source_file_saver_get_buffer(
+                      GtkSourceFileSaver *saver) *)
+PROCEDURE gtk_source_file_saver_get_buffer (saver: GtkSourceFileSaver)
+                                            : ADDRESS;
+
+(* GtkSourceFile *gtk_source_file_saver_get_file(GtkSourceFileSaver *saver) *)
+PROCEDURE gtk_source_file_saver_get_file (saver: GtkSourceFileSaver)
+                                          : ADDRESS;
+
+(* GFile *gtk_source_file_saver_get_location(GtkSourceFileSaver *saver) *)
+PROCEDURE gtk_source_file_saver_get_location (saver: GtkSourceFileSaver)
+                                              : ADDRESS;
+
+(* const GtkSourceEncoding *gtk_source_file_saver_get_encoding(
+                              GtkSourceFileSaver *saver) *)
+PROCEDURE gtk_source_file_saver_get_encoding (saver: GtkSourceFileSaver)
+                                              : ADDRESS;
+
+(* GtkSourceNewlineType gtk_source_file_saver_get_newline_type(
+        GtkSourceFileSaver *saver) *)
+PROCEDURE gtk_source_file_saver_get_newline_type (saver: GtkSourceFileSaver)
+                                                  : GtkSourceNewlineType;
+
+(* GtkSourceCompressionType gtk_source_file_saver_get_compression_type(
+        GtkSourceFileSaver *saver) *)
+PROCEDURE gtk_source_file_saver_get_compression_type
+              (saver: GtkSourceFileSaver) : GtkSourceCompressionType;
+
+(* GtkSourceFileSaverFlags gtk_source_file_saver_get_flags(
+        GtkSourceFileSaver *saver) *)
+PROCEDURE gtk_source_file_saver_get_flags (saver: GtkSourceFileSaver)
+                                           : GtkSourceFileSaverFlags;
+
+(* void gtk_source_file_saver_set_encoding(GtkSourceFileSaver *saver,
+                                            const GtkSourceEncoding *encoding) *)
+PROCEDURE gtk_source_file_saver_set_encoding (saver: GtkSourceFileSaver;
+                                              encoding: ADDRESS);
+
+(* void gtk_source_file_saver_set_newline_type(
+          GtkSourceFileSaver *saver, GtkSourceNewlineType newline_type) *)
+PROCEDURE gtk_source_file_saver_set_newline_type
+              (saver: GtkSourceFileSaver; newline_type: GtkSourceNewlineType);
+
+(* void gtk_source_file_saver_set_compression_type(
+          GtkSourceFileSaver *saver,
+          GtkSourceCompressionType compression_type) *)
+PROCEDURE gtk_source_file_saver_set_compression_type
+              (saver: GtkSourceFileSaver;
+               compression_type: GtkSourceCompressionType);
+
+(* void gtk_source_file_saver_set_flags(GtkSourceFileSaver *saver,
+                                         GtkSourceFileSaverFlags flags) *)
+PROCEDURE gtk_source_file_saver_set_flags
+              (saver: GtkSourceFileSaver; flags: GtkSourceFileSaverFlags);
+
+(* void gtk_source_file_saver_save_async(
+          GtkSourceFileSaver *saver, gint io_priority,
+          GCancellable *cancellable, GFileProgressCallback progress_callback,
+          gpointer progress_callback_data, GDestroyNotify progress_callback_notify,
+          GAsyncReadyCallback callback, gpointer user_data) *)
+PROCEDURE gtk_source_file_saver_save_async (saver: GtkSourceFileSaver;
+                                            io_priority: INTEGER;
+                                            cancellable: ADDRESS;
+                                            progress_callback: ADDRESS;
+                                            progress_data: ADDRESS;
+                                            progress_notify: ADDRESS;
+                                            callback: ADDRESS;
+                                            user_data: ADDRESS);
+
+(* gboolean gtk_source_file_saver_save_finish(GtkSourceFileSaver *saver,
+                                               GAsyncResult *result,
+                                               GError **error) *)
+PROCEDURE gtk_source_file_saver_save_finish (saver: GtkSourceFileSaver;
+                                             result: ADDRESS) : INTEGER;
+
+END GtkSourceFileSaver.

+ 58 - 0
src/GtkSourceFunctions.def

@@ -0,0 +1,58 @@
+DEFINITION MODULE FOR "C" GtkSourceFunctions ;
+
+(*
+   m2-GTK4 - GtkSourceView namespace-level functions: initialisation,
+   version checks, text escaping and the scheduler.  Mapped onto
+   <gtksourceview/gtksource.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   gtk_source_init, gtk_source_finalize,
+   gtk_source_get_major_version, gtk_source_get_minor_version,
+   gtk_source_get_micro_version, gtk_source_check_version,
+   gtk_source_utils_escape_search_text, gtk_source_utils_unescape_search_text,
+   gtk_source_scheduler_add, gtk_source_scheduler_add_full,
+   gtk_source_scheduler_remove;
+
+(* void gtk_source_init(void) *)
+PROCEDURE gtk_source_init ();
+
+(* void gtk_source_finalize(void) *)
+PROCEDURE gtk_source_finalize ();
+
+(* guint gtk_source_get_major_version(void) *)
+PROCEDURE gtk_source_get_major_version () : CARDINAL;
+
+(* guint gtk_source_get_minor_version(void) *)
+PROCEDURE gtk_source_get_minor_version () : CARDINAL;
+
+(* guint gtk_source_get_micro_version(void) *)
+PROCEDURE gtk_source_get_micro_version () : CARDINAL;
+
+(* gboolean gtk_source_check_version(guint major, guint minor, guint micro) *)
+PROCEDURE gtk_source_check_version (major, minor, micro: CARDINAL) : INTEGER;
+
+(* char *gtk_source_utils_escape_search_text(const char *text) *)
+PROCEDURE gtk_source_utils_escape_search_text (text: ARRAY OF CHAR) : ADDRESS;
+
+(* char *gtk_source_utils_unescape_search_text(const char *text) *)
+PROCEDURE gtk_source_utils_unescape_search_text (text: ARRAY OF CHAR)
+                                                : ADDRESS;
+
+(* guint gtk_source_scheduler_add(GSourceFunc callback, gpointer user_data) *)
+PROCEDURE gtk_source_scheduler_add (callback: ADDRESS; user_data: ADDRESS)
+                                    : LONGCARD;
+
+(* guint gtk_source_scheduler_add_full(GSourceFunc callback,
+                                       gpointer user_data,
+                                       GDestroyNotify notify) *)
+PROCEDURE gtk_source_scheduler_add_full (callback: ADDRESS;
+                                         user_data: ADDRESS;
+                                         notify: ADDRESS) : LONGCARD;
+
+(* void gtk_source_scheduler_remove(guint handler_id) *)
+PROCEDURE gtk_source_scheduler_remove (handler_id: LONGCARD);
+
+END GtkSourceFunctions.

+ 43 - 0
src/GtkSourceGutter.def

@@ -0,0 +1,43 @@
+DEFINITION MODULE FOR "C" GtkSourceGutter ;
+
+(*
+   m2-GTK4 - GtkSourceGutter: a gutter of a GtkSourceView, holding
+   GtkSourceGutterRenderer objects.  Mapped onto
+   <gtksourceview/gtksourcegutter.h>.
+
+   Obtain it from gtk_source_view_get_gutter().
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceGutter,
+   gtk_source_gutter_get_view,
+   gtk_source_gutter_insert, gtk_source_gutter_remove,
+   gtk_source_gutter_reorder;
+
+TYPE
+   GtkSourceGutter = ADDRESS;
+
+(* GtkSourceView *gtk_source_gutter_get_view(GtkSourceGutter *gutter) *)
+PROCEDURE gtk_source_gutter_get_view (gutter: GtkSourceGutter) : ADDRESS;
+
+(* gboolean gtk_source_gutter_insert(GtkSourceGutter *gutter,
+                                     GtkSourceGutterRenderer *renderer,
+                                     gint position) *)
+PROCEDURE gtk_source_gutter_insert (gutter: GtkSourceGutter;
+                                    renderer: ADDRESS;
+                                    position: INTEGER) : INTEGER;
+
+(* void gtk_source_gutter_remove(GtkSourceGutter *gutter,
+                                 GtkSourceGutterRenderer *renderer) *)
+PROCEDURE gtk_source_gutter_remove (gutter: GtkSourceGutter;
+                                    renderer: ADDRESS);
+
+(* void gtk_source_gutter_reorder(GtkSourceGutter *gutter,
+                                  GtkSourceGutterRenderer *renderer,
+                                  gint position) *)
+PROCEDURE gtk_source_gutter_reorder (gutter: GtkSourceGutter;
+                                     renderer: ADDRESS; position: INTEGER);
+
+END GtkSourceGutter.

+ 127 - 0
src/GtkSourceGutterLines.def

@@ -0,0 +1,127 @@
+DEFINITION MODULE FOR "C" GtkSourceGutterLines ;
+
+(*
+   m2-GTK4 - GtkSourceGutterLines: the per-draw information passed to a
+   GtkSourceGutterRenderer.  Mapped onto
+   <gtksourceview/gtksourcegutterlines.h>.
+
+   The mode parameter is a GtkSourceGutterRendererAlignmentMode.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+
+EXPORT UNQUALIFIED
+   GtkSourceGutterLines,
+   gtk_source_gutter_lines_get_buffer, gtk_source_gutter_lines_get_view,
+   gtk_source_gutter_lines_get_first, gtk_source_gutter_lines_get_last,
+   gtk_source_gutter_lines_is_cursor, gtk_source_gutter_lines_is_prelit,
+   gtk_source_gutter_lines_is_selected,
+   gtk_source_gutter_lines_has_any_class,
+   gtk_source_gutter_lines_has_class, gtk_source_gutter_lines_has_qclass,
+   gtk_source_gutter_lines_add_class, gtk_source_gutter_lines_add_qclass,
+   gtk_source_gutter_lines_remove_class,
+   gtk_source_gutter_lines_remove_qclass,
+   gtk_source_gutter_lines_get_iter_at_line,
+   gtk_source_gutter_lines_get_line_yrange,
+   gtk_source_gutter_lines_get_line_extent;
+
+TYPE
+   GtkSourceGutterLines = ADDRESS;
+
+(* GtkSourceBuffer *gtk_source_gutter_lines_get_buffer(
+                      GtkSourceGutterLines *lines) *)
+PROCEDURE gtk_source_gutter_lines_get_buffer (lines: GtkSourceGutterLines)
+                                              : ADDRESS;
+
+(* GtkSourceView *gtk_source_gutter_lines_get_view(GtkSourceGutterLines *lines) *)
+PROCEDURE gtk_source_gutter_lines_get_view (lines: GtkSourceGutterLines)
+                                            : ADDRESS;
+
+(* guint gtk_source_gutter_lines_get_first(GtkSourceGutterLines *lines) *)
+PROCEDURE gtk_source_gutter_lines_get_first (lines: GtkSourceGutterLines)
+                                             : CARDINAL;
+
+(* guint gtk_source_gutter_lines_get_last(GtkSourceGutterLines *lines) *)
+PROCEDURE gtk_source_gutter_lines_get_last (lines: GtkSourceGutterLines)
+                                            : CARDINAL;
+
+(* gboolean gtk_source_gutter_lines_is_cursor(GtkSourceGutterLines *lines,
+                                              guint line) *)
+PROCEDURE gtk_source_gutter_lines_is_cursor (lines: GtkSourceGutterLines;
+                                             line: CARDINAL) : INTEGER;
+
+(* gboolean gtk_source_gutter_lines_is_prelit(GtkSourceGutterLines *lines,
+                                              guint line) *)
+PROCEDURE gtk_source_gutter_lines_is_prelit (lines: GtkSourceGutterLines;
+                                             line: CARDINAL) : INTEGER;
+
+(* gboolean gtk_source_gutter_lines_is_selected(GtkSourceGutterLines *lines,
+                                                guint line) *)
+PROCEDURE gtk_source_gutter_lines_is_selected (lines: GtkSourceGutterLines;
+                                               line: CARDINAL) : INTEGER;
+
+(* gboolean gtk_source_gutter_lines_has_any_class(
+              GtkSourceGutterLines *lines, guint line) *)
+PROCEDURE gtk_source_gutter_lines_has_any_class
+              (lines: GtkSourceGutterLines; line: CARDINAL) : INTEGER;
+
+(* gboolean gtk_source_gutter_lines_has_class(GtkSourceGutterLines *lines,
+                                              guint line, const char *name) *)
+PROCEDURE gtk_source_gutter_lines_has_class (lines: GtkSourceGutterLines;
+                                             line: CARDINAL;
+                                             name: ARRAY OF CHAR) : INTEGER;
+
+(* gboolean gtk_source_gutter_lines_has_qclass(GtkSourceGutterLines *lines,
+                                               guint line, GQuark qname) *)
+PROCEDURE gtk_source_gutter_lines_has_qclass (lines: GtkSourceGutterLines;
+                                              line: CARDINAL;
+                                              qname: CARDINAL) : INTEGER;
+
+(* void gtk_source_gutter_lines_add_class(GtkSourceGutterLines *lines,
+                                          guint line, const char *name) *)
+PROCEDURE gtk_source_gutter_lines_add_class (lines: GtkSourceGutterLines;
+                                             line: CARDINAL;
+                                             name: ARRAY OF CHAR);
+
+(* void gtk_source_gutter_lines_add_qclass(GtkSourceGutterLines *lines,
+                                           guint line, GQuark qname) *)
+PROCEDURE gtk_source_gutter_lines_add_qclass (lines: GtkSourceGutterLines;
+                                              line: CARDINAL; qname: CARDINAL);
+
+(* void gtk_source_gutter_lines_remove_class(GtkSourceGutterLines *lines,
+                                             guint line, const char *name) *)
+PROCEDURE gtk_source_gutter_lines_remove_class (lines: GtkSourceGutterLines;
+                                                line: CARDINAL;
+                                                name: ARRAY OF CHAR);
+
+(* void gtk_source_gutter_lines_remove_qclass(GtkSourceGutterLines *lines,
+                                              guint line, GQuark qname) *)
+PROCEDURE gtk_source_gutter_lines_remove_qclass (lines: GtkSourceGutterLines;
+                                                 line: CARDINAL;
+                                                 qname: CARDINAL);
+
+(* void gtk_source_gutter_lines_get_iter_at_line(GtkSourceGutterLines *lines,
+                                                 GtkTextIter *iter,
+                                                 guint line) *)
+PROCEDURE gtk_source_gutter_lines_get_iter_at_line
+              (lines: GtkSourceGutterLines; VAR iter: GtkTextIter;
+               line: CARDINAL);
+
+(* void gtk_source_gutter_lines_get_line_yrange(GtkSourceGutterLines *lines,
+                                                guint line,
+                                                GtkSourceGutterRendererAlignmentMode mode,
+                                                gint *y, gint *height) *)
+PROCEDURE gtk_source_gutter_lines_get_line_yrange
+              (lines: GtkSourceGutterLines; line: CARDINAL; mode: CARDINAL;
+               VAR y, height: INTEGER);
+
+(* void gtk_source_gutter_lines_get_line_extent(GtkSourceGutterLines *lines,
+                                                guint line,
+                                                GtkSourceGutterRendererAlignmentMode mode,
+                                                gfloat *y, gfloat *height) *)
+PROCEDURE gtk_source_gutter_lines_get_line_extent
+              (lines: GtkSourceGutterLines; line: CARDINAL; mode: CARDINAL;
+               VAR y, height: SHORTREAL);
+
+END GtkSourceGutterLines.

+ 121 - 0
src/GtkSourceGutterRenderer.def

@@ -0,0 +1,121 @@
+DEFINITION MODULE FOR "C" GtkSourceGutterRenderer ;
+
+(*
+   m2-GTK4 - GtkSourceGutterRenderer: the abstract base class for gutter
+   renderers.  Mapped onto <gtksourceview/gtksourcegutterrenderer.h>.
+
+   The alignment mode uses the GtkSourceGutterRendererAlignmentMode
+   values; the state is a GdkModifierType mask.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+FROM GtkSourceEnums IMPORT GtkSourceGutterRendererAlignmentMode;
+
+EXPORT UNQUALIFIED
+   GtkSourceGutterRenderer,
+   gtk_source_gutter_renderer_get_buffer, gtk_source_gutter_renderer_get_view,
+   gtk_source_gutter_renderer_get_alignment_mode,
+   gtk_source_gutter_renderer_set_alignment_mode,
+   gtk_source_gutter_renderer_get_xalign,
+   gtk_source_gutter_renderer_set_xalign,
+   gtk_source_gutter_renderer_get_yalign,
+   gtk_source_gutter_renderer_set_yalign,
+   gtk_source_gutter_renderer_get_xpad, gtk_source_gutter_renderer_set_xpad,
+   gtk_source_gutter_renderer_get_ypad, gtk_source_gutter_renderer_set_ypad,
+   gtk_source_gutter_renderer_activate,
+   gtk_source_gutter_renderer_query_activatable,
+   gtk_source_gutter_renderer_align_cell;
+
+TYPE
+   GtkSourceGutterRenderer = ADDRESS;
+
+(* GtkSourceBuffer *gtk_source_gutter_renderer_get_buffer(
+                      GtkSourceGutterRenderer *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_get_buffer
+              (renderer: GtkSourceGutterRenderer) : ADDRESS;
+
+(* GtkSourceView *gtk_source_gutter_renderer_get_view(
+                    GtkSourceGutterRenderer *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_get_view
+              (renderer: GtkSourceGutterRenderer) : ADDRESS;
+
+(* GtkSourceGutterRendererAlignmentMode
+     gtk_source_gutter_renderer_get_alignment_mode(
+        GtkSourceGutterRenderer *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_get_alignment_mode
+              (renderer: GtkSourceGutterRenderer)
+              : GtkSourceGutterRendererAlignmentMode;
+
+(* void gtk_source_gutter_renderer_set_alignment_mode(
+          GtkSourceGutterRenderer *renderer,
+          GtkSourceGutterRendererAlignmentMode mode) *)
+PROCEDURE gtk_source_gutter_renderer_set_alignment_mode
+              (renderer: GtkSourceGutterRenderer;
+               mode: GtkSourceGutterRendererAlignmentMode);
+
+(* gfloat gtk_source_gutter_renderer_get_xalign(
+           GtkSourceGutterRenderer *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_get_xalign
+              (renderer: GtkSourceGutterRenderer) : SHORTREAL;
+
+(* void gtk_source_gutter_renderer_set_xalign(
+          GtkSourceGutterRenderer *renderer, gfloat xalign) *)
+PROCEDURE gtk_source_gutter_renderer_set_xalign
+              (renderer: GtkSourceGutterRenderer; xalign: SHORTREAL);
+
+(* gfloat gtk_source_gutter_renderer_get_yalign(
+           GtkSourceGutterRenderer *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_get_yalign
+              (renderer: GtkSourceGutterRenderer) : SHORTREAL;
+
+(* void gtk_source_gutter_renderer_set_yalign(
+          GtkSourceGutterRenderer *renderer, gfloat yalign) *)
+PROCEDURE gtk_source_gutter_renderer_set_yalign
+              (renderer: GtkSourceGutterRenderer; yalign: SHORTREAL);
+
+(* gint gtk_source_gutter_renderer_get_xpad(
+         GtkSourceGutterRenderer *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_get_xpad
+              (renderer: GtkSourceGutterRenderer) : INTEGER;
+
+(* void gtk_source_gutter_renderer_set_xpad(GtkSourceGutterRenderer *renderer,
+                                            gint xpad) *)
+PROCEDURE gtk_source_gutter_renderer_set_xpad
+              (renderer: GtkSourceGutterRenderer; xpad: INTEGER);
+
+(* gint gtk_source_gutter_renderer_get_ypad(
+         GtkSourceGutterRenderer *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_get_ypad
+              (renderer: GtkSourceGutterRenderer) : INTEGER;
+
+(* void gtk_source_gutter_renderer_set_ypad(GtkSourceGutterRenderer *renderer,
+                                            gint ypad) *)
+PROCEDURE gtk_source_gutter_renderer_set_ypad
+              (renderer: GtkSourceGutterRenderer; ypad: INTEGER);
+
+(* void gtk_source_gutter_renderer_activate(GtkSourceGutterRenderer *renderer,
+                                            GtkTextIter *iter,
+                                            GdkRectangle *area, guint button,
+                                            GdkModifierType state,
+                                            gint n_presses) *)
+PROCEDURE gtk_source_gutter_renderer_activate
+              (renderer: GtkSourceGutterRenderer; VAR iter: GtkTextIter;
+               area: ADDRESS; button: CARDINAL; state: CARDINAL;
+               n_presses: INTEGER);
+
+(* gboolean gtk_source_gutter_renderer_query_activatable(
+              GtkSourceGutterRenderer *renderer, GtkTextIter *iter,
+              GdkRectangle *area) *)
+PROCEDURE gtk_source_gutter_renderer_query_activatable
+              (renderer: GtkSourceGutterRenderer; VAR iter: GtkTextIter;
+               area: ADDRESS) : INTEGER;
+
+(* void gtk_source_gutter_renderer_align_cell(
+          GtkSourceGutterRenderer *renderer, guint line, gfloat width,
+          gfloat height, gfloat *x, gfloat *y) *)
+PROCEDURE gtk_source_gutter_renderer_align_cell
+              (renderer: GtkSourceGutterRenderer; line: CARDINAL;
+               width, height: SHORTREAL; VAR x, y: SHORTREAL);
+
+END GtkSourceGutterRenderer.

+ 76 - 0
src/GtkSourceGutterRendererPixbuf.def

@@ -0,0 +1,76 @@
+DEFINITION MODULE FOR "C" GtkSourceGutterRendererPixbuf ;
+
+(*
+   m2-GTK4 - GtkSourceGutterRendererPixbuf: a gutter renderer that draws
+   an icon.  Mapped onto
+   <gtksourceview/gtksourcegutterrendererpixbuf.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceGutterRendererPixbuf,
+   gtk_source_gutter_renderer_pixbuf_new,
+   gtk_source_gutter_renderer_pixbuf_set_gicon,
+   gtk_source_gutter_renderer_pixbuf_get_gicon,
+   gtk_source_gutter_renderer_pixbuf_set_icon_name,
+   gtk_source_gutter_renderer_pixbuf_get_icon_name,
+   gtk_source_gutter_renderer_pixbuf_set_paintable,
+   gtk_source_gutter_renderer_pixbuf_get_paintable,
+   gtk_source_gutter_renderer_pixbuf_set_pixbuf,
+   gtk_source_gutter_renderer_pixbuf_get_pixbuf,
+   gtk_source_gutter_renderer_pixbuf_overlay_paintable;
+
+TYPE
+   GtkSourceGutterRendererPixbuf = ADDRESS;
+
+(* GtkSourceGutterRenderer *gtk_source_gutter_renderer_pixbuf_new(void) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_new () : ADDRESS;
+
+(* void gtk_source_gutter_renderer_pixbuf_set_gicon(
+          GtkSourceGutterRendererPixbuf *renderer, GIcon *icon) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_set_gicon
+              (renderer: GtkSourceGutterRendererPixbuf; icon: ADDRESS);
+
+(* GIcon *gtk_source_gutter_renderer_pixbuf_get_gicon(
+           GtkSourceGutterRendererPixbuf *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_get_gicon
+              (renderer: GtkSourceGutterRendererPixbuf) : ADDRESS;
+
+(* void gtk_source_gutter_renderer_pixbuf_set_icon_name(
+          GtkSourceGutterRendererPixbuf *renderer, const char *icon_name) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_set_icon_name
+              (renderer: GtkSourceGutterRendererPixbuf;
+               icon_name: ARRAY OF CHAR);
+
+(* const char *gtk_source_gutter_renderer_pixbuf_get_icon_name(
+                GtkSourceGutterRendererPixbuf *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_get_icon_name
+              (renderer: GtkSourceGutterRendererPixbuf) : ADDRESS;
+
+(* void gtk_source_gutter_renderer_pixbuf_set_paintable(
+          GtkSourceGutterRendererPixbuf *renderer, GdkPaintable *paintable) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_set_paintable
+              (renderer: GtkSourceGutterRendererPixbuf; paintable: ADDRESS);
+
+(* GdkPaintable *gtk_source_gutter_renderer_pixbuf_get_paintable(
+                 GtkSourceGutterRendererPixbuf *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_get_paintable
+              (renderer: GtkSourceGutterRendererPixbuf) : ADDRESS;
+
+(* void gtk_source_gutter_renderer_pixbuf_set_pixbuf(
+          GtkSourceGutterRendererPixbuf *renderer, GdkPixbuf *pixbuf) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_set_pixbuf
+              (renderer: GtkSourceGutterRendererPixbuf; pixbuf: ADDRESS);
+
+(* GdkPixbuf *gtk_source_gutter_renderer_pixbuf_get_pixbuf(
+               GtkSourceGutterRendererPixbuf *renderer) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_get_pixbuf
+              (renderer: GtkSourceGutterRendererPixbuf) : ADDRESS;
+
+(* void gtk_source_gutter_renderer_pixbuf_overlay_paintable(
+          GtkSourceGutterRendererPixbuf *renderer, GdkPaintable *paintable) *)
+PROCEDURE gtk_source_gutter_renderer_pixbuf_overlay_paintable
+              (renderer: GtkSourceGutterRendererPixbuf; paintable: ADDRESS);
+
+END GtkSourceGutterRendererPixbuf.

+ 52 - 0
src/GtkSourceGutterRendererText.def

@@ -0,0 +1,52 @@
+DEFINITION MODULE FOR "C" GtkSourceGutterRendererText ;
+
+(*
+   m2-GTK4 - GtkSourceGutterRendererText: a gutter renderer that draws
+   text.  Mapped onto <gtksourceview/gtksourcegutterrenderertext.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceGutterRendererText,
+   gtk_source_gutter_renderer_text_new,
+   gtk_source_gutter_renderer_text_set_text,
+   gtk_source_gutter_renderer_text_set_markup,
+   gtk_source_gutter_renderer_text_measure,
+   gtk_source_gutter_renderer_text_measure_markup;
+
+TYPE
+   GtkSourceGutterRendererText = ADDRESS;
+
+(* GtkSourceGutterRenderer *gtk_source_gutter_renderer_text_new(void) *)
+PROCEDURE gtk_source_gutter_renderer_text_new () : ADDRESS;
+
+(* void gtk_source_gutter_renderer_text_set_text(
+          GtkSourceGutterRendererText *renderer, const char *text,
+          gint length) *)
+PROCEDURE gtk_source_gutter_renderer_text_set_text
+              (renderer: GtkSourceGutterRendererText; text: ARRAY OF CHAR;
+               length: INTEGER);
+
+(* void gtk_source_gutter_renderer_text_set_markup(
+          GtkSourceGutterRendererText *renderer, const char *markup,
+          gint length) *)
+PROCEDURE gtk_source_gutter_renderer_text_set_markup
+              (renderer: GtkSourceGutterRendererText; markup: ARRAY OF CHAR;
+               length: INTEGER);
+
+(* void gtk_source_gutter_renderer_text_measure(
+          GtkSourceGutterRendererText *renderer, const char *text,
+          gint *width, gint *height) *)
+PROCEDURE gtk_source_gutter_renderer_text_measure
+              (renderer: GtkSourceGutterRendererText; text: ARRAY OF CHAR;
+               VAR width, height: INTEGER);
+
+(* void gtk_source_gutter_renderer_text_measure_markup(
+          GtkSourceGutterRendererText *renderer, const char *markup,
+          gint *width, gint *height) *)
+PROCEDURE gtk_source_gutter_renderer_text_measure_markup
+              (renderer: GtkSourceGutterRendererText; markup: ARRAY OF CHAR;
+               VAR width, height: INTEGER);
+
+END GtkSourceGutterRendererText.

+ 27 - 0
src/GtkSourceHover.def

@@ -0,0 +1,27 @@
+DEFINITION MODULE FOR "C" GtkSourceHover ;
+
+(*
+   m2-GTK4 - GtkSourceHover: the hover controller of a GtkSourceView.
+   Mapped onto <gtksourceview/gtksourcehover.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceHover,
+   gtk_source_hover_add_provider, gtk_source_hover_remove_provider;
+
+TYPE
+   GtkSourceHover = ADDRESS;
+
+(* void gtk_source_hover_add_provider(GtkSourceHover *self,
+                                      GtkSourceHoverProvider *provider) *)
+PROCEDURE gtk_source_hover_add_provider (self: GtkSourceHover;
+                                         provider: ADDRESS);
+
+(* void gtk_source_hover_remove_provider(GtkSourceHover *self,
+                                         GtkSourceHoverProvider *provider) *)
+PROCEDURE gtk_source_hover_remove_provider (self: GtkSourceHover;
+                                            provider: ADDRESS);
+
+END GtkSourceHover.

+ 42 - 0
src/GtkSourceHoverContext.def

@@ -0,0 +1,42 @@
+DEFINITION MODULE FOR "C" GtkSourceHoverContext ;
+
+(*
+   m2-GTK4 - GtkSourceHoverContext: the context passed to hover
+   providers.  Mapped onto <gtksourceview/gtksourcehovercontext.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+
+EXPORT UNQUALIFIED
+   GtkSourceHoverContext,
+   gtk_source_hover_context_get_buffer, gtk_source_hover_context_get_view,
+   gtk_source_hover_context_get_iter, gtk_source_hover_context_get_bounds;
+
+TYPE
+   GtkSourceHoverContext = ADDRESS;
+
+(* GtkSourceBuffer *gtk_source_hover_context_get_buffer(
+                      GtkSourceHoverContext *self) *)
+PROCEDURE gtk_source_hover_context_get_buffer (self: GtkSourceHoverContext)
+                                               : ADDRESS;
+
+(* GtkSourceView *gtk_source_hover_context_get_view(
+                    GtkSourceHoverContext *self) *)
+PROCEDURE gtk_source_hover_context_get_view (self: GtkSourceHoverContext)
+                                             : ADDRESS;
+
+(* gboolean gtk_source_hover_context_get_iter(GtkSourceHoverContext *self,
+                                              GtkTextIter *iter) *)
+PROCEDURE gtk_source_hover_context_get_iter (self: GtkSourceHoverContext;
+                                             VAR iter: GtkTextIter) : INTEGER;
+
+(* gboolean gtk_source_hover_context_get_bounds(GtkSourceHoverContext *self,
+                                                GtkTextIter *begin,
+                                                GtkTextIter *end) *)
+PROCEDURE gtk_source_hover_context_get_bounds (self: GtkSourceHoverContext;
+                                               VAR begin,
+                                                   theEnd: GtkTextIter)
+                                               : INTEGER;
+
+END GtkSourceHoverContext.

+ 39 - 0
src/GtkSourceHoverDisplay.def

@@ -0,0 +1,39 @@
+DEFINITION MODULE FOR "C" GtkSourceHoverDisplay ;
+
+(*
+   m2-GTK4 - GtkSourceHoverDisplay: the widget container a hover provider
+   populates.  Mapped onto <gtksourceview/gtksourcehoverdisplay.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceHoverDisplay,
+   gtk_source_hover_display_append, gtk_source_hover_display_prepend,
+   gtk_source_hover_display_insert_after, gtk_source_hover_display_remove;
+
+TYPE
+   GtkSourceHoverDisplay = ADDRESS;
+
+(* void gtk_source_hover_display_append(GtkSourceHoverDisplay *self,
+                                        GtkWidget *child) *)
+PROCEDURE gtk_source_hover_display_append (self: GtkSourceHoverDisplay;
+                                           child: ADDRESS);
+
+(* void gtk_source_hover_display_prepend(GtkSourceHoverDisplay *self,
+                                         GtkWidget *child) *)
+PROCEDURE gtk_source_hover_display_prepend (self: GtkSourceHoverDisplay;
+                                            child: ADDRESS);
+
+(* void gtk_source_hover_display_insert_after(GtkSourceHoverDisplay *self,
+                                              GtkWidget *child,
+                                              GtkWidget *sibling) *)
+PROCEDURE gtk_source_hover_display_insert_after
+              (self: GtkSourceHoverDisplay; child, sibling: ADDRESS);
+
+(* void gtk_source_hover_display_remove(GtkSourceHoverDisplay *self,
+                                        GtkWidget *child) *)
+PROCEDURE gtk_source_hover_display_remove (self: GtkSourceHoverDisplay;
+                                           child: ADDRESS);
+
+END GtkSourceHoverDisplay.

+ 32 - 0
src/GtkSourceHoverProvider.def

@@ -0,0 +1,32 @@
+DEFINITION MODULE FOR "C" GtkSourceHoverProvider ;
+
+(*
+   m2-GTK4 - GtkSourceHoverProvider: the interface implemented by hover
+   providers.  Mapped onto <gtksourceview/gtksourcehoverprovider.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceHoverProvider,
+   gtk_source_hover_provider_populate_async,
+   gtk_source_hover_provider_populate_finish;
+
+TYPE
+   GtkSourceHoverProvider = ADDRESS;
+
+(* void gtk_source_hover_provider_populate_async(
+          GtkSourceHoverProvider *self, GtkSourceHoverContext *context,
+          GtkSourceHoverDisplay *display, GCancellable *cancellable,
+          GAsyncReadyCallback callback, gpointer user_data) *)
+PROCEDURE gtk_source_hover_provider_populate_async
+              (self: GtkSourceHoverProvider; context: ADDRESS;
+               display: ADDRESS; cancellable: ADDRESS; callback: ADDRESS;
+               user_data: ADDRESS);
+
+(* gboolean gtk_source_hover_provider_populate_finish(
+              GtkSourceHoverProvider *self, GAsyncResult *result) *)
+PROCEDURE gtk_source_hover_provider_populate_finish
+              (self: GtkSourceHoverProvider; result: ADDRESS) : INTEGER;
+
+END GtkSourceHoverProvider.

+ 37 - 0
src/GtkSourceIndenter.def

@@ -0,0 +1,37 @@
+DEFINITION MODULE FOR "C" GtkSourceIndenter ;
+
+(*
+   m2-GTK4 - GtkSourceIndenter: the interface implemented by custom
+   indentation engines.  Mapped onto
+   <gtksourceview/gtksourceindenter.h>.
+
+   The state is a GdkModifierType mask.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+
+EXPORT UNQUALIFIED
+   GtkSourceIndenter,
+   gtk_source_indenter_indent, gtk_source_indenter_is_trigger;
+
+TYPE
+   GtkSourceIndenter = ADDRESS;
+
+(* void gtk_source_indenter_indent(GtkSourceIndenter *self,
+                                   GtkSourceView *view, GtkTextIter *iter) *)
+PROCEDURE gtk_source_indenter_indent (self: GtkSourceIndenter; view: ADDRESS;
+                                      VAR iter: GtkTextIter);
+
+(* gboolean gtk_source_indenter_is_trigger(GtkSourceIndenter *self,
+                                           GtkSourceView *view,
+                                           GtkTextIter *location,
+                                           GdkModifierType state,
+                                           guint keyval) *)
+PROCEDURE gtk_source_indenter_is_trigger (self: GtkSourceIndenter;
+                                          view: ADDRESS;
+                                          VAR location: GtkTextIter;
+                                          state: CARDINAL;
+                                          keyval: CARDINAL) : INTEGER;
+
+END GtkSourceIndenter.

+ 68 - 0
src/GtkSourceLanguage.def

@@ -0,0 +1,68 @@
+DEFINITION MODULE FOR "C" GtkSourceLanguage ;
+
+(*
+   m2-GTK4 - GtkSourceLanguage: a syntax-highlighting language
+   definition.  Mapped onto <gtksourceview/gtksourcelanguage.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceLanguage,
+   gtk_source_language_get_id, gtk_source_language_get_name,
+   gtk_source_language_get_section, gtk_source_language_get_hidden,
+   gtk_source_language_get_metadata,
+   gtk_source_language_get_mime_types, gtk_source_language_get_globs,
+   gtk_source_language_get_style_ids, gtk_source_language_get_style_name,
+   gtk_source_language_get_style_fallback;
+
+TYPE
+   GtkSourceLanguage = ADDRESS;
+
+(* const char *gtk_source_language_get_id(GtkSourceLanguage *language) *)
+PROCEDURE gtk_source_language_get_id (language: GtkSourceLanguage) : ADDRESS;
+
+(* const char *gtk_source_language_get_name(GtkSourceLanguage *language) *)
+PROCEDURE gtk_source_language_get_name (language: GtkSourceLanguage) : ADDRESS;
+
+(* const char *gtk_source_language_get_section(GtkSourceLanguage *language) *)
+PROCEDURE gtk_source_language_get_section (language: GtkSourceLanguage)
+                                           : ADDRESS;
+
+(* gboolean gtk_source_language_get_hidden(GtkSourceLanguage *language) *)
+PROCEDURE gtk_source_language_get_hidden (language: GtkSourceLanguage)
+                                          : INTEGER;
+
+(* const char *gtk_source_language_get_metadata(GtkSourceLanguage *language,
+                                                 const char *name) *)
+PROCEDURE gtk_source_language_get_metadata (language: GtkSourceLanguage;
+                                            name: ARRAY OF CHAR) : ADDRESS;
+
+(* const char * const *gtk_source_language_get_mime_types(
+                        GtkSourceLanguage *language) *)
+PROCEDURE gtk_source_language_get_mime_types (language: GtkSourceLanguage)
+                                              : ADDRESS;
+
+(* const char * const *gtk_source_language_get_globs(
+                        GtkSourceLanguage *language) *)
+PROCEDURE gtk_source_language_get_globs (language: GtkSourceLanguage)
+                                         : ADDRESS;
+
+(* const char * const *gtk_source_language_get_style_ids(
+                        GtkSourceLanguage *language) *)
+PROCEDURE gtk_source_language_get_style_ids (language: GtkSourceLanguage)
+                                             : ADDRESS;
+
+(* const char *gtk_source_language_get_style_name(GtkSourceLanguage *language,
+                                                   const char *style_id) *)
+PROCEDURE gtk_source_language_get_style_name (language: GtkSourceLanguage;
+                                              style_id: ARRAY OF CHAR)
+                                             : ADDRESS;
+
+(* const char *gtk_source_language_get_style_fallback(
+                 GtkSourceLanguage *language, const char *style_id) *)
+PROCEDURE gtk_source_language_get_style_fallback (language: GtkSourceLanguage;
+                                                  style_id: ARRAY OF CHAR)
+                                                 : ADDRESS;
+
+END GtkSourceLanguage.

+ 69 - 0
src/GtkSourceLanguageManager.def

@@ -0,0 +1,69 @@
+DEFINITION MODULE FOR "C" GtkSourceLanguageManager ;
+
+(*
+   m2-GTK4 - GtkSourceLanguageManager: loads and looks up the available
+   GtkSourceLanguage definitions.  Mapped onto
+   <gtksourceview/gtksourcelanguagemanager.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceLanguageManager,
+   gtk_source_language_manager_new,
+   gtk_source_language_manager_get_default,
+   gtk_source_language_manager_get_language,
+   gtk_source_language_manager_guess_language,
+   gtk_source_language_manager_get_language_ids,
+   gtk_source_language_manager_get_search_path,
+   gtk_source_language_manager_set_search_path,
+   gtk_source_language_manager_append_search_path,
+   gtk_source_language_manager_prepend_search_path;
+
+TYPE
+   GtkSourceLanguageManager = ADDRESS;
+
+(* GtkSourceLanguageManager *gtk_source_language_manager_new(void) *)
+PROCEDURE gtk_source_language_manager_new () : GtkSourceLanguageManager;
+
+(* GtkSourceLanguageManager *gtk_source_language_manager_get_default(void) *)
+PROCEDURE gtk_source_language_manager_get_default () : GtkSourceLanguageManager;
+
+(* GtkSourceLanguage *gtk_source_language_manager_get_language(
+        GtkSourceLanguageManager *lm, const char *id) *)
+PROCEDURE gtk_source_language_manager_get_language
+              (lm: GtkSourceLanguageManager; id: ARRAY OF CHAR) : ADDRESS;
+
+(* GtkSourceLanguage *gtk_source_language_manager_guess_language(
+        GtkSourceLanguageManager *lm, const char *filename,
+        const char *content_type) *)
+PROCEDURE gtk_source_language_manager_guess_language
+              (lm: GtkSourceLanguageManager; filename: ARRAY OF CHAR;
+               content_type: ARRAY OF CHAR) : ADDRESS;
+
+(* const char * const *gtk_source_language_manager_get_language_ids(
+                        GtkSourceLanguageManager *lm) *)
+PROCEDURE gtk_source_language_manager_get_language_ids
+              (lm: GtkSourceLanguageManager) : ADDRESS;
+
+(* const char * const *gtk_source_language_manager_get_search_path(
+                        GtkSourceLanguageManager *lm) *)
+PROCEDURE gtk_source_language_manager_get_search_path
+              (lm: GtkSourceLanguageManager) : ADDRESS;
+
+(* void gtk_source_language_manager_set_search_path(
+          GtkSourceLanguageManager *lm, const char * const *dirs) *)
+PROCEDURE gtk_source_language_manager_set_search_path
+              (lm: GtkSourceLanguageManager; dirs: ADDRESS);
+
+(* void gtk_source_language_manager_append_search_path(
+          GtkSourceLanguageManager *lm, const char *path) *)
+PROCEDURE gtk_source_language_manager_append_search_path
+              (lm: GtkSourceLanguageManager; path: ARRAY OF CHAR);
+
+(* void gtk_source_language_manager_prepend_search_path(
+          GtkSourceLanguageManager *lm, const char *path) *)
+PROCEDURE gtk_source_language_manager_prepend_search_path
+              (lm: GtkSourceLanguageManager; path: ARRAY OF CHAR);
+
+END GtkSourceLanguageManager.

+ 27 - 0
src/GtkSourceMap.def

@@ -0,0 +1,27 @@
+DEFINITION MODULE FOR "C" GtkSourceMap ;
+
+(*
+   m2-GTK4 - GtkSourceMap: a minimap of a GtkSourceView.  Mapped onto
+   <gtksourceview/gtksourcemap.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceMap,
+   gtk_source_map_new,
+   gtk_source_map_get_view, gtk_source_map_set_view;
+
+TYPE
+   GtkSourceMap = ADDRESS;
+
+(* GtkWidget *gtk_source_map_new(void) *)
+PROCEDURE gtk_source_map_new () : GtkSourceMap;
+
+(* GtkSourceView *gtk_source_map_get_view(GtkSourceMap *map) *)
+PROCEDURE gtk_source_map_get_view (map: GtkSourceMap) : ADDRESS;
+
+(* void gtk_source_map_set_view(GtkSourceMap *map, GtkSourceView *view) *)
+PROCEDURE gtk_source_map_set_view (map: GtkSourceMap; view: ADDRESS);
+
+END GtkSourceMap.

+ 34 - 0
src/GtkSourceMark.def

@@ -0,0 +1,34 @@
+DEFINITION MODULE FOR "C" GtkSourceMark ;
+
+(*
+   m2-GTK4 - GtkSourceMark: a GtkTextMark with a category, used for
+   gutter marks.  Mapped onto <gtksourceview/gtksourcemark.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceMark,
+   gtk_source_mark_new, gtk_source_mark_get_category,
+   gtk_source_mark_next, gtk_source_mark_prev;
+
+TYPE
+   GtkSourceMark = ADDRESS;
+
+(* GtkSourceMark *gtk_source_mark_new(const char *name, const char *category) *)
+PROCEDURE gtk_source_mark_new (name, category: ARRAY OF CHAR) : GtkSourceMark;
+
+(* const char *gtk_source_mark_get_category(GtkSourceMark *mark) *)
+PROCEDURE gtk_source_mark_get_category (mark: GtkSourceMark) : ADDRESS;
+
+(* GtkSourceMark *gtk_source_mark_next(GtkSourceMark *mark,
+                                       const char *category) *)
+PROCEDURE gtk_source_mark_next (mark: GtkSourceMark;
+                                category: ARRAY OF CHAR) : ADDRESS;
+
+(* GtkSourceMark *gtk_source_mark_prev(GtkSourceMark *mark,
+                                       const char *category) *)
+PROCEDURE gtk_source_mark_prev (mark: GtkSourceMark;
+                                category: ARRAY OF CHAR) : ADDRESS;
+
+END GtkSourceMark.

+ 90 - 0
src/GtkSourceMarkAttributes.def

@@ -0,0 +1,90 @@
+DEFINITION MODULE FOR "C" GtkSourceMarkAttributes ;
+
+(*
+   m2-GTK4 - GtkSourceMarkAttributes: how a category of GtkSourceMark is
+   rendered in the gutter.  Mapped onto
+   <gtksourceview/gtksourcemarkattributes.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM Gdk IMPORT GdkRGBA;
+
+EXPORT UNQUALIFIED
+   GtkSourceMarkAttributes,
+   gtk_source_mark_attributes_new,
+   gtk_source_mark_attributes_set_gicon, gtk_source_mark_attributes_get_gicon,
+   gtk_source_mark_attributes_set_icon_name,
+   gtk_source_mark_attributes_get_icon_name,
+   gtk_source_mark_attributes_set_pixbuf,
+   gtk_source_mark_attributes_get_pixbuf,
+   gtk_source_mark_attributes_set_background,
+   gtk_source_mark_attributes_get_background,
+   gtk_source_mark_attributes_get_tooltip_text,
+   gtk_source_mark_attributes_get_tooltip_markup,
+   gtk_source_mark_attributes_render_icon;
+
+TYPE
+   GtkSourceMarkAttributes = ADDRESS;
+
+(* GtkSourceMarkAttributes *gtk_source_mark_attributes_new(void) *)
+PROCEDURE gtk_source_mark_attributes_new () : GtkSourceMarkAttributes;
+
+(* void gtk_source_mark_attributes_set_gicon(GtkSourceMarkAttributes *attributes,
+                                             GIcon *gicon) *)
+PROCEDURE gtk_source_mark_attributes_set_gicon
+              (attributes: GtkSourceMarkAttributes; gicon: ADDRESS);
+
+(* GIcon *gtk_source_mark_attributes_get_gicon(
+           GtkSourceMarkAttributes *attributes) *)
+PROCEDURE gtk_source_mark_attributes_get_gicon
+              (attributes: GtkSourceMarkAttributes) : ADDRESS;
+
+(* void gtk_source_mark_attributes_set_icon_name(
+          GtkSourceMarkAttributes *attributes, const char *icon_name) *)
+PROCEDURE gtk_source_mark_attributes_set_icon_name
+              (attributes: GtkSourceMarkAttributes; icon_name: ARRAY OF CHAR);
+
+(* const char *gtk_source_mark_attributes_get_icon_name(
+                 GtkSourceMarkAttributes *attributes) *)
+PROCEDURE gtk_source_mark_attributes_get_icon_name
+              (attributes: GtkSourceMarkAttributes) : ADDRESS;
+
+(* void gtk_source_mark_attributes_set_pixbuf(
+          GtkSourceMarkAttributes *attributes, GdkPixbuf *pixbuf) *)
+PROCEDURE gtk_source_mark_attributes_set_pixbuf
+              (attributes: GtkSourceMarkAttributes; pixbuf: ADDRESS);
+
+(* GdkPixbuf *gtk_source_mark_attributes_get_pixbuf(
+               GtkSourceMarkAttributes *attributes) *)
+PROCEDURE gtk_source_mark_attributes_get_pixbuf
+              (attributes: GtkSourceMarkAttributes) : ADDRESS;
+
+(* void gtk_source_mark_attributes_set_background(
+          GtkSourceMarkAttributes *attributes, const GdkRGBA *background) *)
+PROCEDURE gtk_source_mark_attributes_set_background
+              (attributes: GtkSourceMarkAttributes; VAR background: GdkRGBA);
+
+(* gboolean gtk_source_mark_attributes_get_background(
+              GtkSourceMarkAttributes *attributes, GdkRGBA *background) *)
+PROCEDURE gtk_source_mark_attributes_get_background
+              (attributes: GtkSourceMarkAttributes;
+               VAR background: GdkRGBA) : INTEGER;
+
+(* char *gtk_source_mark_attributes_get_tooltip_text(
+           GtkSourceMarkAttributes *attributes, GtkSourceMark *mark) *)
+PROCEDURE gtk_source_mark_attributes_get_tooltip_text
+              (attributes: GtkSourceMarkAttributes; mark: ADDRESS) : ADDRESS;
+
+(* char *gtk_source_mark_attributes_get_tooltip_markup(
+           GtkSourceMarkAttributes *attributes, GtkSourceMark *mark) *)
+PROCEDURE gtk_source_mark_attributes_get_tooltip_markup
+              (attributes: GtkSourceMarkAttributes; mark: ADDRESS) : ADDRESS;
+
+(* GdkPixbuf *gtk_source_mark_attributes_render_icon(
+               GtkSourceMarkAttributes *attributes, GtkWidget *widget,
+               int size) *)
+PROCEDURE gtk_source_mark_attributes_render_icon
+              (attributes: GtkSourceMarkAttributes; widget: ADDRESS;
+               size: INTEGER) : ADDRESS;
+
+END GtkSourceMarkAttributes.

+ 263 - 0
src/GtkSourcePrintCompositor.def

@@ -0,0 +1,263 @@
+DEFINITION MODULE FOR "C" GtkSourcePrintCompositor ;
+
+(*
+   m2-GTK4 - GtkSourcePrintCompositor: prints a GtkSourceBuffer via the
+   GtkPrint API.  Mapped onto <gtksourceview/gtksourceprintcompositor.h>.
+
+   Margin units use the GtkUnit values (GTK_UNIT_POINTS = 1, ...), and
+   the wrap mode uses GtkWrapMode values (from GtkEnums).
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourcePrintCompositor,
+   gtk_source_print_compositor_new,
+   gtk_source_print_compositor_new_from_view,
+   gtk_source_print_compositor_get_buffer,
+   gtk_source_print_compositor_paginate,
+   gtk_source_print_compositor_draw_page,
+   gtk_source_print_compositor_get_pagination_progress,
+   gtk_source_print_compositor_get_n_pages,
+   gtk_source_print_compositor_set_header_format,
+   gtk_source_print_compositor_set_footer_format,
+   gtk_source_print_compositor_set_body_font_name,
+   gtk_source_print_compositor_get_body_font_name,
+   gtk_source_print_compositor_set_header_font_name,
+   gtk_source_print_compositor_get_header_font_name,
+   gtk_source_print_compositor_set_footer_font_name,
+   gtk_source_print_compositor_get_footer_font_name,
+   gtk_source_print_compositor_set_line_numbers_font_name,
+   gtk_source_print_compositor_get_line_numbers_font_name,
+   gtk_source_print_compositor_set_print_header,
+   gtk_source_print_compositor_get_print_header,
+   gtk_source_print_compositor_set_print_footer,
+   gtk_source_print_compositor_get_print_footer,
+   gtk_source_print_compositor_set_print_line_numbers,
+   gtk_source_print_compositor_get_print_line_numbers,
+   gtk_source_print_compositor_set_highlight_syntax,
+   gtk_source_print_compositor_get_highlight_syntax,
+   gtk_source_print_compositor_set_wrap_mode,
+   gtk_source_print_compositor_get_wrap_mode,
+   gtk_source_print_compositor_set_tab_width,
+   gtk_source_print_compositor_get_tab_width,
+   gtk_source_print_compositor_set_left_margin,
+   gtk_source_print_compositor_get_left_margin,
+   gtk_source_print_compositor_set_right_margin,
+   gtk_source_print_compositor_get_right_margin,
+   gtk_source_print_compositor_set_top_margin,
+   gtk_source_print_compositor_get_top_margin,
+   gtk_source_print_compositor_set_bottom_margin,
+   gtk_source_print_compositor_get_bottom_margin,
+   gtk_source_print_compositor_ignore_tag;
+
+TYPE
+   GtkSourcePrintCompositor = ADDRESS;
+
+(* GtkSourcePrintCompositor *gtk_source_print_compositor_new(
+                               GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_print_compositor_new (buffer: ADDRESS)
+                                           : GtkSourcePrintCompositor;
+
+(* GtkSourcePrintCompositor *gtk_source_print_compositor_new_from_view(
+                               GtkSourceView *view) *)
+PROCEDURE gtk_source_print_compositor_new_from_view (view: ADDRESS)
+                                                     : GtkSourcePrintCompositor;
+
+(* GtkSourceBuffer *gtk_source_print_compositor_get_buffer(
+                      GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_buffer
+              (compositor: GtkSourcePrintCompositor) : ADDRESS;
+
+(* gboolean gtk_source_print_compositor_paginate(
+              GtkSourcePrintCompositor *compositor,
+              GtkPrintContext *context) *)
+PROCEDURE gtk_source_print_compositor_paginate
+              (compositor: GtkSourcePrintCompositor; context: ADDRESS)
+              : INTEGER;
+
+(* void gtk_source_print_compositor_draw_page(
+          GtkSourcePrintCompositor *compositor, GtkPrintContext *context,
+          gint page_nr) *)
+PROCEDURE gtk_source_print_compositor_draw_page
+              (compositor: GtkSourcePrintCompositor; context: ADDRESS;
+               page_nr: INTEGER);
+
+(* double gtk_source_print_compositor_get_pagination_progress(
+             GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_pagination_progress
+              (compositor: GtkSourcePrintCompositor) : REAL;
+
+(* gint gtk_source_print_compositor_get_n_pages(
+         GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_n_pages
+              (compositor: GtkSourcePrintCompositor) : INTEGER;
+
+(* void gtk_source_print_compositor_set_header_format(
+          GtkSourcePrintCompositor *compositor, gboolean separator,
+          const char *left, const char *center, const char *right) *)
+PROCEDURE gtk_source_print_compositor_set_header_format
+              (compositor: GtkSourcePrintCompositor; separator: INTEGER;
+               left, center, right: ARRAY OF CHAR);
+
+(* void gtk_source_print_compositor_set_footer_format(
+          GtkSourcePrintCompositor *compositor, gboolean separator,
+          const char *left, const char *center, const char *right) *)
+PROCEDURE gtk_source_print_compositor_set_footer_format
+              (compositor: GtkSourcePrintCompositor; separator: INTEGER;
+               left, center, right: ARRAY OF CHAR);
+
+(* void gtk_source_print_compositor_set_body_font_name(
+          GtkSourcePrintCompositor *compositor, const char *font_name) *)
+PROCEDURE gtk_source_print_compositor_set_body_font_name
+              (compositor: GtkSourcePrintCompositor; font_name: ARRAY OF CHAR);
+
+(* const char *gtk_source_print_compositor_get_body_font_name(
+                GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_body_font_name
+              (compositor: GtkSourcePrintCompositor) : ADDRESS;
+
+(* void gtk_source_print_compositor_set_header_font_name(
+          GtkSourcePrintCompositor *compositor, const char *font_name) *)
+PROCEDURE gtk_source_print_compositor_set_header_font_name
+              (compositor: GtkSourcePrintCompositor; font_name: ARRAY OF CHAR);
+
+(* const char *gtk_source_print_compositor_get_header_font_name(
+                GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_header_font_name
+              (compositor: GtkSourcePrintCompositor) : ADDRESS;
+
+(* void gtk_source_print_compositor_set_footer_font_name(
+          GtkSourcePrintCompositor *compositor, const char *font_name) *)
+PROCEDURE gtk_source_print_compositor_set_footer_font_name
+              (compositor: GtkSourcePrintCompositor; font_name: ARRAY OF CHAR);
+
+(* const char *gtk_source_print_compositor_get_footer_font_name(
+                GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_footer_font_name
+              (compositor: GtkSourcePrintCompositor) : ADDRESS;
+
+(* void gtk_source_print_compositor_set_line_numbers_font_name(
+          GtkSourcePrintCompositor *compositor, const char *font_name) *)
+PROCEDURE gtk_source_print_compositor_set_line_numbers_font_name
+              (compositor: GtkSourcePrintCompositor; font_name: ARRAY OF CHAR);
+
+(* const char *gtk_source_print_compositor_get_line_numbers_font_name(
+                GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_line_numbers_font_name
+              (compositor: GtkSourcePrintCompositor) : ADDRESS;
+
+(* void gtk_source_print_compositor_set_print_header(
+          GtkSourcePrintCompositor *compositor, gboolean print) *)
+PROCEDURE gtk_source_print_compositor_set_print_header
+              (compositor: GtkSourcePrintCompositor; print: INTEGER);
+
+(* gboolean gtk_source_print_compositor_get_print_header(
+              GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_print_header
+              (compositor: GtkSourcePrintCompositor) : INTEGER;
+
+(* void gtk_source_print_compositor_set_print_footer(
+          GtkSourcePrintCompositor *compositor, gboolean print) *)
+PROCEDURE gtk_source_print_compositor_set_print_footer
+              (compositor: GtkSourcePrintCompositor; print: INTEGER);
+
+(* gboolean gtk_source_print_compositor_get_print_footer(
+              GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_print_footer
+              (compositor: GtkSourcePrintCompositor) : INTEGER;
+
+(* void gtk_source_print_compositor_set_print_line_numbers(
+          GtkSourcePrintCompositor *compositor, guint interval) *)
+PROCEDURE gtk_source_print_compositor_set_print_line_numbers
+              (compositor: GtkSourcePrintCompositor; interval: CARDINAL);
+
+(* guint gtk_source_print_compositor_get_print_line_numbers(
+          GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_print_line_numbers
+              (compositor: GtkSourcePrintCompositor) : CARDINAL;
+
+(* void gtk_source_print_compositor_set_highlight_syntax(
+          GtkSourcePrintCompositor *compositor, gboolean highlight) *)
+PROCEDURE gtk_source_print_compositor_set_highlight_syntax
+              (compositor: GtkSourcePrintCompositor; highlight: INTEGER);
+
+(* gboolean gtk_source_print_compositor_get_highlight_syntax(
+              GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_highlight_syntax
+              (compositor: GtkSourcePrintCompositor) : INTEGER;
+
+(* void gtk_source_print_compositor_set_wrap_mode(
+          GtkSourcePrintCompositor *compositor, GtkWrapMode wrap_mode) *)
+PROCEDURE gtk_source_print_compositor_set_wrap_mode
+              (compositor: GtkSourcePrintCompositor; wrap_mode: CARDINAL);
+
+(* GtkWrapMode gtk_source_print_compositor_get_wrap_mode(
+                GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_wrap_mode
+              (compositor: GtkSourcePrintCompositor) : CARDINAL;
+
+(* void gtk_source_print_compositor_set_tab_width(
+          GtkSourcePrintCompositor *compositor, guint width) *)
+PROCEDURE gtk_source_print_compositor_set_tab_width
+              (compositor: GtkSourcePrintCompositor; width: CARDINAL);
+
+(* guint gtk_source_print_compositor_get_tab_width(
+          GtkSourcePrintCompositor *compositor) *)
+PROCEDURE gtk_source_print_compositor_get_tab_width
+              (compositor: GtkSourcePrintCompositor) : CARDINAL;
+
+(* void gtk_source_print_compositor_set_left_margin(
+          GtkSourcePrintCompositor *compositor, gdouble margin,
+          GtkUnit unit) *)
+PROCEDURE gtk_source_print_compositor_set_left_margin
+              (compositor: GtkSourcePrintCompositor; margin: REAL;
+               unit: CARDINAL);
+
+(* gdouble gtk_source_print_compositor_get_left_margin(
+            GtkSourcePrintCompositor *compositor, GtkUnit unit) *)
+PROCEDURE gtk_source_print_compositor_get_left_margin
+              (compositor: GtkSourcePrintCompositor; unit: CARDINAL) : REAL;
+
+(* void gtk_source_print_compositor_set_right_margin(
+          GtkSourcePrintCompositor *compositor, gdouble margin,
+          GtkUnit unit) *)
+PROCEDURE gtk_source_print_compositor_set_right_margin
+              (compositor: GtkSourcePrintCompositor; margin: REAL;
+               unit: CARDINAL);
+
+(* gdouble gtk_source_print_compositor_get_right_margin(
+            GtkSourcePrintCompositor *compositor, GtkUnit unit) *)
+PROCEDURE gtk_source_print_compositor_get_right_margin
+              (compositor: GtkSourcePrintCompositor; unit: CARDINAL) : REAL;
+
+(* void gtk_source_print_compositor_set_top_margin(
+          GtkSourcePrintCompositor *compositor, gdouble margin,
+          GtkUnit unit) *)
+PROCEDURE gtk_source_print_compositor_set_top_margin
+              (compositor: GtkSourcePrintCompositor; margin: REAL;
+               unit: CARDINAL);
+
+(* gdouble gtk_source_print_compositor_get_top_margin(
+            GtkSourcePrintCompositor *compositor, GtkUnit unit) *)
+PROCEDURE gtk_source_print_compositor_get_top_margin
+              (compositor: GtkSourcePrintCompositor; unit: CARDINAL) : REAL;
+
+(* void gtk_source_print_compositor_set_bottom_margin(
+          GtkSourcePrintCompositor *compositor, gdouble margin,
+          GtkUnit unit) *)
+PROCEDURE gtk_source_print_compositor_set_bottom_margin
+              (compositor: GtkSourcePrintCompositor; margin: REAL;
+               unit: CARDINAL);
+
+(* gdouble gtk_source_print_compositor_get_bottom_margin(
+            GtkSourcePrintCompositor *compositor, GtkUnit unit) *)
+PROCEDURE gtk_source_print_compositor_get_bottom_margin
+              (compositor: GtkSourcePrintCompositor; unit: CARDINAL) : REAL;
+
+(* void gtk_source_print_compositor_ignore_tag(
+          GtkSourcePrintCompositor *compositor, const char *tag_name) *)
+PROCEDURE gtk_source_print_compositor_ignore_tag
+              (compositor: GtkSourcePrintCompositor; tag: ADDRESS);
+
+END GtkSourcePrintCompositor.

+ 84 - 0
src/GtkSourceRegion.def

@@ -0,0 +1,84 @@
+DEFINITION MODULE FOR "C" GtkSourceRegion ;
+
+(*
+   m2-GTK4 - GtkSourceRegion: a set of subregions of a buffer.  Mapped
+   onto <gtksourceview/gtksourceregion.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+FROM GtkSourceRegionIter IMPORT GtkSourceRegionIter;
+
+EXPORT UNQUALIFIED
+   GtkSourceRegion,
+   gtk_source_region_new, gtk_source_region_get_buffer,
+   gtk_source_region_get_bounds, gtk_source_region_is_empty,
+   gtk_source_region_add_subregion, gtk_source_region_add_region,
+   gtk_source_region_subtract_subregion, gtk_source_region_subtract_region,
+   gtk_source_region_intersect_subregion, gtk_source_region_intersect_region,
+   gtk_source_region_get_start_region_iter, gtk_source_region_to_string;
+
+TYPE
+   GtkSourceRegion = ADDRESS;
+
+(* GtkSourceRegion *gtk_source_region_new(GtkTextBuffer *buffer) *)
+PROCEDURE gtk_source_region_new (buffer: ADDRESS) : GtkSourceRegion;
+
+(* GtkTextBuffer *gtk_source_region_get_buffer(GtkSourceRegion *region) *)
+PROCEDURE gtk_source_region_get_buffer (region: GtkSourceRegion) : ADDRESS;
+
+(* gboolean gtk_source_region_get_bounds(GtkSourceRegion *region,
+                                         GtkTextIter *start,
+                                         GtkTextIter *end) *)
+PROCEDURE gtk_source_region_get_bounds (region: GtkSourceRegion;
+                                        VAR start, theEnd: GtkTextIter)
+                                        : INTEGER;
+
+(* gboolean gtk_source_region_is_empty(GtkSourceRegion *region) *)
+PROCEDURE gtk_source_region_is_empty (region: GtkSourceRegion) : INTEGER;
+
+(* void gtk_source_region_add_subregion(GtkSourceRegion *region,
+                                        GtkTextIter *start,
+                                        GtkTextIter *end) *)
+PROCEDURE gtk_source_region_add_subregion (region: GtkSourceRegion;
+                                           VAR start, theEnd: GtkTextIter);
+
+(* void gtk_source_region_add_region(GtkSourceRegion *region,
+                                     GtkSourceRegion *region_to_add) *)
+PROCEDURE gtk_source_region_add_region (region: GtkSourceRegion;
+                                        region_to_add: ADDRESS);
+
+(* void gtk_source_region_subtract_subregion(GtkSourceRegion *region,
+                                             GtkTextIter *start,
+                                             GtkTextIter *end) *)
+PROCEDURE gtk_source_region_subtract_subregion (region: GtkSourceRegion;
+                                                VAR start,
+                                                    theEnd: GtkTextIter);
+
+(* void gtk_source_region_subtract_region(GtkSourceRegion *region,
+                                          GtkSourceRegion *region_to_subtract) *)
+PROCEDURE gtk_source_region_subtract_region (region: GtkSourceRegion;
+                                             region_to_subtract: ADDRESS);
+
+(* GtkSourceRegion *gtk_source_region_intersect_subregion(
+                     GtkSourceRegion *region, GtkTextIter *start,
+                     GtkTextIter *end) *)
+PROCEDURE gtk_source_region_intersect_subregion (region: GtkSourceRegion;
+                                                 VAR start,
+                                                     theEnd: GtkTextIter)
+                                                : ADDRESS;
+
+(* GtkSourceRegion *gtk_source_region_intersect_region(
+                     GtkSourceRegion *region1, GtkSourceRegion *region2) *)
+PROCEDURE gtk_source_region_intersect_region (region1,
+                                              region2: ADDRESS) : ADDRESS;
+
+(* void gtk_source_region_get_start_region_iter(GtkSourceRegion *region,
+                                                GtkSourceRegionIter *iter) *)
+PROCEDURE gtk_source_region_get_start_region_iter
+              (region: GtkSourceRegion; VAR iter: GtkSourceRegionIter);
+
+(* char *gtk_source_region_to_string(GtkSourceRegion *region) *)
+PROCEDURE gtk_source_region_to_string (region: GtkSourceRegion) : ADDRESS;
+
+END GtkSourceRegion.

+ 34 - 0
src/GtkSourceRegionIter.def

@@ -0,0 +1,34 @@
+DEFINITION MODULE FOR "C" GtkSourceRegionIter ;
+
+(*
+   m2-GTK4 - GtkSourceRegionIter: an iterator over a GtkSourceRegion.
+   Mapped onto <gtksourceview/gtksourceregion.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+
+EXPORT UNQUALIFIED
+   GtkSourceRegionIter,
+   gtk_source_region_iter_get_subregion,
+   gtk_source_region_iter_is_end, gtk_source_region_iter_next;
+
+TYPE
+   GtkSourceRegionIter = ADDRESS;
+
+(* gboolean gtk_source_region_iter_get_subregion(GtkSourceRegionIter *iter,
+                                                  GtkTextIter *start,
+                                                  GtkTextIter *end) *)
+PROCEDURE gtk_source_region_iter_get_subregion
+              (VAR iter: GtkSourceRegionIter; VAR start,
+               theEnd: GtkTextIter) : INTEGER;
+
+(* gboolean gtk_source_region_iter_is_end(GtkSourceRegionIter *iter) *)
+PROCEDURE gtk_source_region_iter_is_end (VAR iter: GtkSourceRegionIter)
+                                         : INTEGER;
+
+(* gboolean gtk_source_region_iter_next(GtkSourceRegionIter *iter) *)
+PROCEDURE gtk_source_region_iter_next (VAR iter: GtkSourceRegionIter)
+                                       : INTEGER;
+
+END GtkSourceRegionIter.

+ 159 - 0
src/GtkSourceSearchContext.def

@@ -0,0 +1,159 @@
+DEFINITION MODULE FOR "C" GtkSourceSearchContext ;
+
+(*
+   m2-GTK4 - GtkSourceSearchContext: performs searches in a buffer using
+   a GtkSourceSearchSettings.  Mapped onto
+   <gtksourceview/gtksourcesearchcontext.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+
+EXPORT UNQUALIFIED
+   GtkSourceSearchContext,
+   gtk_source_search_context_new,
+   gtk_source_search_context_get_buffer,
+   gtk_source_search_context_get_settings,
+   gtk_source_search_context_get_highlight,
+   gtk_source_search_context_set_highlight,
+   gtk_source_search_context_get_match_style,
+   gtk_source_search_context_set_match_style,
+   gtk_source_search_context_get_regex_error,
+   gtk_source_search_context_get_occurrences_count,
+   gtk_source_search_context_get_occurrence_position,
+   gtk_source_search_context_forward,
+   gtk_source_search_context_backward,
+   gtk_source_search_context_forward_async,
+   gtk_source_search_context_forward_finish,
+   gtk_source_search_context_backward_async,
+   gtk_source_search_context_backward_finish,
+   gtk_source_search_context_replace,
+   gtk_source_search_context_replace_all;
+
+TYPE
+   GtkSourceSearchContext = ADDRESS;
+
+(* GtkSourceSearchContext *gtk_source_search_context_new(
+        GtkSourceBuffer *buffer, GtkSourceSearchSettings *settings) *)
+PROCEDURE gtk_source_search_context_new (buffer, settings: ADDRESS)
+                                         : GtkSourceSearchContext;
+
+(* GtkSourceBuffer *gtk_source_search_context_get_buffer(
+                      GtkSourceSearchContext *search) *)
+PROCEDURE gtk_source_search_context_get_buffer (search: GtkSourceSearchContext)
+                                                : ADDRESS;
+
+(* GtkSourceSearchSettings *gtk_source_search_context_get_settings(
+        GtkSourceSearchContext *search) *)
+PROCEDURE gtk_source_search_context_get_settings
+              (search: GtkSourceSearchContext) : ADDRESS;
+
+(* gboolean gtk_source_search_context_get_highlight(
+              GtkSourceSearchContext *search) *)
+PROCEDURE gtk_source_search_context_get_highlight
+              (search: GtkSourceSearchContext) : INTEGER;
+
+(* void gtk_source_search_context_set_highlight(
+          GtkSourceSearchContext *search, gboolean highlight) *)
+PROCEDURE gtk_source_search_context_set_highlight
+              (search: GtkSourceSearchContext; highlight: INTEGER);
+
+(* GtkSourceStyle *gtk_source_search_context_get_match_style(
+                     GtkSourceSearchContext *search) *)
+PROCEDURE gtk_source_search_context_get_match_style
+              (search: GtkSourceSearchContext) : ADDRESS;
+
+(* void gtk_source_search_context_set_match_style(
+          GtkSourceSearchContext *search, GtkSourceStyle *match_style) *)
+PROCEDURE gtk_source_search_context_set_match_style
+              (search: GtkSourceSearchContext; match_style: ADDRESS);
+
+(* const GError *gtk_source_search_context_get_regex_error(
+                    GtkSourceSearchContext *search) *)
+PROCEDURE gtk_source_search_context_get_regex_error
+              (search: GtkSourceSearchContext) : ADDRESS;
+
+(* gint gtk_source_search_context_get_occurrences_count(
+         GtkSourceSearchContext *search) *)
+PROCEDURE gtk_source_search_context_get_occurrences_count
+              (search: GtkSourceSearchContext) : INTEGER;
+
+(* gint gtk_source_search_context_get_occurrence_position(
+         GtkSourceSearchContext *search, GtkTextIter *match_start,
+         GtkTextIter *match_end) *)
+PROCEDURE gtk_source_search_context_get_occurrence_position
+              (search: GtkSourceSearchContext; VAR match_start,
+               match_end: GtkTextIter) : INTEGER;
+
+(* gboolean gtk_source_search_context_forward(GtkSourceSearchContext *search,
+                                              GtkTextIter *iter,
+                                              GtkTextIter *match_start,
+                                              GtkTextIter *match_end,
+                                              gboolean *has_wrapped_around) *)
+PROCEDURE gtk_source_search_context_forward
+              (search: GtkSourceSearchContext; VAR iter, match_start,
+               match_end: GtkTextIter; VAR has_wrapped_around: INTEGER)
+              : INTEGER;
+
+(* gboolean gtk_source_search_context_backward(GtkSourceSearchContext *search,
+                                               GtkTextIter *iter,
+                                               GtkTextIter *match_start,
+                                               GtkTextIter *match_end,
+                                               gboolean *has_wrapped_around) *)
+PROCEDURE gtk_source_search_context_backward
+              (search: GtkSourceSearchContext; VAR iter, match_start,
+               match_end: GtkTextIter; VAR has_wrapped_around: INTEGER)
+              : INTEGER;
+
+(* void gtk_source_search_context_forward_async(
+          GtkSourceSearchContext *search, GtkTextIter *iter,
+          GCancellable *cancellable, GAsyncReadyCallback callback,
+          gpointer user_data) *)
+PROCEDURE gtk_source_search_context_forward_async
+              (search: GtkSourceSearchContext; VAR iter: GtkTextIter;
+               cancellable: ADDRESS; callback: ADDRESS; user_data: ADDRESS);
+
+(* gboolean gtk_source_search_context_forward_finish(
+              GtkSourceSearchContext *search, GAsyncResult *result,
+              GtkTextIter *match_start, GtkTextIter *match_end,
+              gboolean *has_wrapped_around) *)
+PROCEDURE gtk_source_search_context_forward_finish
+              (search: GtkSourceSearchContext; result: ADDRESS;
+               VAR match_start, match_end: GtkTextIter;
+               VAR has_wrapped_around: INTEGER) : INTEGER;
+
+(* void gtk_source_search_context_backward_async(
+          GtkSourceSearchContext *search, GtkTextIter *iter,
+          GCancellable *cancellable, GAsyncReadyCallback callback,
+          gpointer user_data) *)
+PROCEDURE gtk_source_search_context_backward_async
+              (search: GtkSourceSearchContext; VAR iter: GtkTextIter;
+               cancellable: ADDRESS; callback: ADDRESS; user_data: ADDRESS);
+
+(* gboolean gtk_source_search_context_backward_finish(
+              GtkSourceSearchContext *search, GAsyncResult *result,
+              GtkTextIter *match_start, GtkTextIter *match_end,
+              gboolean *has_wrapped_around) *)
+PROCEDURE gtk_source_search_context_backward_finish
+              (search: GtkSourceSearchContext; result: ADDRESS;
+               VAR match_start, match_end: GtkTextIter;
+               VAR has_wrapped_around: INTEGER) : INTEGER;
+
+(* gboolean gtk_source_search_context_replace(GtkSourceSearchContext *search,
+                                              GtkTextIter *match_start,
+                                              GtkTextIter *match_end,
+                                              const char *replace,
+                                              gint replace_length) *)
+PROCEDURE gtk_source_search_context_replace
+              (search: GtkSourceSearchContext; VAR match_start,
+               match_end: GtkTextIter; replace: ARRAY OF CHAR;
+               replace_length: INTEGER) : INTEGER;
+
+(* guint gtk_source_search_context_replace_all(GtkSourceSearchContext *search,
+                                               const char *replace,
+                                               gint replace_length) *)
+PROCEDURE gtk_source_search_context_replace_all
+              (search: GtkSourceSearchContext; replace: ARRAY OF CHAR;
+               replace_length: INTEGER) : CARDINAL;
+
+END GtkSourceSearchContext.

+ 93 - 0
src/GtkSourceSearchSettings.def

@@ -0,0 +1,93 @@
+DEFINITION MODULE FOR "C" GtkSourceSearchSettings ;
+
+(*
+   m2-GTK4 - GtkSourceSearchSettings: the settings for a
+   GtkSourceSearchContext.  Mapped onto
+   <gtksourceview/gtksourcesearchsettings.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceSearchSettings,
+   gtk_source_search_settings_new,
+   gtk_source_search_settings_get_search_text,
+   gtk_source_search_settings_set_search_text,
+   gtk_source_search_settings_get_case_sensitive,
+   gtk_source_search_settings_set_case_sensitive,
+   gtk_source_search_settings_get_at_word_boundaries,
+   gtk_source_search_settings_set_at_word_boundaries,
+   gtk_source_search_settings_get_regex_enabled,
+   gtk_source_search_settings_set_regex_enabled,
+   gtk_source_search_settings_get_wrap_around,
+   gtk_source_search_settings_set_wrap_around,
+   gtk_source_search_settings_get_visible_only,
+   gtk_source_search_settings_set_visible_only;
+
+TYPE
+   GtkSourceSearchSettings = ADDRESS;
+
+(* GtkSourceSearchSettings *gtk_source_search_settings_new(void) *)
+PROCEDURE gtk_source_search_settings_new () : GtkSourceSearchSettings;
+
+(* const char *gtk_source_search_settings_get_search_text(
+                GtkSourceSearchSettings *settings) *)
+PROCEDURE gtk_source_search_settings_get_search_text
+              (settings: GtkSourceSearchSettings) : ADDRESS;
+
+(* void gtk_source_search_settings_set_search_text(
+          GtkSourceSearchSettings *settings, const char *search_text) *)
+PROCEDURE gtk_source_search_settings_set_search_text
+              (settings: GtkSourceSearchSettings; search_text: ARRAY OF CHAR);
+
+(* gboolean gtk_source_search_settings_get_case_sensitive(
+              GtkSourceSearchSettings *settings) *)
+PROCEDURE gtk_source_search_settings_get_case_sensitive
+              (settings: GtkSourceSearchSettings) : INTEGER;
+
+(* void gtk_source_search_settings_set_case_sensitive(
+          GtkSourceSearchSettings *settings, gboolean case_sensitive) *)
+PROCEDURE gtk_source_search_settings_set_case_sensitive
+              (settings: GtkSourceSearchSettings; case_sensitive: INTEGER);
+
+(* gboolean gtk_source_search_settings_get_at_word_boundaries(
+              GtkSourceSearchSettings *settings) *)
+PROCEDURE gtk_source_search_settings_get_at_word_boundaries
+              (settings: GtkSourceSearchSettings) : INTEGER;
+
+(* void gtk_source_search_settings_set_at_word_boundaries(
+          GtkSourceSearchSettings *settings, gboolean at_word_boundaries) *)
+PROCEDURE gtk_source_search_settings_set_at_word_boundaries
+              (settings: GtkSourceSearchSettings; at_word_boundaries: INTEGER);
+
+(* gboolean gtk_source_search_settings_get_regex_enabled(
+              GtkSourceSearchSettings *settings) *)
+PROCEDURE gtk_source_search_settings_get_regex_enabled
+              (settings: GtkSourceSearchSettings) : INTEGER;
+
+(* void gtk_source_search_settings_set_regex_enabled(
+          GtkSourceSearchSettings *settings, gboolean regex_enabled) *)
+PROCEDURE gtk_source_search_settings_set_regex_enabled
+              (settings: GtkSourceSearchSettings; regex_enabled: INTEGER);
+
+(* gboolean gtk_source_search_settings_get_wrap_around(
+              GtkSourceSearchSettings *settings) *)
+PROCEDURE gtk_source_search_settings_get_wrap_around
+              (settings: GtkSourceSearchSettings) : INTEGER;
+
+(* void gtk_source_search_settings_set_wrap_around(
+          GtkSourceSearchSettings *settings, gboolean wrap_around) *)
+PROCEDURE gtk_source_search_settings_set_wrap_around
+              (settings: GtkSourceSearchSettings; wrap_around: INTEGER);
+
+(* gboolean gtk_source_search_settings_get_visible_only(
+              GtkSourceSearchSettings *settings) *)
+PROCEDURE gtk_source_search_settings_get_visible_only
+              (settings: GtkSourceSearchSettings) : INTEGER;
+
+(* void gtk_source_search_settings_set_visible_only(
+          GtkSourceSearchSettings *settings, gboolean visible_only) *)
+PROCEDURE gtk_source_search_settings_set_visible_only
+              (settings: GtkSourceSearchSettings; visible_only: INTEGER);
+
+END GtkSourceSearchSettings.

+ 95 - 0
src/GtkSourceSnippet.def

@@ -0,0 +1,95 @@
+DEFINITION MODULE FOR "C" GtkSourceSnippet ;
+
+(*
+   m2-GTK4 - GtkSourceSnippet: a snippet (a piece of text with
+   placeholders).  Mapped onto <gtksourceview/gtksourcesnippet.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceSnippet,
+   gtk_source_snippet_new, gtk_source_snippet_new_parsed,
+   gtk_source_snippet_copy, gtk_source_snippet_add_chunk,
+   gtk_source_snippet_get_trigger, gtk_source_snippet_set_trigger,
+   gtk_source_snippet_get_name, gtk_source_snippet_set_name,
+   gtk_source_snippet_get_description, gtk_source_snippet_set_description,
+   gtk_source_snippet_get_language_id, gtk_source_snippet_set_language_id,
+   gtk_source_snippet_get_context,
+   gtk_source_snippet_get_n_chunks, gtk_source_snippet_get_nth_chunk,
+   gtk_source_snippet_get_focus_position;
+
+TYPE
+   GtkSourceSnippet = ADDRESS;
+
+(* GtkSourceSnippet *gtk_source_snippet_new(const char *trigger,
+                                            const char *language_id) *)
+PROCEDURE gtk_source_snippet_new (trigger, language_id: ARRAY OF CHAR)
+                                  : GtkSourceSnippet;
+
+(* GtkSourceSnippet *gtk_source_snippet_new_parsed(const char *text) *)
+PROCEDURE gtk_source_snippet_new_parsed (text: ARRAY OF CHAR)
+                                         : GtkSourceSnippet;
+
+(* GtkSourceSnippet *gtk_source_snippet_copy(GtkSourceSnippet *snippet) *)
+PROCEDURE gtk_source_snippet_copy (snippet: GtkSourceSnippet) : ADDRESS;
+
+(* void gtk_source_snippet_add_chunk(GtkSourceSnippet *snippet,
+                                     GtkSourceSnippetChunk *chunk) *)
+PROCEDURE gtk_source_snippet_add_chunk (snippet: GtkSourceSnippet;
+                                        chunk: ADDRESS);
+
+(* const char *gtk_source_snippet_get_trigger(GtkSourceSnippet *snippet) *)
+PROCEDURE gtk_source_snippet_get_trigger (snippet: GtkSourceSnippet)
+                                          : ADDRESS;
+
+(* void gtk_source_snippet_set_trigger(GtkSourceSnippet *snippet,
+                                       const char *trigger) *)
+PROCEDURE gtk_source_snippet_set_trigger (snippet: GtkSourceSnippet;
+                                          trigger: ARRAY OF CHAR);
+
+(* const char *gtk_source_snippet_get_name(GtkSourceSnippet *snippet) *)
+PROCEDURE gtk_source_snippet_get_name (snippet: GtkSourceSnippet) : ADDRESS;
+
+(* void gtk_source_snippet_set_name(GtkSourceSnippet *snippet,
+                                    const char *name) *)
+PROCEDURE gtk_source_snippet_set_name (snippet: GtkSourceSnippet;
+                                       name: ARRAY OF CHAR);
+
+(* const char *gtk_source_snippet_get_description(GtkSourceSnippet *snippet) *)
+PROCEDURE gtk_source_snippet_get_description (snippet: GtkSourceSnippet)
+                                              : ADDRESS;
+
+(* void gtk_source_snippet_set_description(GtkSourceSnippet *snippet,
+                                           const char *description) *)
+PROCEDURE gtk_source_snippet_set_description (snippet: GtkSourceSnippet;
+                                              description: ARRAY OF CHAR);
+
+(* const char *gtk_source_snippet_get_language_id(GtkSourceSnippet *snippet) *)
+PROCEDURE gtk_source_snippet_get_language_id (snippet: GtkSourceSnippet)
+                                              : ADDRESS;
+
+(* void gtk_source_snippet_set_language_id(GtkSourceSnippet *snippet,
+                                           const char *language_id) *)
+PROCEDURE gtk_source_snippet_set_language_id (snippet: GtkSourceSnippet;
+                                              language_id: ARRAY OF CHAR);
+
+(* GtkSourceSnippetContext *gtk_source_snippet_get_context(
+                             GtkSourceSnippet *snippet) *)
+PROCEDURE gtk_source_snippet_get_context (snippet: GtkSourceSnippet)
+                                          : ADDRESS;
+
+(* guint gtk_source_snippet_get_n_chunks(GtkSourceSnippet *snippet) *)
+PROCEDURE gtk_source_snippet_get_n_chunks (snippet: GtkSourceSnippet)
+                                           : CARDINAL;
+
+(* GtkSourceSnippetChunk *gtk_source_snippet_get_nth_chunk(
+                           GtkSourceSnippet *snippet, guint nth) *)
+PROCEDURE gtk_source_snippet_get_nth_chunk (snippet: GtkSourceSnippet;
+                                            nth: CARDINAL) : ADDRESS;
+
+(* gint gtk_source_snippet_get_focus_position(GtkSourceSnippet *snippet) *)
+PROCEDURE gtk_source_snippet_get_focus_position (snippet: GtkSourceSnippet)
+                                                 : INTEGER;
+
+END GtkSourceSnippet.

+ 93 - 0
src/GtkSourceSnippetChunk.def

@@ -0,0 +1,93 @@
+DEFINITION MODULE FOR "C" GtkSourceSnippetChunk ;
+
+(*
+   m2-GTK4 - GtkSourceSnippetChunk: one chunk (text or placeholder) of a
+   GtkSourceSnippet.  Mapped onto <gtksourceview/gtksourcesnippetchunk.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceSnippetChunk,
+   gtk_source_snippet_chunk_new, gtk_source_snippet_chunk_copy,
+   gtk_source_snippet_chunk_get_spec, gtk_source_snippet_chunk_set_spec,
+   gtk_source_snippet_chunk_get_text, gtk_source_snippet_chunk_set_text,
+   gtk_source_snippet_chunk_get_text_set,
+   gtk_source_snippet_chunk_set_text_set,
+   gtk_source_snippet_chunk_get_context,
+   gtk_source_snippet_chunk_set_context,
+   gtk_source_snippet_chunk_get_tooltip_text,
+   gtk_source_snippet_chunk_set_tooltip_text,
+   gtk_source_snippet_chunk_get_focus_position,
+   gtk_source_snippet_chunk_set_focus_position;
+
+TYPE
+   GtkSourceSnippetChunk = ADDRESS;
+
+(* GtkSourceSnippetChunk *gtk_source_snippet_chunk_new(void) *)
+PROCEDURE gtk_source_snippet_chunk_new () : GtkSourceSnippetChunk;
+
+(* GtkSourceSnippetChunk *gtk_source_snippet_chunk_copy(
+                           GtkSourceSnippetChunk *chunk) *)
+PROCEDURE gtk_source_snippet_chunk_copy (chunk: GtkSourceSnippetChunk)
+                                         : ADDRESS;
+
+(* const char *gtk_source_snippet_chunk_get_spec(GtkSourceSnippetChunk *chunk) *)
+PROCEDURE gtk_source_snippet_chunk_get_spec (chunk: GtkSourceSnippetChunk)
+                                             : ADDRESS;
+
+(* void gtk_source_snippet_chunk_set_spec(GtkSourceSnippetChunk *chunk,
+                                          const char *spec) *)
+PROCEDURE gtk_source_snippet_chunk_set_spec (chunk: GtkSourceSnippetChunk;
+                                             spec: ARRAY OF CHAR);
+
+(* const char *gtk_source_snippet_chunk_get_text(GtkSourceSnippetChunk *chunk) *)
+PROCEDURE gtk_source_snippet_chunk_get_text (chunk: GtkSourceSnippetChunk)
+                                             : ADDRESS;
+
+(* void gtk_source_snippet_chunk_set_text(GtkSourceSnippetChunk *chunk,
+                                          const char *text) *)
+PROCEDURE gtk_source_snippet_chunk_set_text (chunk: GtkSourceSnippetChunk;
+                                             text: ARRAY OF CHAR);
+
+(* gboolean gtk_source_snippet_chunk_get_text_set(
+              GtkSourceSnippetChunk *chunk) *)
+PROCEDURE gtk_source_snippet_chunk_get_text_set (chunk: GtkSourceSnippetChunk)
+                                                 : INTEGER;
+
+(* void gtk_source_snippet_chunk_set_text_set(GtkSourceSnippetChunk *chunk,
+                                              gboolean text_set) *)
+PROCEDURE gtk_source_snippet_chunk_set_text_set
+              (chunk: GtkSourceSnippetChunk; text_set: INTEGER);
+
+(* GtkSourceSnippetContext *gtk_source_snippet_chunk_get_context(
+                             GtkSourceSnippetChunk *chunk) *)
+PROCEDURE gtk_source_snippet_chunk_get_context (chunk: GtkSourceSnippetChunk)
+                                                : ADDRESS;
+
+(* void gtk_source_snippet_chunk_set_context(
+          GtkSourceSnippetChunk *chunk, GtkSourceSnippetContext *context) *)
+PROCEDURE gtk_source_snippet_chunk_set_context
+              (chunk: GtkSourceSnippetChunk; context: ADDRESS);
+
+(* const char *gtk_source_snippet_chunk_get_tooltip_text(
+                GtkSourceSnippetChunk *chunk) *)
+PROCEDURE gtk_source_snippet_chunk_get_tooltip_text
+              (chunk: GtkSourceSnippetChunk) : ADDRESS;
+
+(* void gtk_source_snippet_chunk_set_tooltip_text(
+          GtkSourceSnippetChunk *chunk, const char *tooltip_text) *)
+PROCEDURE gtk_source_snippet_chunk_set_tooltip_text
+              (chunk: GtkSourceSnippetChunk; tooltip_text: ARRAY OF CHAR);
+
+(* gint gtk_source_snippet_chunk_get_focus_position(
+         GtkSourceSnippetChunk *chunk) *)
+PROCEDURE gtk_source_snippet_chunk_get_focus_position
+              (chunk: GtkSourceSnippetChunk) : INTEGER;
+
+(* void gtk_source_snippet_chunk_set_focus_position(
+          GtkSourceSnippetChunk *chunk, gint focus_position) *)
+PROCEDURE gtk_source_snippet_chunk_set_focus_position
+              (chunk: GtkSourceSnippetChunk; focus_position: INTEGER);
+
+END GtkSourceSnippetChunk.

+ 71 - 0
src/GtkSourceSnippetContext.def

@@ -0,0 +1,71 @@
+DEFINITION MODULE FOR "C" GtkSourceSnippetContext ;
+
+(*
+   m2-GTK4 - GtkSourceSnippetContext: the variable environment used when
+   expanding a GtkSourceSnippet.  Mapped onto
+   <gtksourceview/gtksourcesnippetcontext.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceSnippetContext,
+   gtk_source_snippet_context_new,
+   gtk_source_snippet_context_clear_variables,
+   gtk_source_snippet_context_get_variable,
+   gtk_source_snippet_context_set_variable,
+   gtk_source_snippet_context_set_constant,
+   gtk_source_snippet_context_set_line_prefix,
+   gtk_source_snippet_context_set_tab_width,
+   gtk_source_snippet_context_set_use_spaces,
+   gtk_source_snippet_context_expand;
+
+TYPE
+   GtkSourceSnippetContext = ADDRESS;
+
+(* GtkSourceSnippetContext *gtk_source_snippet_context_new(void) *)
+PROCEDURE gtk_source_snippet_context_new () : GtkSourceSnippetContext;
+
+(* void gtk_source_snippet_context_clear_variables(
+          GtkSourceSnippetContext *self) *)
+PROCEDURE gtk_source_snippet_context_clear_variables
+              (self: GtkSourceSnippetContext);
+
+(* const char *gtk_source_snippet_context_get_variable(
+                GtkSourceSnippetContext *self, const char *key) *)
+PROCEDURE gtk_source_snippet_context_get_variable
+              (self: GtkSourceSnippetContext; key: ARRAY OF CHAR) : ADDRESS;
+
+(* void gtk_source_snippet_context_set_variable(
+          GtkSourceSnippetContext *self, const char *key,
+          const char *value) *)
+PROCEDURE gtk_source_snippet_context_set_variable
+              (self: GtkSourceSnippetContext; key, value: ARRAY OF CHAR);
+
+(* void gtk_source_snippet_context_set_constant(
+          GtkSourceSnippetContext *self, const char *key,
+          const char *value) *)
+PROCEDURE gtk_source_snippet_context_set_constant
+              (self: GtkSourceSnippetContext; key, value: ARRAY OF CHAR);
+
+(* void gtk_source_snippet_context_set_line_prefix(
+          GtkSourceSnippetContext *self, const char *line_prefix) *)
+PROCEDURE gtk_source_snippet_context_set_line_prefix
+              (self: GtkSourceSnippetContext; line_prefix: ARRAY OF CHAR);
+
+(* void gtk_source_snippet_context_set_tab_width(
+          GtkSourceSnippetContext *self, gint tab_width) *)
+PROCEDURE gtk_source_snippet_context_set_tab_width
+              (self: GtkSourceSnippetContext; tab_width: INTEGER);
+
+(* void gtk_source_snippet_context_set_use_spaces(
+          GtkSourceSnippetContext *self, gboolean use_spaces) *)
+PROCEDURE gtk_source_snippet_context_set_use_spaces
+              (self: GtkSourceSnippetContext; use_spaces: INTEGER);
+
+(* char *gtk_source_snippet_context_expand(GtkSourceSnippetContext *self,
+                                            const char *input) *)
+PROCEDURE gtk_source_snippet_context_expand (self: GtkSourceSnippetContext;
+                                             input: ARRAY OF CHAR) : ADDRESS;
+
+END GtkSourceSnippetContext.

+ 61 - 0
src/GtkSourceSnippetManager.def

@@ -0,0 +1,61 @@
+DEFINITION MODULE FOR "C" GtkSourceSnippetManager ;
+
+(*
+   m2-GTK4 - GtkSourceSnippetManager: loads and looks up snippets.
+   Mapped onto <gtksourceview/gtksourcesnippetmanager.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceSnippetManager,
+   gtk_source_snippet_manager_get_default,
+   gtk_source_snippet_manager_get_snippet,
+   gtk_source_snippet_manager_list_matching,
+   gtk_source_snippet_manager_list_all,
+   gtk_source_snippet_manager_list_groups,
+   gtk_source_snippet_manager_get_search_path,
+   gtk_source_snippet_manager_set_search_path;
+
+TYPE
+   GtkSourceSnippetManager = ADDRESS;
+
+(* GtkSourceSnippetManager *gtk_source_snippet_manager_get_default(void) *)
+PROCEDURE gtk_source_snippet_manager_get_default () : GtkSourceSnippetManager;
+
+(* GtkSourceSnippet *gtk_source_snippet_manager_get_snippet(
+        GtkSourceSnippetManager *self, const char *group,
+        const char *language_id, const char *trigger) *)
+PROCEDURE gtk_source_snippet_manager_get_snippet
+              (self: GtkSourceSnippetManager; group: ARRAY OF CHAR;
+               language_id: ARRAY OF CHAR; trigger: ARRAY OF CHAR) : ADDRESS;
+
+(* GListModel *gtk_source_snippet_manager_list_matching(
+                GtkSourceSnippetManager *self, const char *group,
+                const char *language_id, const char *trigger_prefix) *)
+PROCEDURE gtk_source_snippet_manager_list_matching
+              (self: GtkSourceSnippetManager; group: ARRAY OF CHAR;
+               language_id: ARRAY OF CHAR; trigger_prefix: ARRAY OF CHAR)
+              : ADDRESS;
+
+(* GListModel *gtk_source_snippet_manager_list_all(
+                GtkSourceSnippetManager *self) *)
+PROCEDURE gtk_source_snippet_manager_list_all
+              (self: GtkSourceSnippetManager) : ADDRESS;
+
+(* const char * const *gtk_source_snippet_manager_list_groups(
+                        GtkSourceSnippetManager *self) *)
+PROCEDURE gtk_source_snippet_manager_list_groups
+              (self: GtkSourceSnippetManager) : ADDRESS;
+
+(* const char * const *gtk_source_snippet_manager_get_search_path(
+                        GtkSourceSnippetManager *self) *)
+PROCEDURE gtk_source_snippet_manager_get_search_path
+              (self: GtkSourceSnippetManager) : ADDRESS;
+
+(* void gtk_source_snippet_manager_set_search_path(
+          GtkSourceSnippetManager *self, const char * const *dirs) *)
+PROCEDURE gtk_source_snippet_manager_set_search_path
+              (self: GtkSourceSnippetManager; dirs: ADDRESS);
+
+END GtkSourceSnippetManager.

+ 69 - 0
src/GtkSourceSpaceDrawer.def

@@ -0,0 +1,69 @@
+DEFINITION MODULE FOR "C" GtkSourceSpaceDrawer ;
+
+(*
+   m2-GTK4 - GtkSourceSpaceDrawer: controls how whitespace is drawn in a
+   GtkSourceView.  Mapped onto <gtksourceview/gtksourcespacedrawer.h>.
+
+   The locations/types are GtkSourceSpaceLocationFlags /
+   GtkSourceSpaceTypeFlags bitmasks (from GtkSourceEnums).
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceSpaceDrawer,
+   gtk_source_space_drawer_new,
+   gtk_source_space_drawer_get_enable_matrix,
+   gtk_source_space_drawer_set_enable_matrix,
+   gtk_source_space_drawer_get_matrix, gtk_source_space_drawer_set_matrix,
+   gtk_source_space_drawer_get_types_for_locations,
+   gtk_source_space_drawer_set_types_for_locations,
+   gtk_source_space_drawer_bind_matrix_setting;
+
+TYPE
+   GtkSourceSpaceDrawer = ADDRESS;
+
+(* GtkSourceSpaceDrawer *gtk_source_space_drawer_new(void) *)
+PROCEDURE gtk_source_space_drawer_new () : GtkSourceSpaceDrawer;
+
+(* gboolean gtk_source_space_drawer_get_enable_matrix(
+              GtkSourceSpaceDrawer *drawer) *)
+PROCEDURE gtk_source_space_drawer_get_enable_matrix
+              (drawer: GtkSourceSpaceDrawer) : INTEGER;
+
+(* void gtk_source_space_drawer_set_enable_matrix(
+          GtkSourceSpaceDrawer *drawer, gboolean enable_matrix) *)
+PROCEDURE gtk_source_space_drawer_set_enable_matrix
+              (drawer: GtkSourceSpaceDrawer; enable_matrix: INTEGER);
+
+(* GVariant *gtk_source_space_drawer_get_matrix(GtkSourceSpaceDrawer *drawer) *)
+PROCEDURE gtk_source_space_drawer_get_matrix (drawer: GtkSourceSpaceDrawer)
+                                              : ADDRESS;
+
+(* void gtk_source_space_drawer_set_matrix(GtkSourceSpaceDrawer *drawer,
+                                            GVariant *matrix) *)
+PROCEDURE gtk_source_space_drawer_set_matrix (drawer: GtkSourceSpaceDrawer;
+                                              matrix: ADDRESS);
+
+(* guint gtk_source_space_drawer_get_types_for_locations(
+          GtkSourceSpaceDrawer *drawer,
+          GtkSourceSpaceLocationFlags locations) *)
+PROCEDURE gtk_source_space_drawer_get_types_for_locations
+              (drawer: GtkSourceSpaceDrawer; locations: CARDINAL) : CARDINAL;
+
+(* void gtk_source_space_drawer_set_types_for_locations(
+          GtkSourceSpaceDrawer *drawer,
+          GtkSourceSpaceLocationFlags locations,
+          GtkSourceSpaceTypeFlags types) *)
+PROCEDURE gtk_source_space_drawer_set_types_for_locations
+              (drawer: GtkSourceSpaceDrawer; locations: CARDINAL;
+               types: CARDINAL);
+
+(* void gtk_source_space_drawer_bind_matrix_setting(
+          GtkSourceSpaceDrawer *drawer, GSettings *settings,
+          const char *key, GBindingFlags flags) *)
+PROCEDURE gtk_source_space_drawer_bind_matrix_setting
+              (drawer: GtkSourceSpaceDrawer; settings: ADDRESS;
+               key: ARRAY OF CHAR; flags: CARDINAL);
+
+END GtkSourceSpaceDrawer.

+ 23 - 0
src/GtkSourceStyle.def

@@ -0,0 +1,23 @@
+DEFINITION MODULE FOR "C" GtkSourceStyle ;
+
+(*
+   m2-GTK4 - GtkSourceStyle: a set of text attributes from a style
+   scheme.  Mapped onto <gtksourceview/gtksourcestyle.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceStyle,
+   gtk_source_style_apply, gtk_source_style_copy;
+
+TYPE
+   GtkSourceStyle = ADDRESS;
+
+(* void gtk_source_style_apply(const GtkSourceStyle *style, GtkTextTag *tag) *)
+PROCEDURE gtk_source_style_apply (style: GtkSourceStyle; tag: ADDRESS);
+
+(* GtkSourceStyle *gtk_source_style_copy(const GtkSourceStyle *style) *)
+PROCEDURE gtk_source_style_copy (style: GtkSourceStyle) : ADDRESS;
+
+END GtkSourceStyle.

+ 56 - 0
src/GtkSourceStyleScheme.def

@@ -0,0 +1,56 @@
+DEFINITION MODULE FOR "C" GtkSourceStyleScheme ;
+
+(*
+   m2-GTK4 - GtkSourceStyleScheme: a colour scheme for highlighting.
+   Mapped onto <gtksourceview/gtksourcestylescheme.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceStyleScheme,
+   gtk_source_style_scheme_get_id, gtk_source_style_scheme_get_name,
+   gtk_source_style_scheme_get_description,
+   gtk_source_style_scheme_get_filename,
+   gtk_source_style_scheme_get_authors,
+   gtk_source_style_scheme_get_metadata,
+   gtk_source_style_scheme_get_style;
+
+TYPE
+   GtkSourceStyleScheme = ADDRESS;
+
+(* const char *gtk_source_style_scheme_get_id(GtkSourceStyleScheme *scheme) *)
+PROCEDURE gtk_source_style_scheme_get_id (scheme: GtkSourceStyleScheme)
+                                          : ADDRESS;
+
+(* const char *gtk_source_style_scheme_get_name(GtkSourceStyleScheme *scheme) *)
+PROCEDURE gtk_source_style_scheme_get_name (scheme: GtkSourceStyleScheme)
+                                            : ADDRESS;
+
+(* const char *gtk_source_style_scheme_get_description(
+                 GtkSourceStyleScheme *scheme) *)
+PROCEDURE gtk_source_style_scheme_get_description
+              (scheme: GtkSourceStyleScheme) : ADDRESS;
+
+(* const char *gtk_source_style_scheme_get_filename(
+                 GtkSourceStyleScheme *scheme) *)
+PROCEDURE gtk_source_style_scheme_get_filename (scheme: GtkSourceStyleScheme)
+                                                : ADDRESS;
+
+(* const char * const *gtk_source_style_scheme_get_authors(
+                        GtkSourceStyleScheme *scheme) *)
+PROCEDURE gtk_source_style_scheme_get_authors (scheme: GtkSourceStyleScheme)
+                                               : ADDRESS;
+
+(* const char *gtk_source_style_scheme_get_metadata(
+                 GtkSourceStyleScheme *scheme, const char *name) *)
+PROCEDURE gtk_source_style_scheme_get_metadata (scheme: GtkSourceStyleScheme;
+                                                name: ARRAY OF CHAR) : ADDRESS;
+
+(* GtkSourceStyle *gtk_source_style_scheme_get_style(
+                     GtkSourceStyleScheme *scheme, const char *style_id) *)
+PROCEDURE gtk_source_style_scheme_get_style (scheme: GtkSourceStyleScheme;
+                                             style_id: ARRAY OF CHAR)
+                                            : ADDRESS;
+
+END GtkSourceStyleScheme.

+ 30 - 0
src/GtkSourceStyleSchemeChooser.def

@@ -0,0 +1,30 @@
+DEFINITION MODULE FOR "C" GtkSourceStyleSchemeChooser ;
+
+(*
+   m2-GTK4 - GtkSourceStyleSchemeChooser: the interface for widgets that
+   let the user choose a style scheme.  Mapped onto
+   <gtksourceview/gtksourcestyleschemechooser.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceStyleSchemeChooser,
+   gtk_source_style_scheme_chooser_get_style_scheme,
+   gtk_source_style_scheme_chooser_set_style_scheme;
+
+TYPE
+   GtkSourceStyleSchemeChooser = ADDRESS;
+
+(* GtkSourceStyleScheme *gtk_source_style_scheme_chooser_get_style_scheme(
+        GtkSourceStyleSchemeChooser *chooser) *)
+PROCEDURE gtk_source_style_scheme_chooser_get_style_scheme
+              (chooser: GtkSourceStyleSchemeChooser) : ADDRESS;
+
+(* void gtk_source_style_scheme_chooser_set_style_scheme(
+          GtkSourceStyleSchemeChooser *chooser,
+          GtkSourceStyleScheme *scheme) *)
+PROCEDURE gtk_source_style_scheme_chooser_set_style_scheme
+              (chooser: GtkSourceStyleSchemeChooser; scheme: ADDRESS);
+
+END GtkSourceStyleSchemeChooser.

+ 22 - 0
src/GtkSourceStyleSchemeChooserButton.def

@@ -0,0 +1,22 @@
+DEFINITION MODULE FOR "C" GtkSourceStyleSchemeChooserButton ;
+
+(*
+   m2-GTK4 - GtkSourceStyleSchemeChooserButton: a button that opens a
+   style-scheme chooser.  Mapped onto
+   <gtksourceview/gtksourcestyleschemechooser.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceStyleSchemeChooserButton,
+   gtk_source_style_scheme_chooser_button_new;
+
+TYPE
+   GtkSourceStyleSchemeChooserButton = ADDRESS;
+
+(* GtkWidget *gtk_source_style_scheme_chooser_button_new(void) *)
+PROCEDURE gtk_source_style_scheme_chooser_button_new ()
+              : GtkSourceStyleSchemeChooserButton;
+
+END GtkSourceStyleSchemeChooserButton.

+ 22 - 0
src/GtkSourceStyleSchemeChooserWidget.def

@@ -0,0 +1,22 @@
+DEFINITION MODULE FOR "C" GtkSourceStyleSchemeChooserWidget ;
+
+(*
+   m2-GTK4 - GtkSourceStyleSchemeChooserWidget: a widget that lets the
+   user choose a style scheme.  Mapped onto
+   <gtksourceview/gtksourcestyleschemechooser.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceStyleSchemeChooserWidget,
+   gtk_source_style_scheme_chooser_widget_new;
+
+TYPE
+   GtkSourceStyleSchemeChooserWidget = ADDRESS;
+
+(* GtkWidget *gtk_source_style_scheme_chooser_widget_new(void) *)
+PROCEDURE gtk_source_style_scheme_chooser_widget_new ()
+              : GtkSourceStyleSchemeChooserWidget;
+
+END GtkSourceStyleSchemeChooserWidget.

+ 69 - 0
src/GtkSourceStyleSchemeManager.def

@@ -0,0 +1,69 @@
+DEFINITION MODULE FOR "C" GtkSourceStyleSchemeManager ;
+
+(*
+   m2-GTK4 - GtkSourceStyleSchemeManager: loads and looks up the
+   available GtkSourceStyleScheme definitions.  Mapped onto
+   <gtksourceview/gtksourcestyleschememanager.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceStyleSchemeManager,
+   gtk_source_style_scheme_manager_new,
+   gtk_source_style_scheme_manager_get_default,
+   gtk_source_style_scheme_manager_get_scheme,
+   gtk_source_style_scheme_manager_get_scheme_ids,
+   gtk_source_style_scheme_manager_get_search_path,
+   gtk_source_style_scheme_manager_set_search_path,
+   gtk_source_style_scheme_manager_append_search_path,
+   gtk_source_style_scheme_manager_prepend_search_path,
+   gtk_source_style_scheme_manager_force_rescan;
+
+TYPE
+   GtkSourceStyleSchemeManager = ADDRESS;
+
+(* GtkSourceStyleSchemeManager *gtk_source_style_scheme_manager_new(void) *)
+PROCEDURE gtk_source_style_scheme_manager_new () : GtkSourceStyleSchemeManager;
+
+(* GtkSourceStyleSchemeManager *gtk_source_style_scheme_manager_get_default(void) *)
+PROCEDURE gtk_source_style_scheme_manager_get_default ()
+              : GtkSourceStyleSchemeManager;
+
+(* GtkSourceStyleScheme *gtk_source_style_scheme_manager_get_scheme(
+        GtkSourceStyleSchemeManager *manager, const char *scheme_id) *)
+PROCEDURE gtk_source_style_scheme_manager_get_scheme
+              (manager: GtkSourceStyleSchemeManager; scheme_id: ARRAY OF CHAR)
+              : ADDRESS;
+
+(* const char * const *gtk_source_style_scheme_manager_get_scheme_ids(
+                        GtkSourceStyleSchemeManager *manager) *)
+PROCEDURE gtk_source_style_scheme_manager_get_scheme_ids
+              (manager: GtkSourceStyleSchemeManager) : ADDRESS;
+
+(* const char * const *gtk_source_style_scheme_manager_get_search_path(
+                        GtkSourceStyleSchemeManager *manager) *)
+PROCEDURE gtk_source_style_scheme_manager_get_search_path
+              (manager: GtkSourceStyleSchemeManager) : ADDRESS;
+
+(* void gtk_source_style_scheme_manager_set_search_path(
+          GtkSourceStyleSchemeManager *manager, const char * const *path) *)
+PROCEDURE gtk_source_style_scheme_manager_set_search_path
+              (manager: GtkSourceStyleSchemeManager; path: ADDRESS);
+
+(* void gtk_source_style_scheme_manager_append_search_path(
+          GtkSourceStyleSchemeManager *manager, const char *path) *)
+PROCEDURE gtk_source_style_scheme_manager_append_search_path
+              (manager: GtkSourceStyleSchemeManager; path: ARRAY OF CHAR);
+
+(* void gtk_source_style_scheme_manager_prepend_search_path(
+          GtkSourceStyleSchemeManager *manager, const char *path) *)
+PROCEDURE gtk_source_style_scheme_manager_prepend_search_path
+              (manager: GtkSourceStyleSchemeManager; path: ARRAY OF CHAR);
+
+(* void gtk_source_style_scheme_manager_force_rescan(
+          GtkSourceStyleSchemeManager *manager) *)
+PROCEDURE gtk_source_style_scheme_manager_force_rescan
+              (manager: GtkSourceStyleSchemeManager);
+
+END GtkSourceStyleSchemeManager.

+ 40 - 0
src/GtkSourceStyleSchemePreview.def

@@ -0,0 +1,40 @@
+DEFINITION MODULE FOR "C" GtkSourceStyleSchemePreview ;
+
+(*
+   m2-GTK4 - GtkSourceStyleSchemePreview: a preview tile for a style
+   scheme, used by the chooser widgets.  Mapped onto
+   <gtksourceview/gtksourcestyleschemepreview.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceStyleSchemePreview,
+   gtk_source_style_scheme_preview_new,
+   gtk_source_style_scheme_preview_get_scheme,
+   gtk_source_style_scheme_preview_get_selected,
+   gtk_source_style_scheme_preview_set_selected;
+
+TYPE
+   GtkSourceStyleSchemePreview = ADDRESS;
+
+(* GtkWidget *gtk_source_style_scheme_preview_new(GtkSourceStyleScheme *scheme) *)
+PROCEDURE gtk_source_style_scheme_preview_new (scheme: ADDRESS)
+                                               : GtkSourceStyleSchemePreview;
+
+(* GtkSourceStyleScheme *gtk_source_style_scheme_preview_get_scheme(
+        GtkSourceStyleSchemePreview *self) *)
+PROCEDURE gtk_source_style_scheme_preview_get_scheme
+              (self: GtkSourceStyleSchemePreview) : ADDRESS;
+
+(* gboolean gtk_source_style_scheme_preview_get_selected(
+              GtkSourceStyleSchemePreview *self) *)
+PROCEDURE gtk_source_style_scheme_preview_get_selected
+              (self: GtkSourceStyleSchemePreview) : INTEGER;
+
+(* void gtk_source_style_scheme_preview_set_selected(
+          GtkSourceStyleSchemePreview *self, gboolean selected) *)
+PROCEDURE gtk_source_style_scheme_preview_set_selected
+              (self: GtkSourceStyleSchemePreview; selected: INTEGER);
+
+END GtkSourceStyleSchemePreview.

+ 20 - 0
src/GtkSourceTag.def

@@ -0,0 +1,20 @@
+DEFINITION MODULE FOR "C" GtkSourceTag ;
+
+(*
+   m2-GTK4 - GtkSourceTag: a GtkTextTag with source-view style support.
+   Mapped onto <gtksourceview/gtksourcetag.h>.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceTag,
+   gtk_source_tag_new;
+
+TYPE
+   GtkSourceTag = ADDRESS;
+
+(* GtkTextTag *gtk_source_tag_new(const char *name) *)
+PROCEDURE gtk_source_tag_new (name: ARRAY OF CHAR) : ADDRESS;
+
+END GtkSourceTag.

+ 241 - 0
src/GtkSourceView.def

@@ -0,0 +1,241 @@
+DEFINITION MODULE FOR "C" GtkSourceView ;
+
+(*
+   m2-GTK4 - GtkSourceView: a GtkTextView with syntax highlighting,
+   line numbers, marks, gutters and completion.  Mapped onto
+   <gtksourceview/gtksourceview.h>.
+
+   The gutter window type uses GtkTextWindowType values (pass as
+   CARDINAL); background pattern and smart-home-end use GtkSourceEnums.
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+FROM GtkTextIter IMPORT GtkTextIter;
+FROM GtkSourceEnums IMPORT GtkSourceBackgroundPatternType,
+   GtkSourceSmartHomeEndType;
+
+EXPORT UNQUALIFIED
+   GtkSourceView,
+   gtk_source_view_new, gtk_source_view_new_with_buffer,
+   gtk_source_view_get_show_line_numbers, gtk_source_view_set_show_line_numbers,
+   gtk_source_view_get_show_line_marks, gtk_source_view_set_show_line_marks,
+   gtk_source_view_get_show_right_margin,
+   gtk_source_view_set_show_right_margin,
+   gtk_source_view_get_right_margin_position,
+   gtk_source_view_set_right_margin_position,
+   gtk_source_view_get_highlight_current_line,
+   gtk_source_view_set_highlight_current_line,
+   gtk_source_view_get_auto_indent, gtk_source_view_set_auto_indent,
+   gtk_source_view_get_indent_on_tab, gtk_source_view_set_indent_on_tab,
+   gtk_source_view_get_indent_width, gtk_source_view_set_indent_width,
+   gtk_source_view_get_insert_spaces_instead_of_tabs,
+   gtk_source_view_set_insert_spaces_instead_of_tabs,
+   gtk_source_view_get_tab_width, gtk_source_view_set_tab_width,
+   gtk_source_view_get_smart_backspace,
+   gtk_source_view_set_smart_backspace,
+   gtk_source_view_get_smart_home_end, gtk_source_view_set_smart_home_end,
+   gtk_source_view_get_background_pattern,
+   gtk_source_view_set_background_pattern,
+   gtk_source_view_get_enable_snippets,
+   gtk_source_view_set_enable_snippets,
+   gtk_source_view_get_completion, gtk_source_view_get_hover,
+   gtk_source_view_get_space_drawer, gtk_source_view_get_indenter,
+   gtk_source_view_set_indenter,
+   gtk_source_view_get_gutter,
+   gtk_source_view_get_mark_attributes, gtk_source_view_set_mark_attributes,
+   gtk_source_view_get_visual_column,
+   gtk_source_view_indent_lines, gtk_source_view_unindent_lines,
+   gtk_source_view_push_snippet;
+
+TYPE
+   GtkSourceView = ADDRESS;
+
+(* GtkWidget *gtk_source_view_new(void) *)
+PROCEDURE gtk_source_view_new () : GtkSourceView;
+
+(* GtkWidget *gtk_source_view_new_with_buffer(GtkSourceBuffer *buffer) *)
+PROCEDURE gtk_source_view_new_with_buffer (buffer: ADDRESS) : GtkSourceView;
+
+(* gboolean gtk_source_view_get_show_line_numbers(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_show_line_numbers (view: GtkSourceView)
+                                                 : INTEGER;
+
+(* void gtk_source_view_set_show_line_numbers(GtkSourceView *view,
+                                              gboolean show) *)
+PROCEDURE gtk_source_view_set_show_line_numbers (view: GtkSourceView;
+                                                 show: INTEGER);
+
+(* gboolean gtk_source_view_get_show_line_marks(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_show_line_marks (view: GtkSourceView)
+                                               : INTEGER;
+
+(* void gtk_source_view_set_show_line_marks(GtkSourceView *view,
+                                            gboolean show) *)
+PROCEDURE gtk_source_view_set_show_line_marks (view: GtkSourceView;
+                                               show: INTEGER);
+
+(* gboolean gtk_source_view_get_show_right_margin(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_show_right_margin (view: GtkSourceView)
+                                                 : INTEGER;
+
+(* void gtk_source_view_set_show_right_margin(GtkSourceView *view,
+                                              gboolean show) *)
+PROCEDURE gtk_source_view_set_show_right_margin (view: GtkSourceView;
+                                                 show: INTEGER);
+
+(* guint gtk_source_view_get_right_margin_position(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_right_margin_position (view: GtkSourceView)
+                                                     : CARDINAL;
+
+(* void gtk_source_view_set_right_margin_position(GtkSourceView *view,
+                                                  guint pos) *)
+PROCEDURE gtk_source_view_set_right_margin_position (view: GtkSourceView;
+                                                     pos: CARDINAL);
+
+(* gboolean gtk_source_view_get_highlight_current_line(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_highlight_current_line (view: GtkSourceView)
+                                                      : INTEGER;
+
+(* void gtk_source_view_set_highlight_current_line(GtkSourceView *view,
+                                                   gboolean highlight) *)
+PROCEDURE gtk_source_view_set_highlight_current_line (view: GtkSourceView;
+                                                      highlight: INTEGER);
+
+(* gboolean gtk_source_view_get_auto_indent(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_auto_indent (view: GtkSourceView) : INTEGER;
+
+(* void gtk_source_view_set_auto_indent(GtkSourceView *view, gboolean enable) *)
+PROCEDURE gtk_source_view_set_auto_indent (view: GtkSourceView;
+                                           enable: INTEGER);
+
+(* gboolean gtk_source_view_get_indent_on_tab(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_indent_on_tab (view: GtkSourceView) : INTEGER;
+
+(* void gtk_source_view_set_indent_on_tab(GtkSourceView *view,
+                                          gboolean enable) *)
+PROCEDURE gtk_source_view_set_indent_on_tab (view: GtkSourceView;
+                                             enable: INTEGER);
+
+(* gint gtk_source_view_get_indent_width(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_indent_width (view: GtkSourceView) : INTEGER;
+
+(* void gtk_source_view_set_indent_width(GtkSourceView *view, gint width) *)
+PROCEDURE gtk_source_view_set_indent_width (view: GtkSourceView;
+                                            width: INTEGER);
+
+(* gboolean gtk_source_view_get_insert_spaces_instead_of_tabs(
+              GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_insert_spaces_instead_of_tabs
+              (view: GtkSourceView) : INTEGER;
+
+(* void gtk_source_view_set_insert_spaces_instead_of_tabs(
+          GtkSourceView *view, gboolean enable) *)
+PROCEDURE gtk_source_view_set_insert_spaces_instead_of_tabs
+              (view: GtkSourceView; enable: INTEGER);
+
+(* guint gtk_source_view_get_tab_width(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_tab_width (view: GtkSourceView) : CARDINAL;
+
+(* void gtk_source_view_set_tab_width(GtkSourceView *view, guint width) *)
+PROCEDURE gtk_source_view_set_tab_width (view: GtkSourceView; width: CARDINAL);
+
+(* gboolean gtk_source_view_get_smart_backspace(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_smart_backspace (view: GtkSourceView) : INTEGER;
+
+(* void gtk_source_view_set_smart_backspace(GtkSourceView *view,
+                                            gboolean smart_backspace) *)
+PROCEDURE gtk_source_view_set_smart_backspace (view: GtkSourceView;
+                                               smart_backspace: INTEGER);
+
+(* GtkSourceSmartHomeEndType gtk_source_view_get_smart_home_end(
+        GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_smart_home_end (view: GtkSourceView)
+                                              : GtkSourceSmartHomeEndType;
+
+(* void gtk_source_view_set_smart_home_end(GtkSourceView *view,
+                                            GtkSourceSmartHomeEndType type) *)
+PROCEDURE gtk_source_view_set_smart_home_end
+              (view: GtkSourceView; smart_home_end: GtkSourceSmartHomeEndType);
+
+(* GtkSourceBackgroundPatternType gtk_source_view_get_background_pattern(
+        GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_background_pattern (view: GtkSourceView)
+                                    : GtkSourceBackgroundPatternType;
+
+(* void gtk_source_view_set_background_pattern(
+          GtkSourceView *view,
+          GtkSourceBackgroundPatternType background_pattern) *)
+PROCEDURE gtk_source_view_set_background_pattern
+              (view: GtkSourceView;
+               background_pattern: GtkSourceBackgroundPatternType);
+
+(* gboolean gtk_source_view_get_enable_snippets(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_enable_snippets (view: GtkSourceView) : INTEGER;
+
+(* void gtk_source_view_set_enable_snippets(GtkSourceView *view,
+                                            gboolean enable_snippets) *)
+PROCEDURE gtk_source_view_set_enable_snippets (view: GtkSourceView;
+                                               enable_snippets: INTEGER);
+
+(* GtkSourceCompletion *gtk_source_view_get_completion(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_completion (view: GtkSourceView) : ADDRESS;
+
+(* GtkSourceHover *gtk_source_view_get_hover(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_hover (view: GtkSourceView) : ADDRESS;
+
+(* GtkSourceSpaceDrawer *gtk_source_view_get_space_drawer(
+                          GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_space_drawer (view: GtkSourceView) : ADDRESS;
+
+(* GtkSourceIndenter *gtk_source_view_get_indenter(GtkSourceView *view) *)
+PROCEDURE gtk_source_view_get_indenter (view: GtkSourceView) : ADDRESS;
+
+(* void gtk_source_view_set_indenter(GtkSourceView *view,
+                                     GtkSourceIndenter *indenter) *)
+PROCEDURE gtk_source_view_set_indenter (view: GtkSourceView;
+                                        indenter: ADDRESS);
+
+(* GtkSourceGutter *gtk_source_view_get_gutter(GtkSourceView *view,
+                                               GtkTextWindowType window_type) *)
+PROCEDURE gtk_source_view_get_gutter (view: GtkSourceView;
+                                      window_type: CARDINAL) : ADDRESS;
+
+(* GtkSourceMarkAttributes *gtk_source_view_get_mark_attributes(
+        GtkSourceView *view, const char *category, gint *priority) *)
+PROCEDURE gtk_source_view_get_mark_attributes (view: GtkSourceView;
+                                               category: ARRAY OF CHAR;
+                                               VAR priority: INTEGER)
+                                              : ADDRESS;
+
+(* void gtk_source_view_set_mark_attributes(GtkSourceView *view,
+                                             const char *category,
+                                             GtkSourceMarkAttributes *attributes,
+                                             gint priority) *)
+PROCEDURE gtk_source_view_set_mark_attributes (view: GtkSourceView;
+                                               category: ARRAY OF CHAR;
+                                               attributes: ADDRESS;
+                                               priority: INTEGER);
+
+(* guint gtk_source_view_get_visual_column(GtkSourceView *view,
+                                            GtkTextIter *iter) *)
+PROCEDURE gtk_source_view_get_visual_column (view: GtkSourceView;
+                                             VAR iter: GtkTextIter) : CARDINAL;
+
+(* void gtk_source_view_indent_lines(GtkSourceView *view, GtkTextIter *start,
+                                     GtkTextIter *end) *)
+PROCEDURE gtk_source_view_indent_lines (view: GtkSourceView;
+                                        VAR start, theEnd: GtkTextIter);
+
+(* void gtk_source_view_unindent_lines(GtkSourceView *view, GtkTextIter *start,
+                                       GtkTextIter *end) *)
+PROCEDURE gtk_source_view_unindent_lines (view: GtkSourceView;
+                                          VAR start, theEnd: GtkTextIter);
+
+(* void gtk_source_view_push_snippet(GtkSourceView *view,
+                                     GtkSourceSnippet *snippet,
+                                     GtkTextIter *location) *)
+PROCEDURE gtk_source_view_push_snippet (view: GtkSourceView;
+                                        snippet: ADDRESS;
+                                        VAR location: GtkTextIter);
+
+END GtkSourceView.

+ 39 - 0
src/GtkSourceVimIMContext.def

@@ -0,0 +1,39 @@
+DEFINITION MODULE FOR "C" GtkSourceVimIMContext ;
+
+(*
+   m2-GTK4 - GtkSourceVimIMContext: a Vim key-binding input-method
+   context for a GtkSourceView.  Mapped onto
+   <gtksourceview/gtksourcevimimcontext.h> (since 5.16).
+*)
+
+FROM SYSTEM IMPORT ADDRESS;
+
+EXPORT UNQUALIFIED
+   GtkSourceVimIMContext,
+   gtk_source_vim_im_context_new,
+   gtk_source_vim_im_context_execute_command,
+   gtk_source_vim_im_context_get_command_text,
+   gtk_source_vim_im_context_get_command_bar_text;
+
+TYPE
+   GtkSourceVimIMContext = ADDRESS;
+
+(* GtkIMContext *gtk_source_vim_im_context_new(void) *)
+PROCEDURE gtk_source_vim_im_context_new () : GtkSourceVimIMContext;
+
+(* void gtk_source_vim_im_context_execute_command(
+          GtkSourceVimIMContext *self, const char *command) *)
+PROCEDURE gtk_source_vim_im_context_execute_command
+              (self: GtkSourceVimIMContext; command: ARRAY OF CHAR);
+
+(* const char *gtk_source_vim_im_context_get_command_text(
+                GtkSourceVimIMContext *self) *)
+PROCEDURE gtk_source_vim_im_context_get_command_text
+              (self: GtkSourceVimIMContext) : ADDRESS;
+
+(* const char *gtk_source_vim_im_context_get_command_bar_text(
+                GtkSourceVimIMContext *self) *)
+PROCEDURE gtk_source_vim_im_context_get_command_bar_text
+              (self: GtkSourceVimIMContext) : ADDRESS;
+
+END GtkSourceVimIMContext.

+ 8 - 1
tests/run_tests.sh

@@ -20,6 +20,13 @@ if pkg-config --exists libadwaita-1 2>/dev/null; then
   TESTS="$TESTS test_adw test_adw_widgets test_adw_widgets2"
 fi
 
+# GtkSourceView 5 (GtkSource) is optional.
+if pkg-config --exists gtksourceview-5 2>/dev/null; then
+  CFLAGS="$CFLAGS $(pkg-config --cflags gtksourceview-5)"
+  LIBS="$LIBS $(pkg-config --libs gtksourceview-5)"
+  TESTS="$TESTS test_sourceview"
+fi
+
 # OpenGL (GtkGLArea examples/tests).
 if pkg-config --exists gl 2>/dev/null; then
   LIBS="$LIBS $(pkg-config --libs gl)"
@@ -63,7 +70,7 @@ for t in $TESTS; do
        "$ROOT/tests/$t.mod" "$OBJ/GtkUtils.o" "$OBJ/GtkClosures.o" \
        "$OBJ/m2gtkshim.o" $DEMO_OBJS -o "$BIN/$t" $LIBS
   case "$t" in
-    test_widgets|test_inputs|test_inputs2|test_containers|test_containers2|test_actions|test_closure|test_headerbar|test_filedialog|test_views|test_builder|test_utility|test_css|test_popover|test_dialogs|test_models|test_drawing|test_gestures|test_models2|test_widgets3|test_shim|test_shim2|test_shim3|test_dnd|test_media|test_gl|test_print|test_text|test_expr|test_constraints|test_shortcuts|test_snapshot|test_lastwidgets|test_adw|test_application|test_demos|test_adw_widgets|test_adw_widgets2) needs_display=1 ;;
+    test_widgets|test_inputs|test_inputs2|test_containers|test_containers2|test_actions|test_closure|test_headerbar|test_filedialog|test_views|test_builder|test_utility|test_css|test_popover|test_dialogs|test_models|test_drawing|test_gestures|test_models2|test_widgets3|test_shim|test_shim2|test_shim3|test_dnd|test_media|test_gl|test_print|test_text|test_expr|test_constraints|test_shortcuts|test_snapshot|test_lastwidgets|test_adw|test_application|test_demos|test_adw_widgets|test_adw_widgets2|test_sourceview) needs_display=1 ;;
     *) needs_display=0 ;;
   esac
   if [ "$needs_display" = 1 ] && [ -z "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ]; then

+ 185 - 0
tests/test_sourceview.mod

@@ -0,0 +1,185 @@
+MODULE test_sourceview ;
+
+(*
+   m2-GTK4 test - GtkSourceView 5 (GtkSource namespace): buffer, view,
+   language/style-scheme managers, marks, map, space drawer, search,
+   region, snippets, completion and the print compositor.
+   Requires a display.
+*)
+
+FROM GtkApplication IMPORT gtk_application_new;
+FROM Gio IMPORT g_application_run, g_application_quit;
+FROM GtkWindow IMPORT gtk_application_window_new, gtk_window_set_child,
+   gtk_window_present;
+FROM GtkTextBuffer IMPORT gtk_text_buffer_get_start_iter;
+FROM GtkTextIter IMPORT GtkTextIter;
+FROM GtkUtils IMPORT Connect;
+FROM GtkSourceFunctions IMPORT gtk_source_init;
+FROM GtkSourceBuffer IMPORT gtk_source_buffer_new,
+   gtk_source_buffer_new_with_language, gtk_source_buffer_set_language,
+   gtk_source_buffer_get_language, gtk_source_buffer_set_highlight_syntax,
+   gtk_source_buffer_get_highlight_syntax;
+FROM GtkSourceLanguageManager IMPORT gtk_source_language_manager_get_default,
+   gtk_source_language_manager_get_language;
+FROM GtkSourceStyleSchemeManager IMPORT
+   gtk_source_style_scheme_manager_get_default,
+   gtk_source_style_scheme_manager_get_scheme_ids;
+FROM GtkSourceView IMPORT gtk_source_view_new_with_buffer,
+   gtk_source_view_set_show_line_numbers,
+   gtk_source_view_get_show_line_numbers, gtk_source_view_set_tab_width,
+   gtk_source_view_get_tab_width, gtk_source_view_get_gutter,
+   gtk_source_view_get_completion, gtk_source_view_get_space_drawer;
+FROM GtkSourceMark IMPORT gtk_source_mark_new;
+FROM GtkSourceGutter IMPORT gtk_source_gutter_insert;
+FROM GtkSourceGutterRendererText IMPORT
+   gtk_source_gutter_renderer_text_new;
+FROM GtkSourceMap IMPORT gtk_source_map_new, gtk_source_map_set_view;
+FROM GtkSourceSpaceDrawer IMPORT gtk_source_space_drawer_set_types_for_locations,
+   gtk_source_space_drawer_get_types_for_locations;
+FROM GtkSourceEnums IMPORT GtkSourceSpaceLocationAll,
+   GtkSourceSpaceTypeAll;
+FROM GtkSourceSearchSettings IMPORT gtk_source_search_settings_new,
+   gtk_source_search_settings_set_search_text;
+FROM GtkSourceSearchContext IMPORT gtk_source_search_context_new,
+   gtk_source_search_context_forward;
+FROM GtkSourceRegion IMPORT gtk_source_region_new;
+FROM GtkSourceSnippet IMPORT gtk_source_snippet_new_parsed;
+FROM GtkSourceCompletionWords IMPORT gtk_source_completion_words_new;
+FROM GtkSourcePrintCompositor IMPORT gtk_source_print_compositor_new;
+FROM SYSTEM IMPORT ADDRESS, ADR;
+FROM libc IMPORT printf;
+
+CONST
+   AppId = "org.example.m2gtk4.TestSourceView";
+
+VAR
+   app: ADDRESS;
+   passed: BOOLEAN;
+   failures: INTEGER;
+
+PROCEDURE Check (cond: BOOLEAN; what: ARRAY OF CHAR);
+BEGIN
+   IF cond THEN
+      printf("  ok - %s\n", what)
+   ELSE
+      printf("  NOT OK - %s\n", what);
+      INC(failures)
+   END
+END Check;
+
+PROCEDURE OnActivate (application: ADDRESS; data: ADDRESS);
+VAR
+   window, buffer, view, lang, gutter, renderer, map, drawer: ADDRESS;
+   settings, search, region, snippet, words, compositor: ADDRESS;
+   start, match_start, match_end: GtkTextIter;
+   wrapped: INTEGER;
+   found: INTEGER;
+BEGIN
+   failures := 0;
+
+   window := gtk_application_window_new(application);
+
+   (* managers *)
+   Check(gtk_source_language_manager_get_default() # NIL,
+         "GtkSourceLanguageManager");
+   Check(gtk_source_style_scheme_manager_get_default() # NIL,
+         "GtkSourceStyleSchemeManager");
+
+   buffer := gtk_source_buffer_new(NIL);
+   Check(buffer # NIL, "GtkSourceBuffer");
+   gtk_source_buffer_set_highlight_syntax(buffer, 1);
+   Check(gtk_source_buffer_get_highlight_syntax(buffer) # 0,
+         "highlight syntax");
+
+   lang := gtk_source_language_manager_get_language
+              (gtk_source_language_manager_get_default(), "c");
+   IF lang # NIL THEN
+      gtk_source_buffer_set_language(buffer, lang);
+      Check(gtk_source_buffer_get_language(buffer) = lang, "set language")
+   ELSE
+      Check(TRUE, "language 'c' not installed (skipped)")
+   END;
+
+   view := gtk_source_view_new_with_buffer(buffer);
+   Check(view # NIL, "GtkSourceView");
+   gtk_source_view_set_show_line_numbers(view, 1);
+   Check(gtk_source_view_get_show_line_numbers(view) # 0, "line numbers");
+   gtk_source_view_set_tab_width(view, 4);
+   Check(gtk_source_view_get_tab_width(view) = 4, "tab width");
+
+   (* mark *)
+   Check(gtk_source_mark_new("bookmark", "category") # NIL, "GtkSourceMark");
+
+   (* gutter + renderer *)
+   gutter := gtk_source_view_get_gutter(view, 3);   (* GTK_TEXT_WINDOW_LEFT *)
+   renderer := gtk_source_gutter_renderer_text_new();
+   Check(gtk_source_gutter_insert(gutter, renderer, 0) # 0, "gutter renderer");
+
+   (* map *)
+   map := gtk_source_map_new();
+   gtk_source_map_set_view(map, view);
+   Check(map # NIL, "GtkSourceMap");
+
+   (* space drawer *)
+   drawer := gtk_source_view_get_space_drawer(view);
+   gtk_source_space_drawer_set_types_for_locations(drawer,
+      GtkSourceSpaceLocationAll, GtkSourceSpaceTypeAll);
+   Check(gtk_source_space_drawer_get_types_for_locations(drawer,
+            GtkSourceSpaceLocationAll) = GtkSourceSpaceTypeAll,
+         "SpaceDrawer types");
+
+   (* search *)
+   settings := gtk_source_search_settings_new();
+   gtk_source_search_settings_set_search_text(settings, "hello");
+   search := gtk_source_search_context_new(buffer, settings);
+   Check(search # NIL, "GtkSourceSearchContext");
+   gtk_text_buffer_get_start_iter(buffer, start);
+   found := gtk_source_search_context_forward(search, start, match_start,
+                                              match_end, wrapped);
+   Check(found = 0, "search finds nothing in empty buffer");
+
+   (* region *)
+   region := gtk_source_region_new(buffer);
+   Check(region # NIL, "GtkSourceRegion");
+
+   (* snippet *)
+   snippet := gtk_source_snippet_new_parsed("Hello ${1:world}");
+   Check(snippet # NIL, "GtkSourceSnippet");
+
+   (* completion provider *)
+   words := gtk_source_completion_words_new("Document Words");
+   Check(words # NIL, "GtkSourceCompletionWords");
+
+   (* print compositor *)
+   compositor := gtk_source_print_compositor_new(buffer);
+   Check(compositor # NIL, "GtkSourcePrintCompositor");
+
+   gtk_window_set_child(window, view);
+   gtk_window_present(window);
+
+   passed := (failures = 0);
+   g_application_quit(application)
+END OnActivate;
+
+VAR
+   rc: INTEGER;
+BEGIN
+   passed := FALSE;
+   failures := 0;
+   gtk_source_init();
+   app := gtk_application_new(AppId, 0);
+   IF app = NIL THEN
+      printf("test_sourceview: FAIL (no app)\n");
+      HALT(1)
+   END;
+   Connect(app, "activate", ADR(OnActivate), NIL);
+   rc := g_application_run(app, 0, NIL);
+
+   IF passed THEN
+      printf("test_sourceview: PASS\n");
+      HALT(0)
+   ELSE
+      printf("test_sourceview: FAIL\n");
+      HALT(1)
+   END
+END test_sourceview.

+ 1 - 0
tools/gir_verify.py

@@ -34,6 +34,7 @@ PKG = {
     "GObject-2.0": "gobject-2.0",
     "Gio-2.0": "gio-2.0",
     "Adw-1": "libadwaita-1",
+    "GtkSource-5": "gtksourceview-5",
     "Pango-1.0": "pango",
     "PangoCairo-1.0": "pangocairo",
     "GdkPixbuf-2.0": "gdk-pixbuf-2.0",