[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [libextractor-perl] 01/08: i
From: |
gnunet |
Subject: |
[GNUnet-SVN] [libextractor-perl] 01/08: i |
Date: |
Sat, 13 Apr 2019 13:48:31 +0200 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to branch master
in repository libextractor-perl.
commit 9527875f96328b9a73f042cb6985f60fad6bd666
Author: Christian Grothoff <address@hidden>
AuthorDate: Sun Nov 13 04:49:40 2005 +0000
i
---
01_basic.t | 7 ++++
02_basic.t | 11 +++++
Extract.pm | 30 ++++++++++++++
Extract.xs | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Makefile.PL | 60 +++++++++++++++++++++++++++
pextract.c | 58 ++++++++++++++++++++++++++
pextract.h | 34 ++++++++++++++++
typemap | 16 ++++++++
8 files changed, 349 insertions(+)
diff --git a/01_basic.t b/01_basic.t
new file mode 100644
index 0000000..ddd1dd0
--- /dev/null
+++ b/01_basic.t
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+use_ok('File::Extract');
diff --git a/02_basic.t b/02_basic.t
new file mode 100644
index 0000000..84fd988
--- /dev/null
+++ b/02_basic.t
@@ -0,0 +1,11 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More tests => 2;
+use File::Extract;
+
+my $extractor = File::Extract->new();
+isa_ok($extractor, "File::Extract");
+
+ok($extractor->loadDefaultLibraries());
diff --git a/Extract.pm b/Extract.pm
new file mode 100644
index 0000000..ef49254
--- /dev/null
+++ b/Extract.pm
@@ -0,0 +1,30 @@
+package File::Extract;
+
+use strict;
+use warnings;
+use DynaLoader;
+
+our $VERSION = 0.01;
+our @ISA = qw(DynaLoader);
+
+sub dl_load_flags { 0x01 }
+
+bootstrap File::Extract $VERSION;
+
+sub new {
+ my $class = shift;
+ $class = ref $class || $class;
+ my $self = {};
+ bless $self, $class;
+ return $self;
+}
+
+1;
+
+=pod
+
+=head1 DESCRIPTION
+
+File::Extract - Perl interface to libdoodle/libextractor
+
+=cut
diff --git a/Extract.xs b/Extract.xs
new file mode 100644
index 0000000..11a5ab1
--- /dev/null
+++ b/Extract.xs
@@ -0,0 +1,133 @@
+#include "pextract.h"
+
+MODULE = File::Extract PACKAGE = File::Extract PREFIX = EXTRACTOR_
+
+SV*
+EXTRACTOR_loadDefaultLibraries(extractor)
+ SV* extractor
+ PREINIT:
+ HV* hv;
+ CODE:
+ RETVAL =
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_loadDefaultLibraries());
+ hv = pextract_get_hv_from_file_extract_obj(extractor);
+ if (hv) {
+ SvREFCNT_inc(RETVAL);
+ hv_store(hv, "extractor_list", 14, RETVAL, 0);
+ } else
+ croak("foo");
+ OUTPUT:
+ RETVAL
+
+SV*
+EXTRACTOR_loadConfigLibraries(extractor, config)
+ SV* extractor
+ const char* config
+ PREINIT:
+ EXTRACTOR_ExtractorList* list = NULL;
+ CODE:
+ list =
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
+ RETVAL =
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_loadConfigLibraries(list,
config));
+ OUTPUT:
+ RETVAL
+
+SV*
+EXTRACTOR_addLibrary(extractor, library)
+ SV* extractor
+ const char* library
+ PREINIT:
+ EXTRACTOR_ExtractorList* list = NULL;
+ CODE:
+ list =
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
+ RETVAL =
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_addLibrary(list, library));
+ OUTPUT:
+ RETVAL
+
+SV*
+EXTRACTOR_addLibraryLast(extractor, library)
+ SV* extractor
+ const char* library
+ PREINIT:
+ EXTRACTOR_ExtractorList* list = NULL;
+ CODE:
+ list =
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
+ RETVAL =
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_addLibraryLast(list, library));
+ OUTPUT:
+ RETVAL
+
+SV*
+EXTRACTOR_removeLibrary(extractor, library)
+ SV* extractor
+ const char* library
+ PREINIT:
+ EXTRACTOR_ExtractorList* list = NULL;
+ CODE:
+ list =
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
+ RETVAL =
newSvEXTRACTOR_ExtractorList_ornull(EXTRACTOR_removeLibrary(list, library));
+ OUTPUT:
+ RETVAL
+
+void
+EXTRACTOR_removeAll(extractor)
+ SV* extractor
+ PREINIT:
+ EXTRACTOR_ExtractorList* list = NULL;
+ CODE:
+ list =
SvEXTRACTOR_ExtractorList_ornull(pextract_get_extractor_list(extractor));
+ EXTRACTOR_removeAll(list);
+
+void
+EXTRACTOR_getKeywords(extractor, filename)
+ SV* extractor
+ const char* filename
+ PREINIT:
+ EXTRACTOR_ExtractorList* list = NULL;
+ EXTRACTOR_KeywordList* result = NULL;
+ EXTRACTOR_KeywordList* i = NULL;
+ char* keyword_type;
+ PPCODE:
+ list =
SvEXTRACTOR_ExtractorList(pextract_get_extractor_list(extractor));
+ result = EXTRACTOR_getKeywords(list, filename);
+ for (i = result; i != NULL; i = i->next) {
+ keyword_type =
(char*)EXTRACTOR_getKeywordTypeAsString(i->keywordType);
+ XPUSHs (sv_2mortal(newSVpv(keyword_type,
strlen(keyword_type))));
+ XPUSHs (sv_2mortal(newSVpv(i->keyword,
strlen(i->keyword))));
+ }
+ EXTRACTOR_freeKeywords(result);
+
+void
+getKeywordsFromBuffer(extractor, buffer)
+ SV* extractor
+ SV* buffer
+ PREINIT:
+ EXTRACTOR_ExtractorList* list = NULL;
+ EXTRACTOR_KeywordList* result = NULL;
+ EXTRACTOR_KeywordList* i = NULL;
+ char* keyword_type;
+ size_t size;
+ const void* data;
+ PPCODE:
+ list =
SvEXTRACTOR_ExtractorList(pextract_get_extractor_list(extractor));
+ data = SvPV(buffer, size);
+ result = EXTRACTOR_getKeywords2(list, data, size);
+ for (i = result; i != NULL; i = i->next) {
+ keyword_type =
(char*)EXTRACTOR_getKeywordTypeAsString(i->keywordType);
+ XPUSHs (sv_2mortal(newSVpv(keyword_type,
strlen(keyword_type))));
+ XPUSHs (sv_2mortal(newSVpv(i->keyword,
strlen(i->keyword))));
+ }
+ EXTRACTOR_freeKeywords(result);
+
+void
+getLibraries(extractor)
+ SV* extractor
+ PREINIT:
+ EXTRACTOR_ExtractorList* list = NULL;
+ EXTRACTOR_ExtractorList* i = NULL;
+ PPCODE:
+ list =
SvEXTRACTOR_ExtractorList(pextract_get_extractor_list(extractor));
+ for (i = list; i != NULL; i = i->next) {
+ XPUSHs(sv_2mortal(newSVpv(i->libname,
strlen(i->libname))));
+ XPUSHs(sv_2mortal(newSVpv(i->options,
strlen(i->libname))));
+ }
+
+#BOOT:
+# PEXTRACTOR_CALL_BOOT(boot_File__Extract__ExtractorList);
diff --git a/Makefile.PL b/Makefile.PL
new file mode 100644
index 0000000..3b16a71
--- /dev/null
+++ b/Makefile.PL
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Cwd;
+use File::Spec;
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+ NAME => 'File::Extract',
+ ABSTRACT_FROM => 'pm/Extract.pm',
+ VERSION_FROM => 'pm/Extract.pm',
+ XSPROTOARG => '-noprototypes',
+ MAN3PODS => {
+ 'pm/Extract.pm' =>
'$(INST_MAN3DIR)/File::Extract.$(MAN3EXT)'
+ },
+ PM => {
+ 'pm/Extract.pm' => '$(INST_LIBDIR)/Extract.pm'
+ },
+ INC => '-Wall -I'.cwd(),
+ LIBS => '-lextractor',
+ do {
+ my @clean = ();
+ my @OBJECT = ();
+ my %XS = ();
+ for my $xs (<xs/*.xs>) {
+ (my $c = $xs) =~ s/\.xs$/\.c/i;
+ (my $o = $xs) =~ s/\.xs$/\$(OBJ_EXT)/i;
+ $XS{$xs} = $c;
+ push @OBJECT, $o;
+ push @clean, $o;
+ }
+
+ for my $c (<*.c>) {
+ (my $o = $c) =~ s/\.c$/\$(OBJ_EXT)/i;
+ push @OBJECT, $o;
+ push @clean, $o;
+ }
+
+ clean => { FILES => join(" ", @clean) }, OBJECT =>
join(" ", @OBJECT), XS => \%XS
+ },
+);
+
+package MY;
+
+sub const_cccmd {
+ my $inherited = shift->SUPER::const_cccmd(@_);
+ return '' unless $inherited;
+ use Config;
+ if ($Config{cc} eq 'cl') {
+ warn "you are using MSVC... my condolences.";
+ $inherited .= ' /Fo$@';
+ } else {
+ $inherited .= ' -o $@';
+ }
+
+ return $inherited;
+}
+
+1;
diff --git a/pextract.c b/pextract.c
new file mode 100644
index 0000000..a3e1cfc
--- /dev/null
+++ b/pextract.c
@@ -0,0 +1,58 @@
+#include "pextract.h"
+
+void
+ _pextractor_call_XS(pTHX_ void (*subaddr) (pTHX_ CV*), CV* cv, SV** mark) {
+ dSP;
+ PUSHMARK(mark);
+ (*subaddr)(aTHX_ cv);
+ PUTBACK;
+ }
+
+SV*
+pextract_new_object(void* object, const char* package) {
+ SV* obj;
+ SV* sv;
+ HV* stash;
+
+ if (!object) {
+ return &PL_sv_undef;
+ }
+
+ obj = (SV*)newHV();
+ sv_magic(obj, 0, PERL_MAGIC_ext, (const char*)object, 0);
+ sv = newRV_inc(obj);
+ stash = gv_stashpv(package, 1);
+ sv_bless(sv, stash);
+
+ return sv;
+}
+
+void*
+pextract_get_object(SV* sv, const char* package) {
+ MAGIC* mg;
+
+ if (!sv || !SvOK(sv) || !SvROK(sv) || !sv_isobject(sv) || !sv_isa(sv,
package) || !(mg = mg_find(SvRV(sv), PERL_MAGIC_ext)))
+ return NULL;
+ return (void*)mg->mg_ptr;
+}
+
+HV*
+pextract_get_hv_from_file_extract_obj(SV* hvref) {
+ if (!hvref
+ || !SvOK(hvref)
+ || !SvROK(hvref)
+ || !(SvTYPE(SvRV(hvref)) == SVt_PVHV)
+ || !sv_isobject(hvref)
+ || !sv_isa(hvref, "File::Extract"))
+ return NULL;
+ return (HV*)SvRV((SV*)hvref);
+}
+
+SV*
+pextract_get_extractor_list(SV* extractor) {
+ HV* hv = pextract_get_hv_from_file_extract_obj(extractor);
+ if (!hv)
+ return NULL;
+ return *hv_fetch(hv, "extractor_list", 14, 0);
+}
+
diff --git a/pextract.h b/pextract.h
new file mode 100644
index 0000000..b6a5d04
--- /dev/null
+++ b/pextract.h
@@ -0,0 +1,34 @@
+#ifndef __PEXTRACT_H__
+#define __PEXTRACT_H__
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+#include "extractor.h"
+
+SV* pextract_new_object(void* object, const char* package);
+void* pextract_get_object(SV* sv, const char* package);
+
+HV* pextract_get_hv_from_file_extract_obj(SV* hvref);
+SV* pextract_get_extractor_list(SV* extractor);
+
+void _pextractor_call_XS(pTHX_ void (*subaddr) (pTHX_ CV*), CV* cv, SV** mark);
+
+#define PEXTRACTOR_CALL_BOOT(name) \
+ { \
+ extern XS(name); \
+ _pextractor_call_XS(aTHX_ name, cv, mark); \
+ }
+
+/*
+#define newSvExtractor(extractor) pextract_new_object(extractor,
"File::Extract::Extractor");
+#define SvEXTRACTOR_Extractor(sv) (struct
EXTRACTOR_Extractor*)pextract_get_object(sv, "File::Extract::Extractor");
+*/
+
+#define newSvEXTRACTOR_ExtractorList(val) pextract_new_object(val,
"File::Extract::ExtractorList")
+#define SvEXTRACTOR_ExtractorList(sv)
(EXTRACTOR_ExtractorList*)pextract_get_object(sv,
"File::Extract::ExtractorList")
+typedef EXTRACTOR_ExtractorList EXTRACTOR_ExtractorList_ornull;
+#define SvEXTRACTOR_ExtractorList_ornull(sv) (((sv) && SvOK(sv)) ?
SvEXTRACTOR_ExtractorList(sv) : NULL)
+#define newSvEXTRACTOR_ExtractorList_ornull(val) (((val) == NULL) ?
&PL_sv_undef : newSvEXTRACTOR_ExtractorList(val))
+
+#endif /* __PEXTRACT_H__ */
diff --git a/typemap b/typemap
new file mode 100644
index 0000000..fc8997e
--- /dev/null
+++ b/typemap
@@ -0,0 +1,16 @@
+TYPEMAP
+
+EXTRACTOR_ExtractorList* T_PEXTRACT_GENERIC_WRAPPER
+EXTRACTOR_ExtractorList_ornull* T_PEXTRACT_GENERIC_WRAPPER
+
+OUTPUT
+
+T_PEXTRACT_GENERIC_WRAPPER
+ $arg = newSv${(my $ntype = $type) =~
s/(?:const\s+)?([:\w]+)(?:\s*\*)$/$1/;
+ \$ntype} ($var);
+
+INPUT
+
+T_PEXTRACT_GENERIC_WRAPPER
+ $var = Sv${(my $ntype = $type) =~
s/(?:const\s+)?([:\w]+)(?:\s*\*)$/$1/x;
+ \$ntype} ($arg);
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [libextractor-perl] branch master created (now 18437ed), gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 01/08: i,
gnunet <=
- [GNUnet-SVN] [libextractor-perl] 04/08: address@hidden: rafl | 2005-11-13 13:15:52 +0100 * Move typemap to xs/., gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 05/08: address@hidden: rafl | 2005-11-13 13:30:32 +0100 * Added an init method which is called after object construction to initialize the extractor_list value in the object hash. * Adjusted loadDefaultLibraries() to reflect the changes above., gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 07/08: address@hidden: rafl | 2005-11-13 22:51:22 +0100 * Fixed a segfault, gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 06/08: address@hidden: rafl | 2005-11-13 21:43:23 +0100 * Fixed some leaks, cleaned up a bit. * Functions that modify an extractor list don't have a return value anymore because they do this by reference, not by value., gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 02/08: sync, gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 03/08: address@hidden: rafl | 2005-11-13 12:46:00 +0100 * Moved everything in the right directory again. * Removed copying. I'm not sure about the license yet. I think I'll chose Artistic + GPL., gnunet, 2019/04/13
- [GNUnet-SVN] [libextractor-perl] 08/08: update readmes, gnunet, 2019/04/13