The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

#ifndef _SOURCEVIEW2_PERL_H_
#define _SOURCEVIEW2_PERL_H_
#include <gtk2perl.h>
#include <gtksourceview/gtksourcebuffer.h>
#include <gtksourceview/gtksourceiter.h>
#include <gtksourceview/gtksourcelanguage.h>
#include <gtksourceview/gtksourcelanguagemanager.h>
#include <gtksourceview/gtksourcemark.h>
#include <gtksourceview/gtksourceprintcompositor.h>
#include <gtksourceview/gtksourcestyle.h>
#include <gtksourceview/gtksourcestylescheme.h>
#include <gtksourceview/gtksourcestyleschememanager.h>
#include <gtksourceview/gtksourceview.h>
#include <gtksourceview/gtksourceview-typebuiltins.h>
#include "gtk2-sourceview2-autogen.h"
/**
* Returns a gchar** in the stack.
*/
#define sourceview2perl_return_strv(func, free) \
do {\
gchar **list = (gchar **) func; \
if (list == NULL) { \
XSRETURN_EMPTY; \
} \
else { \
size_t i = 0; \
for (; list[i] != NULL ; ++i) { \
SV *sv = newSVGChar(list[i]); \
XPUSHs(sv_2mortal(sv)); \
} \
} \
if (free) g_strfreev(list); \
} while (FALSE)
/**
* Generic function that acts as a setter for a property that's a string list.
* This is the case for functions that accept a list of paths (strings).
*/
#define sourceview2perl_generic_set_dirs(func, arg) \
do {\
gchar **dirs = NULL; \
size_t count = items - 1; \
size_t i = 0; \
\
if (count > 0) { \
if (count == 1 && !SvOK(ST(1))) { \
/* Reset the values to the original list */ \
dirs = NULL; \
} \
else { \
dirs = g_new0(gchar *, items); \
for (i = 0; i < count; ++i) { \
dirs[i] = SvGChar(ST(i + 1)); \
} \
} \
} \
else { \
/* Clear the current list */ \
dirs = g_new0(gchar *, 1); \
dirs[1] = NULL; \
} \
\
func(arg, dirs); \
g_free(dirs); \
} while (FALSE)
#endif /* _SOURCEVIEW2_PERL_H_ */