1 /***************************************************************************/ 2 /* This code is part of WWW grabber called pavuk */ 3 /* Copyright (c) 1997 - 2001 Stefan Ondrejicka */ 4 /* Distributed under GPL 2 or later */ 5 /***************************************************************************/ 6 7 #ifndef _lfname_h_ 8 #define _lfname_h_ 9 10 #ifdef HAVE_REGEX 11 #ifdef HAVE_PCRE_REGEX 12 #include <pcre.h> 13 #endif 14 #ifdef HAVE_REGEX_H 15 #include <regex.h> 16 #else 17 #ifdef HAVE_V8_REGEX 18 #ifndef NSUBEXP 19 #include <regexp.h> 20 #endif 21 #endif 22 #endif 23 #endif 24 25 #include "url.h" 26 27 typedef enum 28 { 29 LFNAME_UNKNOWN, 30 #ifdef HAVE_REGEX 31 LFNAME_REGEX, 32 #endif 33 LFNAME_FNMATCH 34 } lfname_type; 35 36 typedef struct 37 { 38 lfname_type type; 39 #ifdef HAVE_POSIX_REGEX 40 regex_t preg; 41 regmatch_t *pmatch; 42 #endif 43 #ifdef HAVE_V8_REGEX 44 regexp *preg; 45 #endif 46 #ifdef HAVE_GNU_REGEX 47 struct re_pattern_buffer preg; 48 struct re_registers pmatch; 49 #endif 50 #ifdef HAVE_PCRE_REGEX 51 pcre *preg; 52 pcre_extra *preg_extra; 53 int pmatch_nr; 54 int *pmatch; 55 #endif 56 char *matchstr; 57 char *transstr; 58 } lfname; 59 60 /* need to export for jsbind.c */ 61 struct lfname_lsp_interp 62 { 63 url *urlp; 64 const char *urlstr; 65 char *scheme; 66 char *passwd; 67 char *user; 68 char *host; 69 char *domain; 70 char *port; 71 char *path; 72 char *name; 73 char *basename; 74 char *extension; 75 char *query; 76 char *post_query; 77 char *deflt; 78 const char *mime_type; 79 const char *mime_type_ext; 80 lfname *orig; 81 }; 82 83 extern lfname *lfname_new(lfname_type, const char *, const char *); 84 extern void lfname_free(lfname *); 85 extern char *lfname_get_by_url(url *, const char *, const char *, lfname *); 86 extern int lfname_match(lfname *, const char *); 87 extern int lfname_check_pattern(lfname_type, const char *); 88 extern int lfname_check_rule(const char *); 89 extern const char *lfname_interp_get_macro(struct lfname_lsp_interp *, int); 90 extern int lfname_check_macro(int); 91 extern char *lfname_re_sub(lfname *, const char *, int); 92 93 94 #endif 95