mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 10:58:52 +00:00
I'll find a solution for the 'dirList problem', Abdel.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21884 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
ff381ed2fa
commit
5c4a20fe04
124
development/attic/cow_ptr.h
Normal file
124
development/attic/cow_ptr.h
Normal file
@ -0,0 +1,124 @@
|
||||
// -*- C++ -*-
|
||||
/**
|
||||
* \file cow_ptr.h
|
||||
* This file is part of LyX, the document processor.
|
||||
* Licence details can be found in the file COPYING.
|
||||
*
|
||||
* \author Angus Leeming
|
||||
*
|
||||
* A pointer with copy-on-write semantics
|
||||
*
|
||||
* The original version of this class was written by Yonat Sharon
|
||||
* and is freely available at http://ootips.org/yonat/
|
||||
*
|
||||
* I modified it to use boost::shared_ptr internally, rather than use his
|
||||
* home-grown equivalent.
|
||||
*/
|
||||
|
||||
#ifndef COW_PTR_H
|
||||
#define COW_PTR_H
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
|
||||
namespace lyx {
|
||||
namespace support {
|
||||
|
||||
template <typename T>
|
||||
class cow_ptr {
|
||||
public:
|
||||
explicit cow_ptr(T * = 0);
|
||||
cow_ptr(cow_ptr const &);
|
||||
cow_ptr & operator=(cow_ptr const &);
|
||||
|
||||
T const & operator*() const;
|
||||
T const * operator->() const;
|
||||
T const * get() const;
|
||||
|
||||
T & operator*();
|
||||
T * operator->();
|
||||
T * get();
|
||||
|
||||
private:
|
||||
boost::shared_ptr<T> ptr_;
|
||||
void copy();
|
||||
};
|
||||
|
||||
|
||||
template <typename T>
|
||||
cow_ptr<T>::cow_ptr(T * p)
|
||||
: ptr_(p)
|
||||
{}
|
||||
|
||||
|
||||
template <typename T>
|
||||
cow_ptr<T>::cow_ptr(cow_ptr const & other)
|
||||
: ptr_(other.ptr_)
|
||||
{}
|
||||
|
||||
|
||||
template <typename T>
|
||||
cow_ptr<T> & cow_ptr<T>::operator=(cow_ptr const & other)
|
||||
{
|
||||
if (&other != this)
|
||||
ptr_ = other.ptr_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
T const & cow_ptr<T>::operator*() const
|
||||
{
|
||||
return *ptr_;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
T const * cow_ptr<T>::operator->() const
|
||||
{
|
||||
return ptr_.get();
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
T const * cow_ptr<T>::get() const
|
||||
{
|
||||
return ptr_.get();
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
T & cow_ptr<T>::operator*()
|
||||
{
|
||||
copy();
|
||||
return *ptr_;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
T * cow_ptr<T>::operator->()
|
||||
{
|
||||
copy();
|
||||
return ptr_.get();
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
T * cow_ptr<T>::get()
|
||||
{
|
||||
copy();
|
||||
return ptr_.get();
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
void cow_ptr<T>::copy()
|
||||
{
|
||||
if (!ptr_.unique())
|
||||
ptr_ = boost::shared_ptr<T>(new T(*ptr_.get()));
|
||||
}
|
||||
|
||||
} // namespace support
|
||||
} // namespace lyx
|
||||
|
||||
#endif // NOT COW_PTR_H
|
@ -20,11 +20,12 @@ t=0
|
||||
#for i in `find ../../src/support -name '*.cpp'` ; do
|
||||
#for i in `find ../../src/graphics -name '*.cpp'` ; do
|
||||
#for i in `find ../../src/graphics -name '*.cpp'` ; do
|
||||
#for i in ../../src/*.cpp ; do
|
||||
#for i in `find ../../src/support/chdir.cpp` ; do
|
||||
for i in `find ../.. -name '*.cpp'` ; do
|
||||
#echo $i
|
||||
#echo "g++ $inc -DQT_NO_STL -E $i"
|
||||
#g++ $inc -DQT_NO_STL -E $i > tmp/`basename $i`
|
||||
g++ $inc -DQT_NO_STL -E $i > t
|
||||
l=`g++ $inc -DQT_NO_STL -E $i | wc -l`
|
||||
f=`cat $i | wc -l`
|
||||
s=$[s + l]
|
||||
|
@ -519,8 +519,8 @@ bool Converters::move(string const & fmt,
|
||||
string const to_base = removeExtension(to.absFilename());
|
||||
string const to_extension = getExtension(to.absFilename());
|
||||
|
||||
vector<FileName> const files = FileName(path).dirList(
|
||||
getExtension(from.absFilename()));
|
||||
vector<FileName> const files =
|
||||
support::dirList(FileName(path), getExtension(from.absFilename()));
|
||||
for (vector<FileName>::const_iterator it = files.begin();
|
||||
it != files.end(); ++it) {
|
||||
string const from2 = it->absFilename();
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
#include "support/FileName.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "support/FileName.h"
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace lyx {
|
||||
|
@ -11,10 +11,10 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "support/debug.h"
|
||||
#include "LyX.h"
|
||||
#include "support/gettext.h"
|
||||
|
||||
#include "support/debug.h"
|
||||
#include "support/gettext.h"
|
||||
#include "support/os.h"
|
||||
|
||||
#include <iostream>
|
||||
@ -33,6 +33,8 @@ int main(int argc, char * argv[])
|
||||
// early as possible.
|
||||
lyx::lyxerr.setStream(std::cerr);
|
||||
|
||||
LYXERR0("acssdc");
|
||||
|
||||
lyx::support::os::init(argc, argv);
|
||||
|
||||
// initialize for internationalized version *EK*
|
||||
|
@ -268,7 +268,7 @@ static bool rmdir(QFileInfo const & fi)
|
||||
QDir dir(fi.absoluteFilePath());
|
||||
QFileInfoList list = dir.entryInfoList();
|
||||
bool global_success = true;
|
||||
for (int i = 0; i < list.size(); ++i) {
|
||||
for (int i = 0; i != list.size(); ++i) {
|
||||
if (list.at(i).fileName() == ".")
|
||||
continue;
|
||||
if (list.at(i).fileName() == "..")
|
||||
@ -313,16 +313,15 @@ bool FileName::createDirectory(int permission) const
|
||||
}
|
||||
|
||||
|
||||
std::vector<FileName> FileName::dirList(std::string const & ext)
|
||||
std::vector<FileName> dirList(FileName const & dirname, std::string const & ext)
|
||||
{
|
||||
std::vector<FileName> dirlist;
|
||||
if (!exists() || !isDirectory()) {
|
||||
lyxerr << "FileName::dirList(): Directory \"" << absFilename()
|
||||
<< "\" does not exist!" << endl;
|
||||
if (!dirname.isDirectory()) {
|
||||
LYXERR0("Directory '" << dirname << "' does not exist!");
|
||||
return dirlist;
|
||||
}
|
||||
|
||||
QDir dir(d->fi.absoluteFilePath());
|
||||
QDir dir(dirname.d->fi.absoluteFilePath());
|
||||
|
||||
if (!ext.empty()) {
|
||||
QString filter;
|
||||
@ -332,17 +331,16 @@ std::vector<FileName> FileName::dirList(std::string const & ext)
|
||||
default: filter = "*." + toqstr(ext);
|
||||
}
|
||||
dir.setNameFilters(QStringList(filter));
|
||||
LYXERR(Debug::FILES, "FileName::dirList(): filtering on extension "
|
||||
<< fromqstr(filter) << " is requested." << endl);
|
||||
LYXERR(Debug::FILES, "filtering on extension "
|
||||
<< fromqstr(filter) << " is requested.");
|
||||
}
|
||||
|
||||
QFileInfoList list = dir.entryInfoList();
|
||||
for (int i = 0; i < list.size(); ++i) {
|
||||
for (int i = 0; i != list.size(); ++i) {
|
||||
FileName fi;
|
||||
fi.d->fi = list.at(i);
|
||||
dirlist.push_back(fi);
|
||||
LYXERR(Debug::FILES, "FileName::dirList(): found file "
|
||||
<< fi.absFilename() << endl);
|
||||
LYXERR(Debug::FILES, "found file " << fi);
|
||||
}
|
||||
|
||||
return dirlist;
|
||||
@ -641,20 +639,20 @@ void DocFileName::erase()
|
||||
}
|
||||
|
||||
|
||||
string const DocFileName::relFilename(string const & path) const
|
||||
string DocFileName::relFilename(string const & path) const
|
||||
{
|
||||
// FIXME UNICODE
|
||||
return to_utf8(makeRelPath(qstring_to_ucs4(d->fi.absoluteFilePath()), from_utf8(path)));
|
||||
}
|
||||
|
||||
|
||||
string const DocFileName::outputFilename(string const & path) const
|
||||
string DocFileName::outputFilename(string const & path) const
|
||||
{
|
||||
return save_abs_path_ ? absFilename() : relFilename(path);
|
||||
}
|
||||
|
||||
|
||||
string const DocFileName::mangledFilename(std::string const & dir) const
|
||||
string DocFileName::mangledFilename(std::string const & dir) const
|
||||
{
|
||||
// We need to make sure that every DocFileName instance for a given
|
||||
// filename returns the same mangled name.
|
||||
@ -726,7 +724,7 @@ bool DocFileName::isZipped() const
|
||||
}
|
||||
|
||||
|
||||
string const DocFileName::unzippedFilename() const
|
||||
string DocFileName::unzippedFilename() const
|
||||
{
|
||||
return unzippedFileName(absFilename());
|
||||
}
|
||||
|
@ -15,14 +15,11 @@
|
||||
#include "support/strfwd.h"
|
||||
|
||||
#include <ctime>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
||||
namespace lyx {
|
||||
namespace support {
|
||||
|
||||
|
||||
/**
|
||||
* Class for storing file names.
|
||||
* The file name may be empty. If it is not empty it is an absolute path.
|
||||
@ -101,10 +98,6 @@ public:
|
||||
/// Creates directory. Returns true on success
|
||||
bool createDirectory(int permissions) const;
|
||||
|
||||
/// \return list files in a directory having optional extension ext..
|
||||
std::vector<FileName> dirList(
|
||||
std::string const & ext = std::string());
|
||||
|
||||
/// Get the contents of a file as a huge std::string
|
||||
std::string fileContents() const;
|
||||
/**
|
||||
@ -134,7 +127,7 @@ public:
|
||||
/// (securely) create a temporary file in the given dir with the given mask
|
||||
/// \p mask must be in filesystem encoding
|
||||
static FileName tempName(FileName const & dir = FileName(),
|
||||
std::string const & mask = std::string());
|
||||
std::string const & mask = empty_string());
|
||||
|
||||
/// filename without path
|
||||
std::string onlyFileName() const;
|
||||
@ -143,7 +136,7 @@ public:
|
||||
/// used for display in the Gui
|
||||
docstring displayName(int threshold = 1000) const;
|
||||
|
||||
private:
|
||||
//private:
|
||||
friend class DocFileName;
|
||||
///
|
||||
struct Private;
|
||||
@ -184,9 +177,9 @@ public:
|
||||
|
||||
bool saveAbsPath() const { return save_abs_path_; }
|
||||
/// \param buffer_path if empty, uses `pwd`
|
||||
std::string const relFilename(std::string const & buffer_path = std::string()) const;
|
||||
std::string relFilename(std::string const & buffer_path = empty_string()) const;
|
||||
/// \param buf_path if empty, uses `pwd`
|
||||
std::string const outputFilename(std::string const & buf_path = std::string()) const;
|
||||
std::string outputFilename(std::string const & buf_path = empty_string()) const;
|
||||
|
||||
/** @returns a mangled representation of the absolute file name
|
||||
* suitable for use in the temp dir when, for example, converting
|
||||
@ -208,13 +201,13 @@ public:
|
||||
* Only the mangled file name is returned. It is not prepended
|
||||
* with @c dir.
|
||||
*/
|
||||
std::string const
|
||||
mangledFilename(std::string const & dir = std::string()) const;
|
||||
std::string
|
||||
mangledFilename(std::string const & dir = empty_string()) const;
|
||||
|
||||
/// \return true if the file is compressed.
|
||||
bool isZipped() const;
|
||||
/// \return the absolute file name without its .gz, .z, .Z extension
|
||||
std::string const unzippedFilename() const;
|
||||
std::string unzippedFilename() const;
|
||||
|
||||
private:
|
||||
bool save_abs_path_;
|
||||
|
@ -275,6 +275,10 @@ typedef std::pair<int, std::string> cmd_ret;
|
||||
|
||||
cmd_ret const runCommand(std::string const & cmd);
|
||||
|
||||
/// \return list files in a directory having optional extension ext..
|
||||
std::vector<FileName> dirList(FileName const & dir,
|
||||
std::string const & ext = empty_string());
|
||||
|
||||
} // namespace support
|
||||
} // namespace lyx
|
||||
|
||||
|
@ -42,6 +42,22 @@ using std::toupper;
|
||||
|
||||
namespace lyx {
|
||||
|
||||
// Using this allows us to have docstring default arguments in headers
|
||||
// without #include "support/docstring" there.
|
||||
docstring const & empty_docstring()
|
||||
{
|
||||
static docstring s;
|
||||
return s;
|
||||
}
|
||||
|
||||
// Using this allows us to have std::string default arguments in headers
|
||||
// without #include <string>
|
||||
std::string const & empty_string()
|
||||
{
|
||||
static std::string s;
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a QChar into a UCS4 character.
|
||||
* This is a hack (it does only make sense for the common part of the UCS4
|
||||
@ -232,73 +248,77 @@ int compare_ascii_no_case(docstring const & s, docstring const & s2)
|
||||
|
||||
bool isStrInt(string const & str)
|
||||
{
|
||||
if (str.empty()) return false;
|
||||
if (str.empty())
|
||||
return false;
|
||||
|
||||
// Remove leading and trailing white space chars.
|
||||
string const tmpstr = trim(str);
|
||||
if (tmpstr.empty()) return false;
|
||||
if (tmpstr.empty())
|
||||
return false;
|
||||
|
||||
string::const_iterator cit = tmpstr.begin();
|
||||
if ((*cit) == '-') ++cit;
|
||||
if ((*cit) == '-')
|
||||
++cit;
|
||||
|
||||
string::const_iterator end = tmpstr.end();
|
||||
for (; cit != end; ++cit) {
|
||||
if (!isdigit((*cit))) return false;
|
||||
}
|
||||
for (; cit != end; ++cit)
|
||||
if (!isdigit((*cit)))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool isStrUnsignedInt(string const & str)
|
||||
{
|
||||
if (str.empty()) return false;
|
||||
if (str.empty())
|
||||
return false;
|
||||
|
||||
// Remove leading and trailing white space chars.
|
||||
string const tmpstr = trim(str);
|
||||
if (tmpstr.empty()) return false;
|
||||
if (tmpstr.empty())
|
||||
return false;
|
||||
|
||||
string::const_iterator cit = tmpstr.begin();
|
||||
string::const_iterator end = tmpstr.end();
|
||||
for (; cit != end; ++cit) {
|
||||
if (!isdigit((*cit))) return false;
|
||||
}
|
||||
for (; cit != end; ++cit)
|
||||
if (!isdigit((*cit)))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool isStrDbl(string const & str)
|
||||
{
|
||||
if (str.empty()) return false;
|
||||
if (str.empty())
|
||||
return false;
|
||||
|
||||
// Remove leading and trailing white space chars.
|
||||
string const tmpstr = trim(str);
|
||||
if (tmpstr.empty()) return false;
|
||||
// if (1 < tmpstr.count('.')) return false;
|
||||
if (tmpstr.empty())
|
||||
return false;
|
||||
// if (tmpstr.count('.') > 1) return false;
|
||||
|
||||
string::const_iterator cit = tmpstr.begin();
|
||||
bool found_dot(false);
|
||||
if ((*cit) == '-') ++cit;
|
||||
bool found_dot = false;
|
||||
if (*cit == '-')
|
||||
++cit;
|
||||
string::const_iterator end = tmpstr.end();
|
||||
for (; cit != end; ++cit) {
|
||||
if (!isdigit((*cit))
|
||||
&& '.' != (*cit)) {
|
||||
if (!isdigit(*cit) && *cit != '.')
|
||||
return false;
|
||||
}
|
||||
if ('.' == (*cit)) {
|
||||
if (found_dot) {
|
||||
if (found_dot)
|
||||
return false;
|
||||
} else {
|
||||
found_dot = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
inline
|
||||
bool isHexChar(char_type c)
|
||||
static bool isHexChar(char_type c)
|
||||
{
|
||||
return c == '0' ||
|
||||
c == '1' ||
|
||||
@ -318,8 +338,6 @@ bool isHexChar(char_type c)
|
||||
c == 'f' || c == 'F';
|
||||
}
|
||||
|
||||
} // anon namespace
|
||||
|
||||
|
||||
bool isHex(docstring const & str)
|
||||
{
|
||||
@ -567,7 +585,8 @@ string const token(string const & a, char delim, int n)
|
||||
|
||||
docstring const token(docstring const & a, char_type delim, int n)
|
||||
{
|
||||
if (a.empty()) return docstring();
|
||||
if (a.empty())
|
||||
return docstring();
|
||||
|
||||
size_t k = 0;
|
||||
size_t i = 0;
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "support/docstring.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
||||
|
@ -67,6 +67,9 @@ typedef std::basic_ostream<char_type, std::char_traits<char_type> > odocstream;
|
||||
extern odocstream & operator<<(odocstream &, char);
|
||||
#endif
|
||||
|
||||
docstring const & empty_docstring();
|
||||
std::string const & empty_string();
|
||||
|
||||
} // namespace lyx
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user