/*
* This file was generated automatically by ExtUtils::ParseXS version 3.40 from the
* contents of XSParagraph.xs. Do not edit this file, edit XSParagraph.xs instead.
*
* ANY CHANGES MADE HERE WILL BE LOST!
*
*/
#line 1 "XSParagraph.xs"
/* Copyright 2010-2023 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
#ifdef HAVE_CONFIG_H
#include
#endif
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
/* Avoid warnings about Perl headers redefining symbols that gnulib
redefined already. */
#if defined _WIN32 && !defined __CYGWIN__
#undef free
#endif
#include "XSUB.h"
#include "ppport.h"
#include "xspara.h"
#line 44 "XSParagraph.c"
#ifndef PERL_UNUSED_VAR
# define PERL_UNUSED_VAR(var) if (0) var = var
#endif
#ifndef dVAR
# define dVAR dNOOP
#endif
/* This stuff is not part of the API! You have been warned. */
#ifndef PERL_VERSION_DECIMAL
# define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
#endif
#ifndef PERL_DECIMAL_VERSION
# define PERL_DECIMAL_VERSION \
PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
#endif
#ifndef PERL_VERSION_GE
# define PERL_VERSION_GE(r,v,s) \
(PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
#endif
#ifndef PERL_VERSION_LE
# define PERL_VERSION_LE(r,v,s) \
(PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
#endif
/* XS_INTERNAL is the explicit static-linkage variant of the default
* XS macro.
*
* XS_EXTERNAL is the same as XS_INTERNAL except it does not include
* "STATIC", ie. it exports XSUB symbols. You probably don't want that
* for anything but the BOOT XSUB.
*
* See XSUB.h in core!
*/
/* TODO: This might be compatible further back than 5.10.0. */
#if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1)
# undef XS_EXTERNAL
# undef XS_INTERNAL
# if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
# define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
# define XS_INTERNAL(name) STATIC XSPROTO(name)
# endif
# if defined(__SYMBIAN32__)
# define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
# define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
# endif
# ifndef XS_EXTERNAL
# if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
# define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
# define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
# else
# ifdef __cplusplus
# define XS_EXTERNAL(name) extern "C" XSPROTO(name)
# define XS_INTERNAL(name) static XSPROTO(name)
# else
# define XS_EXTERNAL(name) XSPROTO(name)
# define XS_INTERNAL(name) STATIC XSPROTO(name)
# endif
# endif
# endif
#endif
/* perl >= 5.10.0 && perl <= 5.15.1 */
/* The XS_EXTERNAL macro is used for functions that must not be static
* like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
* macro defined, the best we can do is assume XS is the same.
* Dito for XS_INTERNAL.
*/
#ifndef XS_EXTERNAL
# define XS_EXTERNAL(name) XS(name)
#endif
#ifndef XS_INTERNAL
# define XS_INTERNAL(name) XS(name)
#endif
/* Now, finally, after all this mess, we want an ExtUtils::ParseXS
* internal macro that we're free to redefine for varying linkage due
* to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
* XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
*/
#undef XS_EUPXS
#if defined(PERL_EUPXS_ALWAYS_EXPORT)
# define XS_EUPXS(name) XS_EXTERNAL(name)
#else
/* default to internal */
# define XS_EUPXS(name) XS_INTERNAL(name)
#endif
#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
/* prototype to pass -Wmissing-prototypes */
STATIC void
S_croak_xs_usage(const CV *const cv, const char *const params);
STATIC void
S_croak_xs_usage(const CV *const cv, const char *const params)
{
const GV *const gv = CvGV(cv);
PERL_ARGS_ASSERT_CROAK_XS_USAGE;
if (gv) {
const char *const gvname = GvNAME(gv);
const HV *const stash = GvSTASH(gv);
const char *const hvname = stash ? HvNAME(stash) : NULL;
if (hvname)
Perl_croak_nocontext("Usage: %s::%s(%s)", hvname, gvname, params);
else
Perl_croak_nocontext("Usage: %s(%s)", gvname, params);
} else {
/* Pants. I don't think that it should be possible to get here. */
Perl_croak_nocontext("Usage: CODE(0x%" UVxf ")(%s)", PTR2UV(cv), params);
}
}
#undef PERL_ARGS_ASSERT_CROAK_XS_USAGE
#define croak_xs_usage S_croak_xs_usage
#endif
/* NOTE: the prototype of newXSproto() is different in versions of perls,
* so we define a portable version of newXSproto()
*/
#ifdef newXS_flags
#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0)
#else
#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv)
#endif /* !defined(newXS_flags) */
#if PERL_VERSION_LE(5, 21, 5)
# define newXS_deffile(a,b) Perl_newXS(aTHX_ a,b,file)
#else
# define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b)
#endif
#line 188 "XSParagraph.c"
XS_EUPXS(XS_Texinfo__Convert__Paragraph_init); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_init)
{
dVAR; dXSARGS;
if (items != 2)
croak_xs_usage(cv, "unused, unused2");
{
int unused = (int)SvIV(ST(0))
;
char * unused2 = (char *)SvPV_nolen(ST(1))
;
int RETVAL;
dXSTARG;
RETVAL = xspara_init(unused, unused2);
XSprePUSH; PUSHi((IV)RETVAL);
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_set_state); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_set_state)
{
dVAR; dXSARGS;
if (items != 1)
croak_xs_usage(cv, "state");
{
SV * state = ST(0)
;
xspara_set_state(state);
}
XSRETURN_EMPTY;
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_new); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_new)
{
dVAR; dXSARGS;
if (items < 1)
croak_xs_usage(cv, "class, ...");
{
SV * class = ST(0)
;
#line 54 "XSParagraph.xs"
HV *conf = 0;
int id;
#line 239 "XSParagraph.c"
SV * RETVAL;
#line 57 "XSParagraph.xs"
items--;
if (items > 0)
{
if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVHV)
conf = (HV *) SvRV(ST(1));
}
id = xspara_new (conf);
/* Create an integer, which the other functions
need as their first argument. */
RETVAL = newSViv (id);
#line 253 "XSParagraph.c"
RETVAL = sv_2mortal(RETVAL);
ST(0) = RETVAL;
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_end_line_count); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_end_line_count)
{
dVAR; dXSARGS;
if (items != 1)
croak_xs_usage(cv, "paragraph");
{
SV * paragraph = ST(0)
;
int RETVAL;
dXSTARG;
#line 76 "XSParagraph.xs"
xspara_set_state (paragraph);
RETVAL = xspara_end_line_count ();
#line 275 "XSParagraph.c"
XSprePUSH; PUSHi((IV)RETVAL);
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_counter); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_counter)
{
dVAR; dXSARGS;
if (items != 1)
croak_xs_usage(cv, "paragraph");
{
SV * paragraph = ST(0)
;
int RETVAL;
dXSTARG;
#line 85 "XSParagraph.xs"
xspara_set_state (paragraph);
RETVAL = xspara_counter ();
#line 296 "XSParagraph.c"
XSprePUSH; PUSHi((IV)RETVAL);
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph__end_line); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph__end_line)
{
dVAR; dXSARGS;
if (items != 1)
croak_xs_usage(cv, "paragraph");
{
SV * paragraph = ST(0)
;
#line 94 "XSParagraph.xs"
xspara_set_state (paragraph);
xspara__end_line ();
#line 315 "XSParagraph.c"
}
XSRETURN_EMPTY;
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_end_line); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_end_line)
{
dVAR; dXSARGS;
if (items != 1)
croak_xs_usage(cv, "paragraph");
{
SV * paragraph = ST(0)
;
char * RETVAL;
dXSTARG;
#line 101 "XSParagraph.xs"
xspara_set_state (paragraph);
RETVAL = xspara_end_line ();
#line 335 "XSParagraph.c"
sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_get_pending); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_get_pending)
{
dVAR; dXSARGS;
if (items != 1)
croak_xs_usage(cv, "paragraph");
{
SV * paragraph = ST(0)
;
char * RETVAL;
dXSTARG;
#line 110 "XSParagraph.xs"
xspara_set_state (paragraph);
RETVAL = xspara_get_pending ();
#line 356 "XSParagraph.c"
sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG;
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_add_pending_word); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_add_pending_word)
{
dVAR; dXSARGS;
if (items < 1)
croak_xs_usage(cv, "paragraph, ...");
{
SV * paragraph = ST(0)
;
#line 120 "XSParagraph.xs"
int add_spaces = 0;
char *retval;
#line 375 "XSParagraph.c"
SV * RETVAL;
#line 123 "XSParagraph.xs"
items -= 1;
if (items > 0)
{
if (SvOK(ST(1)))
{
add_spaces = (int)SvIV(ST(1));;
}
}
xspara_set_state (paragraph);
retval = xspara_add_pending_word (add_spaces);
RETVAL = newSVpv (retval, 0);
SvUTF8_on (RETVAL);
#line 391 "XSParagraph.c"
RETVAL = sv_2mortal(RETVAL);
ST(0) = RETVAL;
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_end); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_end)
{
dVAR; dXSARGS;
if (items != 1)
croak_xs_usage(cv, "paragraph");
{
SV * paragraph = ST(0)
;
#line 143 "XSParagraph.xs"
char *retval;
#line 410 "XSParagraph.c"
SV * RETVAL;
#line 145 "XSParagraph.xs"
xspara_set_state (paragraph);
retval = xspara_end ();
RETVAL = newSVpv (retval, 0);
SvUTF8_on (RETVAL);
#line 418 "XSParagraph.c"
RETVAL = sv_2mortal(RETVAL);
ST(0) = RETVAL;
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_add_text); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_add_text)
{
dVAR; dXSARGS;
if (items != 2)
croak_xs_usage(cv, "paragraph, text_in");
{
SV * paragraph = ST(0)
;
SV * text_in = ST(1)
;
#line 159 "XSParagraph.xs"
char *text;
STRLEN text_len;
TEXT retval;
#line 441 "XSParagraph.c"
SV * RETVAL;
#line 163 "XSParagraph.xs"
/* Always convert the input to UTF8 with sv_utf8_upgrade, so we can
process it properly in xspara_add_next. */
if (!SvUTF8 (text_in))
sv_utf8_upgrade (text_in);
text = SvPV (text_in, text_len);
xspara_set_state (paragraph);
retval = xspara_add_text (text, text_len);
RETVAL = newSVpv (retval.text ? retval.text : "", retval.end);
SvUTF8_on (RETVAL);
#line 457 "XSParagraph.c"
RETVAL = sv_2mortal(RETVAL);
ST(0) = RETVAL;
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_add_next); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_add_next)
{
dVAR; dXSARGS;
if (items < 2)
croak_xs_usage(cv, "paragraph, text_in, ...");
{
SV * paragraph = ST(0)
;
SV * text_in = ST(1)
;
#line 184 "XSParagraph.xs"
char *text;
STRLEN text_len;
TEXT retval;
SV *arg_in;
int transparent = 0;
#line 482 "XSParagraph.c"
SV * RETVAL;
#line 190 "XSParagraph.xs"
items -= 2;
if (items > 0)
{
items--;
arg_in = ST(2);
if (SvOK(arg_in))
transparent = (int)SvIV(arg_in);
}
/* Always convert the input to UTF8 with sv_utf8_upgrade, so we can
process it properly in xspara_add_next. */
if (!SvUTF8 (text_in))
sv_utf8_upgrade (text_in);
text = SvPV (text_in, text_len);
xspara_set_state (paragraph);
retval = xspara_add_next (text, text_len, transparent);
RETVAL = newSVpv (retval.text ? retval.text : "", retval.end);
SvUTF8_on (RETVAL);
#line 506 "XSParagraph.c"
RETVAL = sv_2mortal(RETVAL);
ST(0) = RETVAL;
}
XSRETURN(1);
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_remove_end_sentence); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_remove_end_sentence)
{
dVAR; dXSARGS;
if (items != 1)
croak_xs_usage(cv, "paragraph");
{
SV * paragraph = ST(0)
;
#line 219 "XSParagraph.xs"
xspara_set_state (paragraph);
xspara_remove_end_sentence ();
#line 526 "XSParagraph.c"
}
XSRETURN_EMPTY;
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_add_end_sentence); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_add_end_sentence)
{
dVAR; dXSARGS;
if (items != 2)
croak_xs_usage(cv, "paragraph, value");
{
SV * paragraph = ST(0)
;
SV * value = ST(1)
;
#line 227 "XSParagraph.xs"
int intvalue = 0;
#line 545 "XSParagraph.c"
#line 229 "XSParagraph.xs"
if (SvOK(value))
intvalue = (int)SvIV(value);
xspara_set_state (paragraph);
xspara_add_end_sentence (intvalue);
#line 551 "XSParagraph.c"
}
XSRETURN_EMPTY;
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_allow_end_sentence); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_allow_end_sentence)
{
dVAR; dXSARGS;
if (items != 1)
croak_xs_usage(cv, "paragraph");
{
SV * paragraph = ST(0)
;
#line 238 "XSParagraph.xs"
xspara_set_state (paragraph);
xspara_allow_end_sentence ();
#line 569 "XSParagraph.c"
}
XSRETURN_EMPTY;
}
XS_EUPXS(XS_Texinfo__Convert__Paragraph_set_space_protection); /* prototype to pass -Wmissing-prototypes */
XS_EUPXS(XS_Texinfo__Convert__Paragraph_set_space_protection)
{
dVAR; dXSARGS;
if (items < 2)
croak_xs_usage(cv, "paragraph, space_protection_in, ...");
{
SV * paragraph = ST(0)
;
SV * space_protection_in = ST(1)
;
#line 249 "XSParagraph.xs"
int space_protection = -1;
int ignore_columns = -1;
int keep_end_lines = -1;
int french_spacing = -1;
int double_width_no_break = -1;
SV *arg_in;
#line 593 "XSParagraph.c"
#line 256 "XSParagraph.xs"
if (SvOK(space_protection_in))
space_protection = (int)SvIV(space_protection_in);
/* Get optional arguments from stack. */
items -= 2;
if (items > 0)
{
items--;
arg_in = ST(2);
if (SvOK(arg_in))
ignore_columns = (int)SvIV(arg_in);
}
if (items > 0)
{
items--;
arg_in = ST(3);
if (SvOK(arg_in))
keep_end_lines = (int)SvIV(arg_in);
}
if (items > 0)
{
items--;
arg_in = ST(4);
if (SvOK(arg_in))
french_spacing = (int)SvIV(arg_in);
}
if (items > 0)
{
items--;
arg_in = ST(5);
if (SvOK(arg_in))
double_width_no_break = (int)SvIV(arg_in);
}
xspara_set_state (paragraph);
xspara_set_space_protection
(space_protection, ignore_columns, keep_end_lines,
french_spacing, double_width_no_break);
#line 632 "XSParagraph.c"
}
XSRETURN_EMPTY;
}
#ifdef __cplusplus
extern "C"
#endif
XS_EXTERNAL(boot_Texinfo__Convert__Paragraph); /* prototype to pass -Wmissing-prototypes */
XS_EXTERNAL(boot_Texinfo__Convert__Paragraph)
{
#if PERL_VERSION_LE(5, 21, 5)
dVAR; dXSARGS;
#else
dVAR; dXSBOOTARGSXSAPIVERCHK;
#endif
#if (PERL_REVISION == 5 && PERL_VERSION < 9)
char* file = __FILE__;
#else
const char* file = __FILE__;
#endif
PERL_UNUSED_VAR(file);
PERL_UNUSED_VAR(cv); /* -W */
PERL_UNUSED_VAR(items); /* -W */
#if PERL_VERSION_LE(5, 21, 5)
XS_VERSION_BOOTCHECK;
# ifdef XS_APIVERSION_BOOTCHECK
XS_APIVERSION_BOOTCHECK;
# endif
#endif
(void)newXSproto_portable("Texinfo::Convert::Paragraph::init", XS_Texinfo__Convert__Paragraph_init, file, "$$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::set_state", XS_Texinfo__Convert__Paragraph_set_state, file, "$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::new", XS_Texinfo__Convert__Paragraph_new, file, "$;@");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::end_line_count", XS_Texinfo__Convert__Paragraph_end_line_count, file, "$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::counter", XS_Texinfo__Convert__Paragraph_counter, file, "$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::_end_line", XS_Texinfo__Convert__Paragraph__end_line, file, "$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::end_line", XS_Texinfo__Convert__Paragraph_end_line, file, "$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::get_pending", XS_Texinfo__Convert__Paragraph_get_pending, file, "$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::add_pending_word", XS_Texinfo__Convert__Paragraph_add_pending_word, file, "$;@");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::end", XS_Texinfo__Convert__Paragraph_end, file, "$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::add_text", XS_Texinfo__Convert__Paragraph_add_text, file, "$$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::add_next", XS_Texinfo__Convert__Paragraph_add_next, file, "$$;@");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::remove_end_sentence", XS_Texinfo__Convert__Paragraph_remove_end_sentence, file, "$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::add_end_sentence", XS_Texinfo__Convert__Paragraph_add_end_sentence, file, "$$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::allow_end_sentence", XS_Texinfo__Convert__Paragraph_allow_end_sentence, file, "$");
(void)newXSproto_portable("Texinfo::Convert::Paragraph::set_space_protection", XS_Texinfo__Convert__Paragraph_set_space_protection, file, "$$;@");
#if PERL_VERSION_LE(5, 21, 5)
# if PERL_VERSION_GE(5, 9, 0)
if (PL_unitcheckav)
call_list(PL_scopestack_ix, PL_unitcheckav);
# endif
XSRETURN_YES;
#else
Perl_xs_boot_epilog(aTHX_ ax);
#endif
}