The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
MODULE = SWISH::3		PACKAGE = SWISH::3::Data

PROTOTYPES: enable


SV*
s3(self)
    swish_ParserData *self;
    
    PREINIT:
        char    *class;
        swish_3 *s3;

    CODE:
        self->s3->ref_cnt++;
        class  = sp_Stash_get_char((SV*)self->s3->stash, SELF_CLASS_KEY);
        //warn("s3 class = %s\n", class);
        RETVAL = sp_bless_ptr( class, self->s3 );
        
    OUTPUT:
        RETVAL
        
    CLEANUP:
        SvREFCNT_inc( RETVAL );


swish_Config*
config(self)
    swish_ParserData* self
    
	PREINIT:
        char* CLASS;

    CODE:
        CLASS  = sp_Stash_get_char(self->s3->stash, CONFIG_CLASS_KEY);
        self->s3->config->ref_cnt++;
        RETVAL = self->s3->config;
        
    OUTPUT:
        RETVAL
        
        
SV*
property(self, p)
    swish_ParserData* self;
    xmlChar* p;
    
	PREINIT:
        xmlBufferPtr buf;
        
    CODE:
        buf = swish_hash_fetch(self->properties->hash, p);
        RETVAL = newSVpvn((char*)xmlBufferContent(buf), xmlBufferLength(buf));
        
    OUTPUT:
        RETVAL
        
SV*
metaname(self, m)
    swish_ParserData* self;
    xmlChar* m;
    
	PREINIT:
        xmlBufferPtr buf;
        
    CODE:
        buf = xmlHashLookup(self->metanames->hash, m);
        RETVAL = newSVpvn((char*)xmlBufferContent(buf), xmlBufferLength(buf));
        
    OUTPUT:
        RETVAL

        
SV*
properties(self)
    swish_ParserData* self
    
    CODE:
        RETVAL = newRV_noinc((SV*)sp_nb_to_hash( self->properties ));
        
    OUTPUT:
        RETVAL
        

SV*
metanames(self)
    swish_ParserData* self
    
    CODE:
        RETVAL = newRV_noinc((SV*)sp_nb_to_hash(self->metanames));
        
    OUTPUT:
        RETVAL
       


swish_DocInfo *
doc(self)
    swish_ParserData* self
    
    PREINIT:
        char* CLASS;
        
    CODE:
        CLASS  = DOC_CLASS;
        self->docinfo->ref_cnt++;
        RETVAL = self->docinfo;
        
    OUTPUT:
        RETVAL


swish_TokenIterator *
tokens(self)
    swish_ParserData* self
    
    PREINIT:
        char* CLASS;
        
    CODE:
        CLASS = TOKENITERATOR_CLASS;
        self->token_iterator->ref_cnt++;    // TODO needed?
        RETVAL = self->token_iterator;
        
    OUTPUT:
        RETVAL