66 * modify it under the same terms as Perl itself.
77 */
88
9-
10- /*
11- * Standard XS greeting.
12- */
13- #ifdef __cplusplus
14- extern "C" {
15- #endif
169#define PERL_NO_GET_CONTEXT /* we want efficiency */
1710#include "EXTERN.h"
1811#include "perl.h"
1912#include "XSUB.h"
20- #ifdef __cplusplus
21- }
22- #endif
23-
24-
25-
26- /*
27- * Some perl version compatibility gruff.
28- */
29- #include "patchlevel.h"
30- #if PATCHLEVEL <= 4 /* perl5.004_XX */
31-
32- #ifndef PL_sv_undef
33- #define PL_sv_undef sv_undef
34- #define PL_sv_yes sv_yes
35- #endif
36-
37- #ifndef PL_hexdigit
38- #define PL_hexdigit hexdigit
39- #endif
40-
41- #ifndef ERRSV
42- #define ERRSV GvSV(errgv)
43- #endif
44-
45- #if (PATCHLEVEL == 4 && SUBVERSION <= 4 )
46- /* The newSVpvn function was introduced in perl5.004_05 */
47- static SV *
48- newSVpvn (char * s , STRLEN len )
49- {
50- register SV * sv = newSV (0 );
51- sv_setpvn (sv ,s ,len );
52- return sv ;
53- }
54- #endif /* not perl5.004_05 */
55- #endif /* perl5.004_XX */
56-
57- #ifndef dNOOP
58- #define dNOOP extern int errno
59- #endif
60- #ifndef dTHX
61- #define dTHX dNOOP
62- #define pTHX_
63- #define aTHX_
64- #endif
65-
66- #ifndef MEMBER_TO_FPTR
67- #define MEMBER_TO_FPTR (x ) (x)
68- #endif
13+ #include "ppport.h"
6914
70- #ifndef INT2PTR
71- #define INT2PTR (any ,d ) (any)(d)
72- #define PTR2IV (p ) (IV)(p)
73- #endif
74-
75-
76- #if PATCHLEVEL > 6 || (PATCHLEVEL == 6 && SUBVERSION > 0 )
77- #define RETHROW croak(Nullch)
78- #else
79- #define RETHROW { STRLEN my_na; croak("%s", SvPV(ERRSV, my_na)); }
80- #endif
81-
82- #if PATCHLEVEL < 8
83- /* No useable Unicode support */
84- /* Make these harmless if present */
85- #undef SvUTF8
86- #undef SvUTF8_on
87- #undef SvUTF8_off
88- #define SvUTF8 (sv ) 0
89- #define SvUTF8_on (sv ) 0
90- #define SvUTF8_off (sv ) 0
91- #else
92- #define UNICODE_HTML_PARSER
93- #endif
94-
95- #ifdef G_WARN_ON
96- #define DOWARN (PL_dowarn & G_WARN_ON)
97- #else
98- #define DOWARN PL_dowarn
99- #endif
100-
101- #ifndef CLONEf_JOIN_IN
102- #define CLONEf_JOIN_IN 0
103- #endif
15+ #define DOWARN (PL_dowarn & G_WARN_ON)
16+ #define RETHROW croak(Nullch)
10417
10518/*
10619 * Include stuff. We include .c files instead of linking them,
@@ -142,17 +55,13 @@ static PSTATE*
14255get_pstate_iv (pTHX_ SV * sv )
14356{
14457 PSTATE * p ;
145- #if PATCHLEVEL < 8
146- p = INT2PTR (PSTATE * , SvIV (sv ));
147- #else
14858 MAGIC * mg = SvMAGICAL (sv ) ? mg_find (sv , '~' ) : NULL ;
14959
15060 if (!mg )
15161 croak ("Lost parser state magic" );
15262 p = (PSTATE * )mg -> mg_ptr ;
15363 if (!p )
15464 croak ("Lost parser state magic" );
155- #endif
15665 if (p -> signature != P_SIGNATURE )
15766 croak ("Bad signature in parser state object at %p" , p );
15867 return p ;
@@ -169,7 +78,7 @@ get_pstate_hv(pTHX_ SV* sv) /* used by XS typemap
16978 if (!sv || SvTYPE (sv ) != SVt_PVHV )
17079 croak ("Not a reference to a hash" );
17180 hv = (HV * )sv ;
172- svp = hv_fetch (hv , "_hparser_xs_state" , 17 , 0 );
81+ svp = hv_fetchs (hv , "_hparser_xs_state" , 0 );
17382 if (svp ) {
17483 if (SvROK (* svp ))
17584 return get_pstate_iv (aTHX_ SvRV (* svp ));
@@ -211,15 +120,11 @@ free_pstate(pTHX_ PSTATE* pstate)
211120static int
212121magic_free_pstate (pTHX_ SV * sv , MAGIC * mg )
213122{
214- #if PATCHLEVEL < 8
215- free_pstate (aTHX_ get_pstate_iv (aTHX_ sv ));
216- #else
217123 free_pstate (aTHX_ (PSTATE * )mg -> mg_ptr );
218- #endif
219124 return 0 ;
220125}
221126
222- #if defined(USE_ITHREADS ) && PATCHLEVEL >= 8
127+ #if defined(USE_ITHREADS )
223128
224129static PSTATE *
225130dup_pstate (pTHX_ PSTATE * pstate , CLONE_PARAMS * params )
@@ -294,7 +199,7 @@ dup_pstate(pTHX_ PSTATE *pstate, CLONE_PARAMS *params)
294199
295200 if (params -> flags & CLONEf_JOIN_IN ) {
296201 pstate2 -> entity2char =
297- perl_get_hv ("HTML::Entities::entity2char" , TRUE );
202+ get_hv ("HTML::Entities::entity2char" , GV_ADD );
298203 } else {
299204 pstate2 -> entity2char = (HV * )sv_dup ((SV * )pstate -> entity2char , params );
300205 }
@@ -319,7 +224,7 @@ const MGVTBL vtbl_pstate =
319224 0 ,
320225 0 ,
321226 MEMBER_TO_FPTR (magic_free_pstate ),
322- #if defined(USE_ITHREADS ) && PATCHLEVEL >= 8
227+ #if defined(USE_ITHREADS )
323228 0 ,
324229 MEMBER_TO_FPTR (magic_dup_pstate ),
325230#endif
@@ -351,24 +256,20 @@ _alloc_pstate(self)
351256
352257 Newz (56 , pstate , 1 , PSTATE );
353258 pstate -> signature = P_SIGNATURE ;
354- pstate -> entity2char = perl_get_hv ("HTML::Entities::entity2char" , TRUE );
259+ pstate -> entity2char = get_hv ("HTML::Entities::entity2char" , GV_ADD );
355260 pstate -> tmp = NEWSV (0 , 20 );
356261
357262 sv = newSViv (PTR2IV (pstate ));
358- #if PATCHLEVEL < 8
359- sv_magic (sv , 0 , '~' , 0 , 0 );
360- #else
361263 sv_magic (sv , 0 , '~' , (char * )pstate , 0 );
362- #endif
363264 mg = mg_find (sv , '~' );
364265 assert (mg );
365266 mg -> mg_virtual = (MGVTBL * )& vtbl_pstate ;
366- #if defined(USE_ITHREADS ) && PATCHLEVEL >= 8
267+ #if defined(USE_ITHREADS )
367268 mg -> mg_flags |= MGf_DUP ;
368269#endif
369270 SvREADONLY_on (sv );
370271
371- hv_store (hv , "_hparser_xs_state" , 17 , newRV_noinc (sv ), 0 );
272+ hv_stores (hv , "_hparser_xs_state" , newRV_noinc (sv ));
372273
373274void
374275parse (self , chunk )
@@ -387,7 +288,7 @@ parse(self, chunk)
387288 do {
388289 int count ;
389290 PUSHMARK (SP );
390- count = perl_call_sv (generator , G_SCALAR |G_EVAL );
291+ count = call_sv (generator , G_SCALAR |G_EVAL );
391292 SPAGAIN ;
392293 chunk = count ? POPs : 0 ;
393294 PUTBACK ;
@@ -473,11 +374,7 @@ strict_comment(pstate,...)
473374 case 7 : attr = & pstate -> case_sensitive ; break ;
474375 case 8 : attr = & pstate -> strict_end ; break ;
475376 case 9 : attr = & pstate -> closing_plaintext ; break ;
476- #ifdef UNICODE_HTML_PARSER
477377 case 10 : attr = & pstate -> utf8_mode ; break ;
478- #else
479- case 10 : croak ("The utf8_mode does not work with this perl; perl-5.8 or better required" );
480- #endif
481378 case 11 : attr = & pstate -> empty_element_tags ; break ;
482379 case 12 : attr = & pstate -> xml_pic ; break ;
483380 case 13 : attr = & pstate -> backquote ; break ;
@@ -538,8 +435,8 @@ ignore_tags(pstate,...)
538435 if (SvTYPE (sv ) == SVt_PVAV ) {
539436 AV * av = (AV * )sv ;
540437 STRLEN j ;
541- STRLEN len = av_len (av ) + 1 ;
542- for (j = 0 ; j < len ; j ++ ) {
438+ STRLEN top = av_top_index (av );
439+ for (j = 0 ; j <= top ; j ++ ) {
543440 SV * * svp = av_fetch (av , j , 0 );
544441 if (svp ) {
545442 hv_store_ent (* attr , * svp , newSViv (0 ), 0 );
611508decode_entities (...)
612509 PREINIT :
613510 int i ;
614- HV * entity2char = perl_get_hv ("HTML::Entities::entity2char" , FALSE );
511+ HV * entity2char = get_hv ("HTML::Entities::entity2char" , 0 );
615512 PPCODE :
616513 if (GIMME_V == G_SCALAR && items > 1 )
617514 items = 1 ;
@@ -662,26 +559,17 @@ _probably_utf8_chunk(string)
662559 STRLEN len ;
663560 char * s ;
664561 CODE :
665- #ifdef UNICODE_HTML_PARSER
666562 sv_utf8_downgrade (string , 0 );
667563 s = SvPV (string , len );
668564 RETVAL = probably_utf8_chunk (aTHX_ s , len );
669- #else
670- RETVAL = 0 ; /* avoid never initialized complains from compiler */
671- croak ("_probably_utf8_chunk() only works for Unicode enabled perls" );
672- #endif
673565 OUTPUT :
674566 RETVAL
675567
676568int
677569UNICODE_SUPPORT ()
678570 PROTOTYPE :
679571 CODE :
680- #ifdef UNICODE_HTML_PARSER
681572 RETVAL = 1 ;
682- #else
683- RETVAL = 0 ;
684- #endif
685573 OUTPUT :
686574 RETVAL
687575
0 commit comments