recollindex and recollq build and run but fail because of unac error

This commit is contained in:
Jean-Francois Dockes 2015-08-31 13:08:50 +02:00
parent 20c9638ea4
commit 6bbb87b063
21 changed files with 3133 additions and 53 deletions

View file

@ -81,12 +81,7 @@ src/qtgui/recoll
src/qtgui/recoll.app src/qtgui/recoll.app
src/qtgui/recoll.pro src/qtgui/recoll.pro
src/query/alldeps src/query/alldeps
src/query/location.hh
src/query/position.hh
src/query/recollq src/query/recollq
src/query/stack.hh
src/query/wasaparse.cpp
src/query/wasaparse.hpp
src/sampleconf/rclmon.sh src/sampleconf/rclmon.sh
src/sampleconf/recoll.conf src/sampleconf/recoll.conf
src/utils/alldeps src/utils/alldeps

View file

@ -122,7 +122,8 @@ void RclConfig::zeroMe() {
bool RclConfig::isDefaultConfig() const bool RclConfig::isDefaultConfig() const
{ {
string defaultconf = path_cat(path_canon(path_home()), ".recoll/"); string defaultconf = path_cat(path_homedata(),
path_defaultrecollconfsubdir());
string specifiedconf = path_canon(m_confdir); string specifiedconf = path_canon(m_confdir);
path_catslash(specifiedconf); path_catslash(specifiedconf);
return !defaultconf.compare(specifiedconf); return !defaultconf.compare(specifiedconf);
@ -148,14 +149,8 @@ RclConfig::RclConfig(const string *argcnf)
} }
// Compute our data dir name, typically /usr/local/share/recoll // Compute our data dir name, typically /usr/local/share/recoll
const char *cdatadir = getenv("RECOLL_DATADIR"); m_datadir = path_sharedatadir();
if (cdatadir == 0) { fprintf(stderr, "RclConfig::RclConfig:: datadir: [%s]\n", m_datadir.c_str());
// If not in environment, use the compiled-in constant.
m_datadir = RECOLL_DATADIR;
} else {
m_datadir = cdatadir;
}
// We only do the automatic configuration creation thing for the default // We only do the automatic configuration creation thing for the default
// config dir, not if it was specified through -c or RECOLL_CONFDIR // config dir, not if it was specified through -c or RECOLL_CONFDIR
bool autoconfdir = false; bool autoconfdir = false;
@ -174,9 +169,10 @@ RclConfig::RclConfig(const string *argcnf)
m_confdir = path_canon(cp); m_confdir = path_canon(cp);
} else { } else {
autoconfdir = true; autoconfdir = true;
m_confdir = path_cat(path_home(), ".recoll/"); m_confdir = path_cat(path_homedata(), path_defaultrecollconfsubdir());
} }
} }
fprintf(stderr, "RclConfig::RclConfig:: confdir: [%s]\n", m_confdir.c_str());
// Note: autoconfdir and isDefaultConfig() are normally the same. We just // Note: autoconfdir and isDefaultConfig() are normally the same. We just
// want to avoid the imperfect test in isDefaultConfig() if we actually know // want to avoid the imperfect test in isDefaultConfig() if we actually know
@ -1164,7 +1160,7 @@ string RclConfig::getConfdirPath(const char *varname, const char *dflt) const
} else { } else {
result = path_tildexpand(result); result = path_tildexpand(result);
// If not an absolute path, compute relative to config dir // If not an absolute path, compute relative to config dir
if (result.at(0) != '/') { if (!path_isabsolute(result)) {
result = path_cat(getConfDir(), result); result = path_cat(getConfDir(), result);
} }
} }
@ -1320,7 +1316,7 @@ vector<string> RclConfig::getDaemSkippedPaths() const
string RclConfig::findFilter(const string &icmd) const string RclConfig::findFilter(const string &icmd) const
{ {
// If the path is absolute, this is it // If the path is absolute, this is it
if (icmd[0] == '/') if (path_isabsolute(icmd))
return icmd; return icmd;
string cmd; string cmd;

View file

@ -280,7 +280,7 @@ static bool checktopdirs(RclConfig *config, vector<string>& nonexist)
for (vector<string>::iterator it = tdl.begin(); it != tdl.end(); it++) { for (vector<string>::iterator it = tdl.begin(); it != tdl.end(); it++) {
*it = path_tildexpand(*it); *it = path_tildexpand(*it);
if (!it->size() || (*it)[0] != '/') { if (!it->size() || !path_isabsolute(*it)) {
if ((*it)[0] == '~') { if ((*it)[0] == '~') {
cerr << "Tilde expansion failed: " << *it << endl; cerr << "Tilde expansion failed: " << *it << endl;
LOGERR(("recollindex: tilde expansion failed: %s\n", LOGERR(("recollindex: tilde expansion failed: %s\n",

View file

@ -394,7 +394,7 @@ static regex_t minifromregex;
#else #else
basic_regex<char> fromregex; basic_regex<char> fromregex;
basic_regex<char> minifromregex; basic_regex<char> minifromregex;
#define REG_ICASE std::regex_constants::icase #define REG_ICASE std::regex_constants::icase
#define REG_NOSUB std::regex_constants::nosubs #define REG_NOSUB std::regex_constants::nosubs
#define REG_EXTENDED std::regex_constants::extended #define REG_EXTENDED std::regex_constants::extended
#define M_regexec(A, B, C, D, E) regex_match(B,A) #define M_regexec(A, B, C, D, E) regex_match(B,A)
@ -416,8 +416,8 @@ static void compileregexes()
regcomp(&fromregex, frompat, REG_NOSUB|REG_EXTENDED); regcomp(&fromregex, frompat, REG_NOSUB|REG_EXTENDED);
regcomp(&minifromregex, miniTbirdFrom, REG_NOSUB|REG_EXTENDED); regcomp(&minifromregex, miniTbirdFrom, REG_NOSUB|REG_EXTENDED);
#else #else
fromregex = basic_regex<char>(frompat, REG_NOSUB | REG_EXTENDED); fromregex = basic_regex<char>(frompat, REG_NOSUB | REG_EXTENDED);
minifromregex = basic_regex<char>(miniTbirdFrom, REG_NOSUB | REG_EXTENDED); minifromregex = basic_regex<char>(miniTbirdFrom, REG_NOSUB | REG_EXTENDED);
#endif #endif
regcompiled = true; regcompiled = true;
} }

View file

@ -14,6 +14,8 @@
* Free Software Foundation, Inc., * Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#include "autoconfig.h"
#include "docseq.h" #include "docseq.h"
#include "filtseq.h" #include "filtseq.h"
#include "sortseq.h" #include "sortseq.h"

View file

@ -14,17 +14,20 @@
* Free Software Foundation, Inc., * Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#include "autoconfig.h"
#include <math.h> #include <math.h>
#include <time.h> #include <time.h>
#include <list> #include <list>
using std::list;
#include "docseqdb.h" #include "docseqdb.h"
#include "rcldb.h" #include "rcldb.h"
#include "debuglog.h" #include "debuglog.h"
#include "wasatorcl.h" #include "wasatorcl.h"
using std::list;
DocSequenceDb::DocSequenceDb(STD_SHARED_PTR<Rcl::Query> q, const string &t, DocSequenceDb::DocSequenceDb(STD_SHARED_PTR<Rcl::Query> q, const string &t,
STD_SHARED_PTR<Rcl::SearchData> sdata) STD_SHARED_PTR<Rcl::SearchData> sdata)
: DocSequence(t), m_q(q), m_sdata(sdata), m_fsdata(sdata), : DocSequence(t), m_q(q), m_sdata(sdata), m_fsdata(sdata),

187
src/query/location.hh Normal file
View file

@ -0,0 +1,187 @@
// A Bison parser, made by GNU Bison 3.0.2.
// Locations for Bison parsers in C++
// Copyright (C) 2002-2013 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
// under terms of your choice, so long as that work isn't itself a
// parser generator using the skeleton or a modified version thereof
// as a parser skeleton. Alternatively, if you modify or redistribute
// the parser skeleton itself, you may (at your option) remove this
// special exception, which will cause the skeleton and the resulting
// Bison output files to be licensed under the GNU General Public
// License without this special exception.
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
/**
** \file location.hh
** Define the yy::location class.
*/
#ifndef YY_YY_LOCATION_HH_INCLUDED
# define YY_YY_LOCATION_HH_INCLUDED
# include "position.hh"
namespace yy {
#line 46 "location.hh" // location.cc:291
/// Abstract a location.
class location
{
public:
/// Construct a location from \a b to \a e.
location (const position& b, const position& e)
: begin (b)
, end (e)
{
}
/// Construct a 0-width location in \a p.
explicit location (const position& p = position ())
: begin (p)
, end (p)
{
}
/// Construct a 0-width location in \a f, \a l, \a c.
explicit location (std::string* f,
unsigned int l = 1u,
unsigned int c = 1u)
: begin (f, l, c)
, end (f, l, c)
{
}
/// Initialization.
void initialize (std::string* f = YY_NULLPTR,
unsigned int l = 1u,
unsigned int c = 1u)
{
begin.initialize (f, l, c);
end = begin;
}
/** \name Line and Column related manipulators
** \{ */
public:
/// Reset initial location to final location.
void step ()
{
begin = end;
}
/// Extend the current location to the COUNT next columns.
void columns (int count = 1)
{
end += count;
}
/// Extend the current location to the COUNT next lines.
void lines (int count = 1)
{
end.lines (count);
}
/** \} */
public:
/// Beginning of the located region.
position begin;
/// End of the located region.
position end;
};
/// Join two location objects to create a location.
inline location operator+ (location res, const location& end)
{
res.end = end.end;
return res;
}
/// Change end position in place.
inline location& operator+= (location& res, int width)
{
res.columns (width);
return res;
}
/// Change end position.
inline location operator+ (location res, int width)
{
return res += width;
}
/// Change end position in place.
inline location& operator-= (location& res, int width)
{
return res += -width;
}
/// Change end position.
inline location operator- (const location& begin, int width)
{
return begin + -width;
}
/// Compare two location objects.
inline bool
operator== (const location& loc1, const location& loc2)
{
return loc1.begin == loc2.begin && loc1.end == loc2.end;
}
/// Compare two location objects.
inline bool
operator!= (const location& loc1, const location& loc2)
{
return !(loc1 == loc2);
}
/** \brief Intercept output stream redirection.
** \param ostr the destination output stream
** \param loc a reference to the location to redirect
**
** Avoid duplicate information.
*/
template <typename YYChar>
inline std::basic_ostream<YYChar>&
operator<< (std::basic_ostream<YYChar>& ostr, const location& loc)
{
unsigned int end_col = 0 < loc.end.column ? loc.end.column - 1 : 0;
ostr << loc.begin// << "(" << loc.end << ") "
;
if (loc.end.filename
&& (!loc.begin.filename
|| *loc.begin.filename != *loc.end.filename))
ostr << '-' << loc.end.filename << ':' << loc.end.line << '.' << end_col;
else if (loc.begin.line < loc.end.line)
ostr << '-' << loc.end.line << '.' << end_col;
else if (loc.begin.column < end_col)
ostr << '-' << end_col;
return ostr;
}
} // yy
#line 187 "location.hh" // location.cc:291
#endif // !YY_YY_LOCATION_HH_INCLUDED

180
src/query/position.hh Normal file
View file

@ -0,0 +1,180 @@
// A Bison parser, made by GNU Bison 3.0.2.
// Positions for Bison parsers in C++
// Copyright (C) 2002-2013 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
// under terms of your choice, so long as that work isn't itself a
// parser generator using the skeleton or a modified version thereof
// as a parser skeleton. Alternatively, if you modify or redistribute
// the parser skeleton itself, you may (at your option) remove this
// special exception, which will cause the skeleton and the resulting
// Bison output files to be licensed under the GNU General Public
// License without this special exception.
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
/**
** \file position.hh
** Define the yy::position class.
*/
#ifndef YY_YY_POSITION_HH_INCLUDED
# define YY_YY_POSITION_HH_INCLUDED
# include <algorithm> // std::max
# include <iostream>
# include <string>
# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
# define YY_NULLPTR nullptr
# else
# define YY_NULLPTR 0
# endif
# endif
namespace yy {
#line 56 "position.hh" // location.cc:291
/// Abstract a position.
class position
{
public:
/// Construct a position.
explicit position (std::string* f = YY_NULLPTR,
unsigned int l = 1u,
unsigned int c = 1u)
: filename (f)
, line (l)
, column (c)
{
}
/// Initialization.
void initialize (std::string* fn = YY_NULLPTR,
unsigned int l = 1u,
unsigned int c = 1u)
{
filename = fn;
line = l;
column = c;
}
/** \name Line and Column related manipulators
** \{ */
/// (line related) Advance to the COUNT next lines.
void lines (int count = 1)
{
if (count)
{
column = 1u;
line = add_ (line, count, 1);
}
}
/// (column related) Advance to the COUNT next columns.
void columns (int count = 1)
{
column = add_ (column, count, 1);
}
/** \} */
/// File name to which this position refers.
std::string* filename;
/// Current line number.
unsigned int line;
/// Current column number.
unsigned int column;
private:
/// Compute max(min, lhs+rhs) (provided min <= lhs).
static unsigned int add_ (unsigned int lhs, int rhs, unsigned int min)
{
return (0 < rhs || -static_cast<unsigned int>(rhs) < lhs
? rhs + lhs
: min);
}
};
/// Add and assign a position.
inline position&
operator+= (position& res, int width)
{
res.columns (width);
return res;
}
/// Add two position objects.
inline position
operator+ (position res, int width)
{
return res += width;
}
/// Add and assign a position.
inline position&
operator-= (position& res, int width)
{
return res += -width;
}
/// Add two position objects.
inline position
operator- (position res, int width)
{
return res -= width;
}
/// Compare two position objects.
inline bool
operator== (const position& pos1, const position& pos2)
{
return (pos1.line == pos2.line
&& pos1.column == pos2.column
&& (pos1.filename == pos2.filename
|| (pos1.filename && pos2.filename
&& *pos1.filename == *pos2.filename)));
}
/// Compare two position objects.
inline bool
operator!= (const position& pos1, const position& pos2)
{
return !(pos1 == pos2);
}
/** \brief Intercept output stream redirection.
** \param ostr the destination output stream
** \param pos a reference to the position to redirect
*/
template <typename YYChar>
inline std::basic_ostream<YYChar>&
operator<< (std::basic_ostream<YYChar>& ostr, const position& pos)
{
if (pos.filename)
ostr << *pos.filename << ':';
return ostr << pos.line << '.' << pos.column;
}
} // yy
#line 180 "position.hh" // location.cc:291
#endif // !YY_YY_POSITION_HH_INCLUDED

158
src/query/stack.hh Normal file
View file

@ -0,0 +1,158 @@
// A Bison parser, made by GNU Bison 3.0.2.
// Stack handling for Bison parsers in C++
// Copyright (C) 2002-2013 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
// under terms of your choice, so long as that work isn't itself a
// parser generator using the skeleton or a modified version thereof
// as a parser skeleton. Alternatively, if you modify or redistribute
// the parser skeleton itself, you may (at your option) remove this
// special exception, which will cause the skeleton and the resulting
// Bison output files to be licensed under the GNU General Public
// License without this special exception.
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
/**
** \file stack.hh
** Define the yy::stack class.
*/
#ifndef YY_YY_STACK_HH_INCLUDED
# define YY_YY_STACK_HH_INCLUDED
# include <vector>
namespace yy {
#line 46 "stack.hh" // stack.hh:133
template <class T, class S = std::vector<T> >
class stack
{
public:
// Hide our reversed order.
typedef typename S::reverse_iterator iterator;
typedef typename S::const_reverse_iterator const_iterator;
stack ()
: seq_ ()
{
}
stack (unsigned int n)
: seq_ (n)
{
}
inline
T&
operator[] (unsigned int i)
{
return seq_[seq_.size () - 1 - i];
}
inline
const T&
operator[] (unsigned int i) const
{
return seq_[seq_.size () - 1 - i];
}
/// Steal the contents of \a t.
///
/// Close to move-semantics.
inline
void
push (T& t)
{
seq_.push_back (T());
operator[](0).move (t);
}
inline
void
pop (unsigned int n = 1)
{
for (; n; --n)
seq_.pop_back ();
}
void
clear ()
{
seq_.clear ();
}
inline
typename S::size_type
size () const
{
return seq_.size ();
}
inline
const_iterator
begin () const
{
return seq_.rbegin ();
}
inline
const_iterator
end () const
{
return seq_.rend ();
}
private:
stack (const stack&);
stack& operator= (const stack&);
/// The wrapped container.
S seq_;
};
/// Present a slice of the top of a stack.
template <class T, class S = stack<T> >
class slice
{
public:
slice (const S& stack, unsigned int range)
: stack_ (stack)
, range_ (range)
{
}
inline
const T&
operator [] (unsigned int i) const
{
return stack_[range_ - i];
}
private:
const S& stack_;
unsigned int range_;
};
} // yy
#line 157 "stack.hh" // stack.hh:133
#endif // !YY_YY_STACK_HH_INCLUDED

1517
src/query/wasaparse.cpp Normal file

File diff suppressed because it is too large Load diff

476
src/query/wasaparse.hpp Normal file
View file

@ -0,0 +1,476 @@
// A Bison parser, made by GNU Bison 3.0.2.
// Skeleton interface for Bison LALR(1) parsers in C++
// Copyright (C) 2002-2013 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
// under terms of your choice, so long as that work isn't itself a
// parser generator using the skeleton or a modified version thereof
// as a parser skeleton. Alternatively, if you modify or redistribute
// the parser skeleton itself, you may (at your option) remove this
// special exception, which will cause the skeleton and the resulting
// Bison output files to be licensed under the GNU General Public
// License without this special exception.
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
/**
** \file y.tab.h
** Define the yy::parser class.
*/
// C++ LALR(1) parser skeleton written by Akim Demaille.
#ifndef YY_YY_Y_TAB_H_INCLUDED
# define YY_YY_Y_TAB_H_INCLUDED
# include <vector>
# include <iostream>
# include <stdexcept>
# include <string>
# include "stack.hh"
# include "location.hh"
#ifndef YY_ATTRIBUTE
# if (defined __GNUC__ \
&& (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
|| defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
# else
# define YY_ATTRIBUTE(Spec) /* empty */
# endif
#endif
#ifndef YY_ATTRIBUTE_PURE
# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
#endif
#ifndef YY_ATTRIBUTE_UNUSED
# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
#endif
#if !defined _Noreturn \
&& (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
# if defined _MSC_VER && 1200 <= _MSC_VER
# define _Noreturn __declspec (noreturn)
# else
# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
# endif
#endif
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
# define YYUSE(E) ((void) (E))
#else
# define YYUSE(E) /* empty */
#endif
#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop")
#else
# define YY_INITIAL_VALUE(Value) Value
#endif
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
#endif
#ifndef YY_INITIAL_VALUE
# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
namespace yy {
#line 113 "y.tab.h" // lalr1.cc:372
/// A Bison parser.
class parser
{
public:
#ifndef YYSTYPE
/// Symbol semantic values.
union semantic_type
{
#line 44 "/home/dockes/projets/fulltext/recoll/src/query/wasaparse.ypp" // lalr1.cc:372
std::string *str;
Rcl::SearchDataClauseSimple *cl;
Rcl::SearchData *sd;
#line 133 "y.tab.h" // lalr1.cc:372
};
#else
typedef YYSTYPE semantic_type;
#endif
/// Symbol locations.
typedef location location_type;
/// Syntax errors thrown from user actions.
struct syntax_error : std::runtime_error
{
syntax_error (const location_type& l, const std::string& m);
location_type location;
};
/// Tokens.
struct token
{
enum yytokentype
{
WORD = 258,
QUOTED = 259,
QUALIFIERS = 260,
AND = 261,
UCONCAT = 262,
OR = 263,
EQUALS = 264,
CONTAINS = 265,
SMALLEREQ = 266,
SMALLER = 267,
GREATEREQ = 268,
GREATER = 269
};
};
/// (External) token type, as returned by yylex.
typedef token::yytokentype token_type;
/// Internal symbol number.
typedef int symbol_number_type;
/// Internal symbol number for tokens (subsumed by symbol_number_type).
typedef unsigned char token_number_type;
/// A complete symbol.
///
/// Expects its Base type to provide access to the symbol type
/// via type_get().
///
/// Provide access to semantic value and location.
template <typename Base>
struct basic_symbol : Base
{
/// Alias to Base.
typedef Base super_type;
/// Default constructor.
basic_symbol ();
/// Copy constructor.
basic_symbol (const basic_symbol& other);
/// Constructor for valueless symbols.
basic_symbol (typename Base::kind_type t,
const location_type& l);
/// Constructor for symbols with semantic value.
basic_symbol (typename Base::kind_type t,
const semantic_type& v,
const location_type& l);
~basic_symbol ();
/// Destructive move, \a s is emptied into this.
void move (basic_symbol& s);
/// The semantic value.
semantic_type value;
/// The location.
location_type location;
private:
/// Assignment operator.
basic_symbol& operator= (const basic_symbol& other);
};
/// Type access provider for token (enum) based symbols.
struct by_type
{
/// Default constructor.
by_type ();
/// Copy constructor.
by_type (const by_type& other);
/// The symbol type as needed by the constructor.
typedef token_type kind_type;
/// Constructor from (external) token numbers.
by_type (kind_type t);
/// Steal the symbol type from \a that.
void move (by_type& that);
/// The (internal) type number (corresponding to \a type).
/// -1 when this symbol is empty.
symbol_number_type type_get () const;
/// The token.
token_type token () const;
enum { empty = 0 };
/// The symbol type.
/// -1 when this symbol is empty.
token_number_type type;
};
/// "External" symbols: returned by the scanner.
typedef basic_symbol<by_type> symbol_type;
/// Build a parser object.
parser (WasaParserDriver* d_yyarg);
virtual ~parser ();
/// Parse.
/// \returns 0 iff parsing succeeded.
virtual int parse ();
#if YYDEBUG
/// The current debugging stream.
std::ostream& debug_stream () const YY_ATTRIBUTE_PURE;
/// Set the current debugging stream.
void set_debug_stream (std::ostream &);
/// Type for debugging levels.
typedef int debug_level_type;
/// The current debugging level.
debug_level_type debug_level () const YY_ATTRIBUTE_PURE;
/// Set the current debugging level.
void set_debug_level (debug_level_type l);
#endif
/// Report a syntax error.
/// \param loc where the syntax error is found.
/// \param msg a description of the syntax error.
virtual void error (const location_type& loc, const std::string& msg);
/// Report a syntax error.
void error (const syntax_error& err);
private:
/// This class is not copyable.
parser (const parser&);
parser& operator= (const parser&);
/// State numbers.
typedef int state_type;
/// Generate an error message.
/// \param yystate the state where the error occurred.
/// \param yytoken the lookahead token type, or yyempty_.
virtual std::string yysyntax_error_ (state_type yystate,
symbol_number_type yytoken) const;
/// Compute post-reduction state.
/// \param yystate the current state
/// \param yysym the nonterminal to push on the stack
state_type yy_lr_goto_state_ (state_type yystate, int yysym);
/// Whether the given \c yypact_ value indicates a defaulted state.
/// \param yyvalue the value to check
static bool yy_pact_value_is_default_ (int yyvalue);
/// Whether the given \c yytable_ value indicates a syntax error.
/// \param yyvalue the value to check
static bool yy_table_value_is_error_ (int yyvalue);
static const signed char yypact_ninf_;
static const signed char yytable_ninf_;
/// Convert a scanner token number \a t to a symbol number.
static token_number_type yytranslate_ (int t);
// Tables.
// YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
// STATE-NUM.
static const signed char yypact_[];
// YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
// Performed when YYTABLE does not specify something else to do. Zero
// means the default is an error.
static const unsigned char yydefact_[];
// YYPGOTO[NTERM-NUM].
static const signed char yypgoto_[];
// YYDEFGOTO[NTERM-NUM].
static const signed char yydefgoto_[];
// YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
// positive, shift that token. If negative, reduce the rule whose
// number is the opposite. If YYTABLE_NINF, syntax error.
static const signed char yytable_[];
static const signed char yycheck_[];
// YYSTOS[STATE-NUM] -- The (internal number of the) accessing
// symbol of state STATE-NUM.
static const unsigned char yystos_[];
// YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
static const unsigned char yyr1_[];
// YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
static const unsigned char yyr2_[];
/// Convert the symbol name \a n to a form suitable for a diagnostic.
static std::string yytnamerr_ (const char *n);
/// For a symbol, its name in clear.
static const char* const yytname_[];
#if YYDEBUG
// YYRLINE[YYN] -- Source line where rule number YYN was defined.
static const unsigned char yyrline_[];
/// Report on the debug stream that the rule \a r is going to be reduced.
virtual void yy_reduce_print_ (int r);
/// Print the state stack on the debug stream.
virtual void yystack_print_ ();
// Debugging.
int yydebug_;
std::ostream* yycdebug_;
/// \brief Display a symbol type, value and location.
/// \param yyo The output stream.
/// \param yysym The symbol.
template <typename Base>
void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
#endif
/// \brief Reclaim the memory associated to a symbol.
/// \param yymsg Why this token is reclaimed.
/// If null, print nothing.
/// \param yysym The symbol.
template <typename Base>
void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
private:
/// Type access provider for state based symbols.
struct by_state
{
/// Default constructor.
by_state ();
/// The symbol type as needed by the constructor.
typedef state_type kind_type;
/// Constructor.
by_state (kind_type s);
/// Copy constructor.
by_state (const by_state& other);
/// Steal the symbol type from \a that.
void move (by_state& that);
/// The (internal) type number (corresponding to \a state).
/// "empty" when empty.
symbol_number_type type_get () const;
enum { empty = 0 };
/// The state.
state_type state;
};
/// "Internal" symbol: element of the stack.
struct stack_symbol_type : basic_symbol<by_state>
{
/// Superclass.
typedef basic_symbol<by_state> super_type;
/// Construct an empty symbol.
stack_symbol_type ();
/// Steal the contents from \a sym to build this.
stack_symbol_type (state_type s, symbol_type& sym);
/// Assignment, needed by push_back.
stack_symbol_type& operator= (const stack_symbol_type& that);
};
/// Stack type.
typedef stack<stack_symbol_type> stack_type;
/// The stack.
stack_type yystack_;
/// Push a new state on the stack.
/// \param m a debug message to display
/// if null, no trace is output.
/// \param s the symbol
/// \warning the contents of \a s.value is stolen.
void yypush_ (const char* m, stack_symbol_type& s);
/// Push a new look ahead token on the state on the stack.
/// \param m a debug message to display
/// if null, no trace is output.
/// \param s the state
/// \param sym the symbol (for its value and location).
/// \warning the contents of \a s.value is stolen.
void yypush_ (const char* m, state_type s, symbol_type& sym);
/// Pop \a n symbols the three stacks.
void yypop_ (unsigned int n = 1);
// Constants.
enum
{
yyeof_ = 0,
yylast_ = 59, ///< Last index in yytable_.
yynnts_ = 7, ///< Number of nonterminal symbols.
yyempty_ = -2,
yyfinal_ = 14, ///< Termination state number.
yyterror_ = 1,
yyerrcode_ = 256,
yyntokens_ = 18 ///< Number of tokens.
};
// User arguments.
WasaParserDriver* d;
};
} // yy
#line 472 "y.tab.h" // lalr1.cc:372
#endif // !YY_YY_Y_TAB_H_INCLUDED

View file

@ -21,13 +21,15 @@
#include "autoconfig.h" #include "autoconfig.h"
#include <string> #include <string>
using namespace std;
#include "debuglog.h" #include "debuglog.h"
#include "rcldb.h" #include "rcldb.h"
#include "rcldb_p.h" #include "rcldb_p.h"
#include "stemdb.h" #include "stemdb.h"
#include "expansiondbs.h" #include "expansiondbs.h"
#include "strmatcher.h"
using namespace std;
namespace Rcl { namespace Rcl {

View file

@ -22,7 +22,9 @@
#include "safefcntl.h" #include "safefcntl.h"
#include "safeunistd.h" #include "safeunistd.h"
#include "dirent.h" #include "dirent.h"
#ifndef _WIN32 #ifdef _WIN32
#include "safewindows.h"
#else
#include <sys/param.h> #include <sys/param.h>
#include <pwd.h> #include <pwd.h>
#include <sys/file.h> #include <sys/file.h>
@ -31,6 +33,7 @@
#include <errno.h> #include <errno.h>
#include <sys/types.h> #include <sys/types.h>
#include "safesysstat.h" #include "safesysstat.h"
#include "ptmutex.h"
// Let's include all files where statfs can be defined and hope for no // Let's include all files where statfs can be defined and hope for no
// conflict... // conflict...
@ -53,13 +56,99 @@
#include <sstream> #include <sstream>
#include <stack> #include <stack>
#include <set> #include <set>
using namespace std; #include <vector>
#include "pathut.h" #include "pathut.h"
#include "transcode.h" #include "transcode.h"
#include "wipedir.h" #include "wipedir.h"
#include "md5ut.h" #include "md5ut.h"
using namespace std;
#ifdef _WIN32
/// Convert \ separators to /
void path_slashize(string& s)
{
for (string::size_type i = 0; i < s.size(); i++) {
if (s[i] == '\\')
s[i] = '/';
}
}
static bool path_strlookslikedrive(const string& s)
{
return s.size() == 2 && isalpha(s[0]) && s[1] == ':';
}
static bool path_hasdrive(const string& s)
{
if (s.size() >= 2 && isalpha(s[0]) && s[1] == ':')
return true;
return false;
}
static bool path_isdriveabs(const string& s)
{
if (s.size() >= 3 && isalpha(s[0]) && s[1] == ':' && s[2] == '/')
return true;
return false;
}
#include <Shlwapi.h>
#pragma comment(lib, "shlwapi.lib")
string path_tchartoutf8(TCHAR *text)
{
#ifdef UNICODE
// Simple C
// const size_t size = ( wcslen(text) + 1 ) * sizeof(wchar_t);
// wcstombs(&buffer[0], text, size);
// std::vector<char> buffer(size);
// Or:
// Windows API
std::vector<char> buffer;
int size = WideCharToMultiByte(CP_UTF8, 0, text, -1, NULL, 0, NULL, NULL);
if (size > 0) {
buffer.resize(size);
WideCharToMultiByte(CP_UTF8, 0, text, -1,
&buffer[0], int(buffer.size()), NULL, NULL);
} else {
return string();
}
return string(&buffer[0]);
#else
path = text;
#endif
}
string path_thisexecpath()
{
TCHAR text[MAX_PATH];
DWORD length = GetModuleFileName(NULL, text, MAX_PATH);
#ifdef NTDDI_WIN8_future
PathCchRemoveFileSpec(text, MAX_PATH);
#else
PathRemoveFileSpec(text);
#endif
string path = path_tchartoutf8(text);
if (path.empty())
path = "c:/";
return path;
}
string path_wingettempfilename(TCHAR *pref)
{
TCHAR buf[(MAX_PATH +1)*sizeof(TCHAR)];
TCHAR dbuf[(MAX_PATH +1)*sizeof(TCHAR)];
GetTempPath(MAX_PATH+1, dbuf);
GetTempFileName(dbuf, pref, 0, buf);
// Windows will have created a temp file, we delete it.
string filename = path_tchartoutf8(buf);
unlink(filename.c_str());
return filename;
}
#endif
bool fsocc(const string &path, int *pc, long long *blocks) bool fsocc(const string &path, int *pc, long long *blocks)
{ {
#ifdef _WIN32 #ifdef _WIN32
@ -108,13 +197,47 @@ const string& tmplocation()
const char *tmpdir = getenv("RECOLL_TMPDIR"); const char *tmpdir = getenv("RECOLL_TMPDIR");
if (tmpdir == 0) if (tmpdir == 0)
tmpdir = getenv("TMPDIR"); tmpdir = getenv("TMPDIR");
if (tmpdir == 0) if (tmpdir == 0)
tmpdir = "/tmp"; tmpdir = getenv("TMP");
stmpdir = string(tmpdir); if (tmpdir == 0)
tmpdir = getenv("TEMP");
if (tmpdir == 0) {
#ifdef _WIN32
TCHAR bufw[(MAX_PATH+1)*sizeof(TCHAR)];
GetTempPath(MAX_PATH+1, bufw);
stmpdir = path_tchartoutf8(bufw);
#else
stmpdir = "/tmp";
#endif
} else {
stmpdir = tmpdir;
}
stmpdir = path_canon(stmpdir);
} }
return stmpdir; return stmpdir;
} }
// Location for sample config, filters, etc. (e.g. /usr/share/recoll/)
const string& path_sharedatadir()
{
static string datadir;
if (datadir.empty()) {
#ifdef _WIN32
datadir = path_cat(path_thisexecpath(), "Share");
#else
const char *cdatadir = getenv("RECOLL_DATADIR");
if (cdatadir == 0) {
// If not in environment, use the compiled-in constant.
datadir = RECOLL_DATADIR;
} else {
datadir = cdatadir;
}
#endif
}
return datadir;
}
bool maketmpdir(string& tdir, string& reason) bool maketmpdir(string& tdir, string& reason)
{ {
#ifndef _WIN32 #ifndef _WIN32
@ -142,8 +265,18 @@ bool maketmpdir(string& tdir, string& reason)
} }
tdir = cp; tdir = cp;
free(cp); free(cp);
// At this point the directory does not exist yet if mktemp was used
#else // _WIN32
// There is a race condition between name computation and
// mkdir. try to make sure that we at least don't shoot ourselves
// in the foot
static PTMutexInit mlock;
PTMutexLocker lock(mlock);
tdir = path_wingettempfilename(TEXT("rcltmp"));
#endif
#ifndef HAVE_MKDTEMP #if !defined(HAVE_MKDTEMP) || defined(_WIN32)
if (mkdir(tdir.c_str(), 0700) < 0) { if (mkdir(tdir.c_str(), 0700) < 0) {
reason = string("maketmpdir: mkdir ") + tdir + " failed"; reason = string("maketmpdir: mkdir ") + tdir + " failed";
tdir.erase(); tdir.erase();
@ -152,9 +285,6 @@ bool maketmpdir(string& tdir, string& reason)
#endif #endif
return true; return true;
#else
return false;
#endif
} }
TempFileInternal::TempFileInternal(const string& suffix) TempFileInternal::TempFileInternal(const string& suffix)
@ -178,16 +308,22 @@ TempFileInternal::TempFileInternal(const string& suffix)
} }
close(fd); close(fd);
unlink(cp); unlink(cp);
filename = cp; filename = cp;
free(cp); free(cp);
#else
// There is a race condition between name computation and
// mkdir. try to make sure that we at least don't shoot ourselves
// in the foot
static PTMutexInit mlock;
PTMutexLocker lock(mlock);
string filename = path_wingettempfilename(TEXT("recoll"));
#endif
m_filename = filename + suffix; m_filename = filename + suffix;
if (close(open(m_filename.c_str(), O_CREAT|O_EXCL, 0600)) != 0) { if (close(open(m_filename.c_str(), O_CREAT|O_EXCL, 0600)) != 0) {
m_reason = string("Could not open/create") + m_filename; m_reason = string("Could not open/create") + m_filename;
m_filename.erase(); m_filename.erase();
} }
#endif
} }
TempFileInternal::~TempFileInternal() TempFileInternal::~TempFileInternal()
@ -297,7 +433,26 @@ string path_suffix(const string& s)
string path_home() string path_home()
{ {
#ifdef _WIN32 #ifdef _WIN32
return "c:\\"; string dir;
const char *cp = getenv("USERPROFILE");
if (cp != 0) {
dir = cp;
}
if (dir.empty()) {
cp = getenv("HOMEDRIVE");
if (cp != 0) {
const char *cp1 = getenv("HOMEPATH");
if (cp1 != 0) {
dir = string(cp) + string(cp1);
}
}
}
if (dir.empty()) {
dir = "C:\\";
}
dir = path_canon(dir);
path_catslash(dir);
return dir;
#else #else
uid_t uid = getuid(); uid_t uid = getuid();
@ -316,11 +471,27 @@ string path_home()
#endif #endif
} }
string path_tildexpand(const string &s) // The default place to store the default config and other stuff (e.g webqueue)
string path_homedata()
{ {
#ifdef _WIN32 #ifdef _WIN32
return s; const char *cp = getenv("LOCALAPPDATA");
string dir;
if (cp != 0) {
dir = path_canon(cp);
}
if (dir.empty()) {
dir = path_cat(path_home(), "AppData/Local/");
}
return dir;
#else #else
// We should use an xdg-conforming location, but, history...
return path_home();
#endif
}
string path_tildexpand(const string &s)
{
if (s.empty() || s[0] != '~') if (s.empty() || s[0] != '~')
return s; return s;
string o = s; string o = s;
@ -330,15 +501,31 @@ string path_tildexpand(const string &s)
o.replace(0, 2, path_home()); o.replace(0, 2, path_home());
} else { } else {
string::size_type pos = s.find('/'); string::size_type pos = s.find('/');
int l = (pos == string::npos) ? s.length() - 1 : pos - 1; string::size_type l = (pos == string::npos) ? s.length() - 1 : pos - 1;
#ifdef _WIN32
// Dont know what this means. Just replace with HOME
o.replace(0, l+1, path_home());
#else
struct passwd *entry = getpwnam(s.substr(1, l).c_str()); struct passwd *entry = getpwnam(s.substr(1, l).c_str());
if (entry) if (entry)
o.replace(0, l+1, entry->pw_dir); o.replace(0, l+1, entry->pw_dir);
#endif
} }
return o; return o;
#endif
} }
bool path_isabsolute(const string &path)
{
if (!path.empty() && (path[0] == '/'
#ifdef _WIN32
|| path_isdriveabs(path)
#endif
)) {
return true;
}
return false;
}
string path_absolute(const string &is) string path_absolute(const string &is)
{ {
if (is.length() == 0) if (is.length() == 0)
@ -360,7 +547,15 @@ string path_canon(const string &is, const string* cwd)
if (is.length() == 0) if (is.length() == 0)
return is; return is;
string s = is; string s = is;
if (s[0] != '/') { #ifdef _WIN32
path_slashize(s);
// fix possible path from file: absolute url
if (s.size() && s[0] == '/' && path_hasdrive(s.substr(1))) {
s = s.substr(1);
}
#endif
if (!path_isabsolute(s)) {
char buf[MAXPATHLEN]; char buf[MAXPATHLEN];
const char *cwdp = buf; const char *cwdp = buf;
if (cwd) { if (cwd) {
@ -389,7 +584,13 @@ string path_canon(const string &is, const string* cwd)
if (!cleaned.empty()) { if (!cleaned.empty()) {
for (vector<string>::const_iterator it = cleaned.begin(); for (vector<string>::const_iterator it = cleaned.begin();
it != cleaned.end(); it++) { it != cleaned.end(); it++) {
ret += "/"; ret += "/";
#ifdef _WIN32
if (it == cleaned.begin() && path_strlookslikedrive(*it)) {
// Get rid of just added initial "/"
ret.clear();
}
#endif
ret += *it; ret += *it;
} }
} else { } else {
@ -406,6 +607,10 @@ bool makepath(const string& ipath)
path = "/"; path = "/";
for (vector<string>::const_iterator it = elems.begin(); for (vector<string>::const_iterator it = elems.begin();
it != elems.end(); it++){ it != elems.end(); it++){
#ifdef _WIN32
if (it == elems.begin() && path_strlookslikedrive(*it))
path = "";
#endif
path += *it; path += *it;
// Not using path_isdir() here, because this cant grok symlinks // Not using path_isdir() here, because this cant grok symlinks
// If we hit an existing file, no worry, mkdir will just fail. // If we hit an existing file, no worry, mkdir will just fail.
@ -557,6 +762,16 @@ string url_parentfolder(const string& url)
string("http://") + parenturl; string("http://") + parenturl;
} }
string path_defaultrecollconfsubdir()
{
#ifdef _WIN32
return "Recoll";
#else
return ".recoll";
#endif
}
// Convert to file path if url is like file: // Convert to file path if url is like file:
// Note: this only works with our internal pseudo-urls which are not // Note: this only works with our internal pseudo-urls which are not
// encoded/escaped // encoded/escaped
@ -566,6 +781,13 @@ string fileurltolocalpath(string url)
url = url.substr(7, string::npos); url = url.substr(7, string::npos);
else else
return string(); return string();
#ifdef _WIN32
// Absolute file urls are like: file:///c:/mydir/...
// Get rid of the initial '/'
if (url.size() >= 3 && url[0] == '/' && isalpha(url[1]) && url[2] == ':') {
url = url.substr(1);
}
#endif
string::size_type pos; string::size_type pos;
if ((pos = url.find_last_of("#")) != string::npos) { if ((pos = url.find_last_of("#")) != string::npos) {
url.erase(pos); url.erase(pos);
@ -816,6 +1038,7 @@ void pathut_init_mt()
path_home(); path_home();
tmplocation(); tmplocation();
thumbnailsdir(); thumbnailsdir();
path_sharedatadir();
} }

View file

@ -97,6 +97,20 @@ extern bool maketmpdir(std::string& tdir, std::string& reason);
/// mkdir -p /// mkdir -p
extern bool makepath(const std::string& path); extern bool makepath(const std::string& path);
#ifdef _WIN32
/// Convert \ separators to /
extern void path_slashize(std::string& s);
#endif
/// Sub-directory for default recoll config (e.g: .recoll)
extern std::string path_defaultrecollconfsubdir();
/// Where we create the user data subdirs
extern std::string path_homedata();
/// e.g. /usr/share/recoll. Depends on OS and config
extern const std::string& path_sharedatadir();
/// Test if path is absolute
extern bool path_isabsolute(const std::string& s);
/// Temporary file class /// Temporary file class
class TempFileInternal { class TempFileInternal {
public: public:

View file

@ -19,16 +19,21 @@
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#ifdef _WIN32
#include <regex>
#else
#include <regex.h> #include <regex.h>
#endif
#include <fnmatch.h> #include <fnmatch.h>
#include <string> #include <string>
using std::string;
#include "cstr.h" #include "cstr.h"
#include "debuglog.h" #include "debuglog.h"
#include "strmatcher.h"
#include "pathut.h" #include "pathut.h"
#include "strmatcher.h"
using namespace std;
bool StrWildMatcher::match(const string& val) const bool StrWildMatcher::match(const string& val) const
{ {
@ -60,9 +65,25 @@ StrRegexpMatcher::StrRegexpMatcher(const string& exp)
bool StrRegexpMatcher::setExp(const string& exp) bool StrRegexpMatcher::setExp(const string& exp)
{ {
if (m_compiled) { if (m_compiled) {
#ifdef _WIN32
delete (regex*)m_compiled;
#else
regfree((regex_t*)m_compiled); regfree((regex_t*)m_compiled);
delete (regex_t*)m_compiled; delete (regex_t*)m_compiled;
#endif
} }
m_compiled = 0;
#ifdef _WIN32
try {
m_compiled = new regex(exp, std::regex_constants::nosubs |
std::regex_constants::extended);
} catch (...) {
m_reason = string("StrRegexpMatcher:regcomp failed for ")
+ exp + string("syntax error ?");
return false;
}
#else
m_compiled = new regex_t; m_compiled = new regex_t;
if ((m_errcode = if ((m_errcode =
regcomp((regex_t*)m_compiled, exp.c_str(), REG_EXTENDED|REG_NOSUB))) { regcomp((regex_t*)m_compiled, exp.c_str(), REG_EXTENDED|REG_NOSUB))) {
@ -72,6 +93,7 @@ bool StrRegexpMatcher::setExp(const string& exp)
+ exp + string(errbuf); + exp + string(errbuf);
return false; return false;
} }
#endif
m_sexp = exp; m_sexp = exp;
return true; return true;
} }
@ -79,8 +101,12 @@ bool StrRegexpMatcher::setExp(const string& exp)
StrRegexpMatcher::~StrRegexpMatcher() StrRegexpMatcher::~StrRegexpMatcher()
{ {
if (m_compiled) { if (m_compiled) {
#ifdef _WIN32
delete (regex *)m_compiled;
#else
regfree((regex_t*)m_compiled); regfree((regex_t*)m_compiled);
delete (regex_t*)m_compiled; delete (regex_t*)m_compiled;
#endif
} }
} }
@ -88,7 +114,11 @@ bool StrRegexpMatcher::match(const string& val) const
{ {
if (m_errcode) if (m_errcode)
return false; return false;
#ifdef _WIN32
return regex_match(val, *((regex *)m_compiled));
#else
return regexec((regex_t*)m_compiled, val.c_str(), 0, 0, 0) != REG_NOMATCH; return regexec((regex_t*)m_compiled, val.c_str(), 0, 0, 0) != REG_NOMATCH;
#endif
} }
string::size_type StrRegexpMatcher::baseprefixlen() const string::size_type StrRegexpMatcher::baseprefixlen() const

View file

@ -10,6 +10,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recollindex", "recollindex\
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D} = {23FF40E1-BA87-4E5F-9B22-2EB760FF403D} {23FF40E1-BA87-4E5F-9B22-2EB760FF403D} = {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recollq", "recollq\recollq.vcxproj", "{C1D0CCD2-0015-44AC-A606-AC48BB80C133}"
ProjectSection(ProjectDependencies) = postProject
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D} = {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}
EndProjectSection
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
@ -18,22 +23,30 @@ Global
Release|x86 = Release|x86 Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x64.ActiveCfg = Debug|Win32 {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x64.ActiveCfg = Debug|x64
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x64.Build.0 = Debug|Win32 {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x64.Build.0 = Debug|x64
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x86.ActiveCfg = Debug|Win32 {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x86.ActiveCfg = Debug|Win32
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x86.Build.0 = Debug|Win32 {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Debug|x86.Build.0 = Debug|Win32
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x64.ActiveCfg = Release|x64 {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x64.ActiveCfg = Release|x64
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x64.Build.0 = Release|x64 {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x64.Build.0 = Release|x64
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x86.ActiveCfg = Release|Win32 {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x86.ActiveCfg = Release|Win32
{23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x86.Build.0 = Release|Win32 {23FF40E1-BA87-4E5F-9B22-2EB760FF403D}.Release|x86.Build.0 = Release|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x64.ActiveCfg = Debug|Win32 {A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x64.ActiveCfg = Debug|x64
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x64.Build.0 = Debug|Win32 {A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x64.Build.0 = Debug|x64
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x86.ActiveCfg = Debug|Win32 {A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x86.ActiveCfg = Debug|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x86.Build.0 = Debug|Win32 {A513D65F-798C-4166-B66E-49F69ADA4F59}.Debug|x86.Build.0 = Debug|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x64.ActiveCfg = Release|x64 {A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x64.ActiveCfg = Release|x64
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x64.Build.0 = Release|x64 {A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x64.Build.0 = Release|x64
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x86.ActiveCfg = Release|Win32 {A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x86.ActiveCfg = Release|Win32
{A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x86.Build.0 = Release|Win32 {A513D65F-798C-4166-B66E-49F69ADA4F59}.Release|x86.Build.0 = Release|Win32
{C1D0CCD2-0015-44AC-A606-AC48BB80C133}.Debug|x64.ActiveCfg = Debug|x64
{C1D0CCD2-0015-44AC-A606-AC48BB80C133}.Debug|x64.Build.0 = Debug|x64
{C1D0CCD2-0015-44AC-A606-AC48BB80C133}.Debug|x86.ActiveCfg = Debug|Win32
{C1D0CCD2-0015-44AC-A606-AC48BB80C133}.Debug|x86.Build.0 = Debug|Win32
{C1D0CCD2-0015-44AC-A606-AC48BB80C133}.Release|x64.ActiveCfg = Release|x64
{C1D0CCD2-0015-44AC-A606-AC48BB80C133}.Release|x64.Build.0 = Release|x64
{C1D0CCD2-0015-44AC-A606-AC48BB80C133}.Release|x86.ActiveCfg = Release|Win32
{C1D0CCD2-0015-44AC-A606-AC48BB80C133}.Release|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View file

@ -90,10 +90,10 @@
<PrecompiledHeader>NotUsing</PrecompiledHeader> <PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>BUILDING_RECOLL;__WIN32__;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck> <SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>C:\xapian\xapian-core-1.2.8\include;C:\Users\Bill\recoll\src\internfile;C:\Users\Bill\recoll\src\rcldb;C:\Users\Bill\recoll\src\index;C:\Users\Bill\recoll\src\bincimapmime;C:\Users\Bill\recoll\src\unac;C:\Users\Bill\recoll\src\windows;C:\zlib\include;C:\pthreads-w32\Pre-built.2\include;C:\Users\Bill\recoll\src\xaposix;C:\Users\Bill\recoll\src\common;C:\Users\Bill\recoll\src\utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>C:\Iconv\include;C:\xapian\xapian-core-1.2.8\include;C:\Users\Bill\recoll\src\internfile;C:\Users\Bill\recoll\src\rcldb;C:\Users\Bill\recoll\src\index;C:\Users\Bill\recoll\src\bincimapmime;C:\Users\Bill\recoll\src\unac;C:\Users\Bill\recoll\src\windows;C:\zlib\include;C:\pthreads-w32\Pre-built.2\include;C:\Users\Bill\recoll\src\xaposix;C:\Users\Bill\recoll\src\common;C:\Users\Bill\recoll\src\utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4800</DisableSpecificWarnings> <DisableSpecificWarnings>4800;4996</DisableSpecificWarnings>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@ -152,6 +152,7 @@
<ClInclude Include="..\utils\pathut.h" /> <ClInclude Include="..\utils\pathut.h" />
<ClInclude Include="..\utils\readfile.h" /> <ClInclude Include="..\utils\readfile.h" />
<ClInclude Include="..\utils\smallut.h" /> <ClInclude Include="..\utils\smallut.h" />
<ClInclude Include="..\utils\strmatcher.h" />
<ClInclude Include="..\utils\wipedir.h" /> <ClInclude Include="..\utils\wipedir.h" />
<ClInclude Include="..\xaposix\safefcntl.h" /> <ClInclude Include="..\xaposix\safefcntl.h" />
<ClInclude Include="..\xaposix\safesysstat.h" /> <ClInclude Include="..\xaposix\safesysstat.h" />
@ -220,6 +221,7 @@
<ClCompile Include="..\utils\pathut.cpp" /> <ClCompile Include="..\utils\pathut.cpp" />
<ClCompile Include="..\utils\readfile.cpp" /> <ClCompile Include="..\utils\readfile.cpp" />
<ClCompile Include="..\utils\smallut.cpp" /> <ClCompile Include="..\utils\smallut.cpp" />
<ClCompile Include="..\utils\strmatcher.cpp" />
<ClCompile Include="..\utils\transcode.cpp" /> <ClCompile Include="..\utils\transcode.cpp" />
<ClCompile Include="..\utils\wipedir.cpp" /> <ClCompile Include="..\utils\wipedir.cpp" />
<ClCompile Include="..\xaposix\safe.cc" /> <ClCompile Include="..\xaposix\safe.cc" />

View file

@ -84,6 +84,9 @@
<ClInclude Include="..\utils\wipedir.h"> <ClInclude Include="..\utils\wipedir.h">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\utils\strmatcher.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\utils\smallut.cpp"> <ClCompile Include="..\utils\smallut.cpp">
@ -278,6 +281,9 @@
<ClCompile Include="..\utils\wipedir.cpp"> <ClCompile Include="..\utils\wipedir.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\utils\strmatcher.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="ClassDiagram.cd" /> <None Include="ClassDiagram.cd" />

View file

@ -103,14 +103,14 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>__WIN32__;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\pthreads-w32\Pre-built.2\include;C:\Users\Bill\recoll\src\xaposix;C:\Users\Bill\recoll\src\utils;C:\Users\Bill\recoll\src\unac;C:\Users\Bill\recoll\src\rcldb;C:\Users\Bill\recoll\src\internfile;C:\Users\Bill\recoll\src\index;C:\Users\Bill\recoll\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>C:\pthreads-w32\Pre-built.2\include;C:\Users\Bill\recoll\src\xaposix;C:\Users\Bill\recoll\src\utils;C:\Users\Bill\recoll\src\unac;C:\Users\Bill\recoll\src\rcldb;C:\Users\Bill\recoll\src\internfile;C:\Users\Bill\recoll\src\index;C:\Users\Bill\recoll\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\xapian\xapian-core-1.2.8\win32\Debug;C:\Users\Bill\recoll\src\windows\x64\Debug;C:\pthreads-w32\Pre-built.2\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>C:\xapian\xapian-core-1.2.8\win32\x64\Debug;C:\Users\Bill\recoll\src\windows\x64\Debug;C:\pthreads-w32\Pre-built.2\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>pthreadVC2.lib;Win32ProjectRecoll.lib;xapian-core.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>Win32ProjectRecoll.lib;C:\zlib64\zlib-win64\x64\Debug\zlib.lib;xapian-core.lib;C:\iconv64\Debug_x64\libiconvD.lib;Ws2_32.lib;Rpcrt4.lib;pthreadVC2.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

View file

@ -0,0 +1,180 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{C1D0CCD2-0015-44AC-A606-AC48BB80C133}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>recollq</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>__WIN32__;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\pthreads-w32\Pre-built.2\include;C:\Users\Bill\recoll\src\xaposix;C:\Users\Bill\recoll\src\utils;C:\Users\Bill\recoll\src\unac;C:\Users\Bill\recoll\src\rcldb;C:\Users\Bill\recoll\src\internfile;C:\Users\Bill\recoll\src\index;C:\Users\Bill\recoll\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4800</DisableSpecificWarnings>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\xapian\xapian-core-1.2.8\win32\x64\Debug;C:\Users\Bill\recoll\src\windows\x64\Debug;C:\pthreads-w32\Pre-built.2\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>Win32ProjectRecoll.lib;C:\zlib64\zlib-win64\x64\Debug\zlib.lib;xapian-core.lib;C:\iconv64\Debug_x64\libiconvD.lib;Ws2_32.lib;Rpcrt4.lib;pthreadVC2.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\query\docseq.cpp" />
<ClCompile Include="..\..\query\docseqdb.cpp" />
<ClCompile Include="..\..\query\docseqhist.cpp" />
<ClCompile Include="..\..\query\dynconf.cpp" />
<ClCompile Include="..\..\query\filtseq.cpp" />
<ClCompile Include="..\..\query\plaintorich.cpp" />
<ClCompile Include="..\..\query\recollq.cpp" />
<ClCompile Include="..\..\query\recollqmain.cpp" />
<ClCompile Include="..\..\query\reslistpager.cpp" />
<ClCompile Include="..\..\query\sortseq.cpp" />
<ClCompile Include="..\..\query\wasaparse.cpp" />
<ClCompile Include="..\..\query\wasaparseaux.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\query\docseq.h" />
<ClInclude Include="..\..\query\docseqdb.h" />
<ClInclude Include="..\..\query\docseqdocs.h" />
<ClInclude Include="..\..\query\docseqhist.h" />
<ClInclude Include="..\..\query\dynconf.h" />
<ClInclude Include="..\..\query\filtseq.h" />
<ClInclude Include="..\..\query\plaintorich.h" />
<ClInclude Include="..\..\query\recollq.h" />
<ClInclude Include="..\..\query\reslistpager.h" />
<ClInclude Include="..\..\query\sortseq.h" />
<ClInclude Include="..\..\query\wasaparse.hpp" />
<ClInclude Include="..\..\query\wasaparserdriver.h" />
<ClInclude Include="..\..\query\wasatorcl.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\query\docseqdb.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\docseqhist.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\dynconf.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\filtseq.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\plaintorich.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\recollq.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\recollqmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\reslistpager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\sortseq.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\wasaparseaux.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\wasaparse.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\query\docseq.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\query\docseqdb.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\docseqdocs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\docseqhist.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\dynconf.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\filtseq.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\plaintorich.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\recollq.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\reslistpager.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\sortseq.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\wasaparserdriver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\wasatorcl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\wasaparse.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\query\docseq.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>