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