mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
5c66b43ce8
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9553 a592a061-630c-0410-9148-cb99ea01b6c8
2220 lines
60 KiB
Diff
2220 lines
60 KiB
Diff
Index: src/BufferView.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView.C,v
|
||
retrieving revision 1.256
|
||
diff -u -r1.256 BufferView.C
|
||
--- src/BufferView.C 30 Nov 2004 01:59:29 -0000 1.256
|
||
+++ src/BufferView.C 31 Jan 2005 11:19:24 -0000
|
||
@@ -290,10 +290,17 @@
|
||
screen().hideCursor();
|
||
}
|
||
|
||
-
|
||
-LyXText * BufferView::getLyXText() const
|
||
+LyXText * BufferView::getLyXText()
|
||
{
|
||
LyXText * text = cursor().innerText();
|
||
+ BOOST_ASSERT(text);
|
||
+ return text;
|
||
+}
|
||
+
|
||
+
|
||
+LyXText const * BufferView::getLyXText() const
|
||
+{
|
||
+ LyXText const * text = cursor().innerText();
|
||
BOOST_ASSERT(text);
|
||
return text;
|
||
}
|
||
Index: src/BufferView.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView.h,v
|
||
retrieving revision 1.183
|
||
diff -u -r1.183 BufferView.h
|
||
--- src/BufferView.h 19 Jan 2005 15:03:26 -0000 1.183
|
||
+++ src/BufferView.h 31 Jan 2005 11:15:54 -0000
|
||
@@ -102,7 +102,10 @@
|
||
Change const getCurrentChange();
|
||
|
||
/// return the lyxtext we are using
|
||
- LyXText * getLyXText() const;
|
||
+ LyXText * getLyXText();
|
||
+
|
||
+ /// return the lyxtext we are using
|
||
+ LyXText const * getLyXText() const;
|
||
|
||
/// simple replacing. Use the font of the first selected character
|
||
void replaceSelectionWithString(std::string const & str);
|
||
Index: src/BufferView_pimpl.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView_pimpl.C,v
|
||
retrieving revision 1.569
|
||
diff -u -r1.569 BufferView_pimpl.C
|
||
--- src/BufferView_pimpl.C 27 Jan 2005 21:05:30 -0000 1.569
|
||
+++ src/BufferView_pimpl.C 31 Jan 2005 12:25:38 -0000
|
||
@@ -445,7 +445,6 @@
|
||
t.redoParagraph(anchor_ref_);
|
||
int const h = t.getPar(anchor_ref_).height();
|
||
offset_ref_ = int((bar * t.paragraphs().size() - anchor_ref_) * h);
|
||
- lyxerr << "scrolling: " << value << std::endl;
|
||
update();
|
||
|
||
if (!lyxrc.cursor_follows_scrollbar)
|
||
@@ -612,6 +611,7 @@
|
||
|
||
CoordCache backup;
|
||
std::swap(theCoords, backup);
|
||
+ theCoords.startUpdating();
|
||
//
|
||
ViewMetricsInfo vi = metrics();
|
||
|
||
@@ -622,8 +622,11 @@
|
||
if (forceupdate) {
|
||
// second drawing step
|
||
screen().redraw(*bv_, vi);
|
||
- } else
|
||
+ theCoords.doneUpdating();
|
||
+ } else {
|
||
+ // Abort updating of the coord cache - just restore the old one
|
||
std::swap(theCoords, backup);
|
||
+ }
|
||
} else
|
||
screen().greyOut();
|
||
|
||
@@ -743,7 +746,7 @@
|
||
|
||
void BufferView::Pimpl::center()
|
||
{
|
||
- CursorSlice const & bot = bv_->cursor().bottom();
|
||
+ CursorSlice & bot = bv_->cursor().bottom();
|
||
lyx::pit_type const pit = bot.pit();
|
||
bot.text()->redoParagraph(pit);
|
||
Paragraph const & par = bot.text()->paragraphs()[pit];
|
||
@@ -1247,7 +1250,7 @@
|
||
int y = y1;
|
||
for (lyx::pit_type pit = pit1; pit <= pit2; ++pit) {
|
||
y += text->getPar(pit).ascent();
|
||
- theCoords.pars_[text][pit] = Point(0, y);
|
||
+ theCoords.parPos()[text][pit] = Point(0, y);
|
||
y += text->getPar(pit).descent();
|
||
}
|
||
|
||
Index: src/DepTable.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/DepTable.C,v
|
||
retrieving revision 1.41
|
||
diff -u -r1.41 DepTable.C
|
||
--- src/DepTable.C 13 Oct 2003 01:01:33 -0000 1.41
|
||
+++ src/DepTable.C 19 Jan 2005 10:35:54 -0000
|
||
@@ -26,7 +26,9 @@
|
||
#include <fstream>
|
||
|
||
#ifndef CXX_GLOBAL_CSTD
|
||
+# ifndef _WIN32
|
||
using std::time;
|
||
+# endif
|
||
#endif
|
||
|
||
using lyx::support::ltrim;
|
||
Index: src/RowList_fwd.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/RowList_fwd.h,v
|
||
retrieving revision 1.5
|
||
diff -u -r1.5 RowList_fwd.h
|
||
--- src/RowList_fwd.h 16 Nov 2004 20:41:37 -0000 1.5
|
||
+++ src/RowList_fwd.h 27 Jan 2005 10:58:08 -0000
|
||
@@ -16,6 +16,11 @@
|
||
|
||
#include <vector>
|
||
|
||
+/**
|
||
+ * Each paragraph is broken up into a number of rows on the screen.
|
||
+ * This is a list of such on-screen rows, ordered from the top row
|
||
+ * downwards.
|
||
+ */
|
||
typedef std::vector<Row> RowList;
|
||
|
||
#endif
|
||
Index: src/buffer.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/buffer.C,v
|
||
retrieving revision 1.609
|
||
diff -u -r1.609 buffer.C
|
||
--- src/buffer.C 31 Jan 2005 10:42:17 -0000 1.609
|
||
+++ src/buffer.C 31 Jan 2005 11:08:10 -0000
|
||
@@ -77,7 +77,11 @@
|
||
#include <boost/bind.hpp>
|
||
#include <boost/filesystem/operations.hpp>
|
||
|
||
-#include <utime.h>
|
||
+#ifdef _WIN32
|
||
+# include <windows.h>
|
||
+#else
|
||
+# include <utime.h>
|
||
+#endif
|
||
|
||
#include <iomanip>
|
||
#include <stack>
|
||
Index: src/buffer.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/buffer.h,v
|
||
retrieving revision 1.189
|
||
diff -u -r1.189 buffer.h
|
||
--- src/buffer.h 17 Dec 2004 16:27:07 -0000 1.189
|
||
+++ src/buffer.h 31 Jan 2005 09:58:01 -0000
|
||
@@ -49,10 +49,15 @@
|
||
|
||
|
||
/** The buffer object.
|
||
- This is the buffer object. It contains all the informations about
|
||
- a document loaded into LyX. I am not sure if the class is complete or
|
||
- minimal, probably not.
|
||
- \author Lars Gullik Bj<42>nnes
|
||
+ * This is the buffer object. It contains all the informations about
|
||
+ * a document loaded into LyX.
|
||
+ * The buffer object owns the LyXText (wrapped in an InsetText), which
|
||
+ * contains the individual paragraphs of the document.
|
||
+ *
|
||
+ *
|
||
+ * I am not sure if the class is complete or
|
||
+ * minimal, probably not.
|
||
+ * \author Lars Gullik Bj<42>nnes
|
||
*/
|
||
class Buffer {
|
||
public:
|
||
Index: src/bufferview_funcs.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/bufferview_funcs.C,v
|
||
retrieving revision 1.146
|
||
diff -u -r1.146 bufferview_funcs.C
|
||
--- src/bufferview_funcs.C 6 Jan 2005 16:39:21 -0000 1.146
|
||
+++ src/bufferview_funcs.C 31 Jan 2005 11:54:25 -0000
|
||
@@ -180,8 +180,8 @@
|
||
Point getPos(DocIterator const & dit)
|
||
{
|
||
CursorSlice const & bot = dit.bottom();
|
||
- CoordCache::InnerParPosCache & cache = theCoords.pars_[bot.text()];
|
||
- CoordCache::InnerParPosCache::iterator it = cache.find(bot.pit());
|
||
+ CoordCache::InnerParPosCache const & cache = theCoords.getParPos().find(bot.text())->second;
|
||
+ CoordCache::InnerParPosCache::const_iterator it = cache.find(bot.pit());
|
||
if (it == cache.end()) {
|
||
//lyxerr << "cursor out of view" << std::endl;
|
||
return Point(-1,-1);
|
||
@@ -195,7 +195,7 @@
|
||
// this could be used elsewhere as well?
|
||
CurStatus status(BufferView const * bv, DocIterator const & dit)
|
||
{
|
||
- CoordCache::InnerParPosCache & cache = theCoords.pars_[dit.bottom().text()];
|
||
+ CoordCache::InnerParPosCache const & cache = theCoords.getParPos().find(dit.bottom().text())->second;
|
||
|
||
if (cache.find(dit.bottom().pit()) != cache.end())
|
||
return CUR_INSIDE;
|
||
Index: src/coordcache.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/coordcache.C,v
|
||
retrieving revision 1.5
|
||
diff -u -r1.5 coordcache.C
|
||
--- src/coordcache.C 12 Jan 2005 10:30:44 -0000 1.5
|
||
+++ src/coordcache.C 31 Jan 2005 10:20:07 -0000
|
||
@@ -21,20 +21,24 @@
|
||
}
|
||
|
||
|
||
-void lyxaborter(int x, int y)
|
||
-{
|
||
- lyxerr << "abort on x: " << x << " y: " << y << std::endl;
|
||
- BOOST_ASSERT(false);
|
||
-}
|
||
-
|
||
-
|
||
void CoordCache::clear()
|
||
{
|
||
+ BOOST_ASSERT(updating);
|
||
arrays_.clear();
|
||
insets_.clear();
|
||
pars_.clear();
|
||
}
|
||
|
||
+void CoordCache::startUpdating() {
|
||
+ BOOST_ASSERT(!updating);
|
||
+ updating = true;
|
||
+}
|
||
+
|
||
+
|
||
+void CoordCache::doneUpdating() {
|
||
+ BOOST_ASSERT(updating);
|
||
+ updating = false;
|
||
+}
|
||
|
||
Point CoordCache::get(LyXText const * text, lyx::pit_type pit)
|
||
{
|
||
Index: src/coordcache.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/coordcache.h,v
|
||
retrieving revision 1.6
|
||
diff -u -r1.6 coordcache.h
|
||
--- src/coordcache.h 19 Jan 2005 15:03:29 -0000 1.6
|
||
+++ src/coordcache.h 31 Jan 2005 12:23:49 -0000
|
||
@@ -12,13 +12,7 @@
|
||
|
||
#include <map>
|
||
|
||
-
|
||
-// All positions cached in this cache are only valid between subsequent
|
||
-// updated. (x,y) == (0,0) is the upper left screen corner, x increases
|
||
-// to the right, y increases downwords.
|
||
-
|
||
void lyxbreaker(void const * data, const char * hint, int size);
|
||
-void lyxaborter(int x, int y);
|
||
|
||
class Point {
|
||
public:
|
||
@@ -92,21 +86,55 @@
|
||
cache_type data_;
|
||
};
|
||
|
||
-
|
||
+/**
|
||
+ * A global cache that allows us to come from a paragraph in a document
|
||
+ * to a position point on the screen.
|
||
+ * All points cached in this cache are only valid between subsequent
|
||
+ * updated. (x,y) == (0,0) is the upper left screen corner, x increases
|
||
+ * to the right, y increases downwords.
|
||
+ * The cache is built in BufferView::Pimpl::metrics which is called
|
||
+ * from BufferView::Pimpl::update. The individual points are added
|
||
+ * while we paint them. See for instance paintPar in RowPainter.C.
|
||
+ */
|
||
class CoordCache {
|
||
public:
|
||
+ CoordCache() : updating(false) { }
|
||
+ /// In order to find bugs, we record when we start updating the cache
|
||
+ void startUpdating();
|
||
+ /// When we are done, we record that to help find bugs
|
||
+ void doneUpdating();
|
||
+
|
||
void clear();
|
||
Point get(LyXText const *, lyx::pit_type);
|
||
|
||
+ /// A map from paragraph index number to screen point
|
||
+ typedef std::map<lyx::pit_type, Point> InnerParPosCache;
|
||
+ /// A map from a LyXText to the map of paragraphs to screen points
|
||
+ typedef std::map<LyXText const *, InnerParPosCache> ParPosCache;
|
||
+
|
||
+ /// A map from MathArray to position on the screen
|
||
+ CoordCacheBase<MathArray> & arrays() { BOOST_ASSERT(updating); return arrays_; }
|
||
+ CoordCacheBase<MathArray> const & getArrays() const { return arrays_; }
|
||
+ /// A map from insets to positions on the screen
|
||
+ CoordCacheBase<InsetBase> & insets() { BOOST_ASSERT(updating); return insets_; }
|
||
+ CoordCacheBase<InsetBase> const & getInsets() const { return insets_; }
|
||
+ /// A map from (LyXText, paragraph) pair to screen positions
|
||
+ ParPosCache & parPos() { BOOST_ASSERT(updating); return pars_; }
|
||
+ ParPosCache const & getParPos() const { return pars_; }
|
||
+private:
|
||
CoordCacheBase<MathArray> arrays_;
|
||
|
||
// all insets
|
||
CoordCacheBase<InsetBase> insets_;
|
||
|
||
// paragraph grouped by owning text
|
||
- typedef std::map<lyx::pit_type, Point> InnerParPosCache;
|
||
- typedef std::map<LyXText const *, InnerParPosCache> ParPosCache;
|
||
ParPosCache pars_;
|
||
+
|
||
+ /**
|
||
+ * Debugging flag only: Set to true while the cache is being built.
|
||
+ * No changes to the structure are allowed unless we are updating.
|
||
+ */
|
||
+ bool updating;
|
||
};
|
||
|
||
extern CoordCache theCoords;
|
||
Index: src/cursor.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor.C,v
|
||
retrieving revision 1.119
|
||
diff -u -r1.119 cursor.C
|
||
--- src/cursor.C 18 Jan 2005 14:15:55 -0000 1.119
|
||
+++ src/cursor.C 31 Jan 2005 11:08:09 -0000
|
||
@@ -58,7 +58,9 @@
|
||
using std::vector;
|
||
using std::endl;
|
||
#ifndef CXX_GLOBAL_CSTD
|
||
+# ifndef _WIN32
|
||
using std::isalpha;
|
||
+# endif
|
||
#endif
|
||
using std::min;
|
||
using std::swap;
|
||
@@ -1086,7 +1088,7 @@
|
||
if (operator[](s).text())
|
||
break;
|
||
CursorSlice const & sl = operator[](s);
|
||
- LyXText & text = *sl.text();
|
||
+ LyXText const & text = *sl.text();
|
||
LyXFont font = text.getPar(sl.pit()).getFont(
|
||
bv().buffer()->params(), sl.pos(), outerFont(sl.pit(), text.paragraphs()));
|
||
return font.language()->encoding();
|
||
@@ -1127,7 +1129,7 @@
|
||
if (operator[](s).text())
|
||
break;
|
||
CursorSlice const & sl = operator[](s);
|
||
- LyXText & text = *sl.text();
|
||
+ LyXText const & text = *sl.text();
|
||
LyXFont font = text.getPar(sl.pit()).getFont(
|
||
bv().buffer()->params(),
|
||
sl.pos(),
|
||
Index: src/cursor_slice.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor_slice.C,v
|
||
retrieving revision 1.26
|
||
diff -u -r1.26 cursor_slice.C
|
||
--- src/cursor_slice.C 24 Nov 2004 21:53:38 -0000 1.26
|
||
+++ src/cursor_slice.C 31 Jan 2005 11:01:13 -0000
|
||
@@ -104,7 +104,13 @@
|
||
}
|
||
|
||
|
||
-LyXText * CursorSlice::text() const
|
||
+LyXText * CursorSlice::text()
|
||
+{
|
||
+ BOOST_ASSERT(inset_);
|
||
+ return inset_->getText(idx_);
|
||
+}
|
||
+
|
||
+LyXText const * CursorSlice::text() const
|
||
{
|
||
BOOST_ASSERT(inset_);
|
||
return inset_->getText(idx_);
|
||
Index: src/cursor_slice.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor_slice.h,v
|
||
retrieving revision 1.20
|
||
diff -u -r1.20 cursor_slice.h
|
||
--- src/cursor_slice.h 30 Nov 2004 01:59:33 -0000 1.20
|
||
+++ src/cursor_slice.h 31 Jan 2005 11:01:13 -0000
|
||
@@ -97,7 +97,9 @@
|
||
/// see comment for the member
|
||
bool & boundary() { return boundary_; }
|
||
///
|
||
- LyXText * text() const;
|
||
+ LyXText * text();
|
||
+ ///
|
||
+ LyXText const * text() const;
|
||
///
|
||
UpdatableInset * asUpdatableInset() const;
|
||
///
|
||
Index: src/dociterator.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/dociterator.C,v
|
||
retrieving revision 1.21
|
||
diff -u -r1.21 dociterator.C
|
||
--- src/dociterator.C 30 Nov 2004 01:59:33 -0000 1.21
|
||
+++ src/dociterator.C 31 Jan 2005 11:11:59 -0000
|
||
@@ -123,7 +123,13 @@
|
||
}
|
||
|
||
|
||
-LyXText * DocIterator::text() const
|
||
+LyXText * DocIterator::text()
|
||
+{
|
||
+ BOOST_ASSERT(!empty());
|
||
+ return top().text();
|
||
+}
|
||
+
|
||
+LyXText const * DocIterator::text() const
|
||
{
|
||
BOOST_ASSERT(!empty());
|
||
return top().text();
|
||
@@ -146,12 +152,14 @@
|
||
|
||
Row & DocIterator::textRow()
|
||
{
|
||
+ BOOST_ASSERT(!paragraph().rows().empty());
|
||
return paragraph().getRow(pos());
|
||
}
|
||
|
||
|
||
Row const & DocIterator::textRow() const
|
||
{
|
||
+ BOOST_ASSERT(!paragraph().rows().empty());
|
||
return paragraph().getRow(pos());
|
||
}
|
||
|
||
@@ -233,7 +241,18 @@
|
||
}
|
||
|
||
|
||
-LyXText * DocIterator::innerText() const
|
||
+LyXText * DocIterator::innerText()
|
||
+{
|
||
+ BOOST_ASSERT(!empty());
|
||
+ // go up until first non-0 text is hit
|
||
+ // (innermost text is 0 in mathed)
|
||
+ for (int i = size() - 1; i >= 0; --i)
|
||
+ if (operator[](i).text())
|
||
+ return operator[](i).text();
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+LyXText const * DocIterator::innerText() const
|
||
{
|
||
BOOST_ASSERT(!empty());
|
||
// go up until first non-0 text is hit
|
||
Index: src/dociterator.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/dociterator.h,v
|
||
retrieving revision 1.14
|
||
diff -u -r1.14 dociterator.h
|
||
--- src/dociterator.h 30 Nov 2004 01:59:33 -0000 1.14
|
||
+++ src/dociterator.h 31 Jan 2005 11:11:59 -0000
|
||
@@ -151,11 +151,15 @@
|
||
/// the row in the paragraph we're in
|
||
Row const & textRow() const;
|
||
///
|
||
- LyXText * text() const;
|
||
+ LyXText * text();
|
||
+ ///
|
||
+ LyXText const * text() const;
|
||
///
|
||
InsetBase * innerInsetOfType(int code) const;
|
||
///
|
||
- LyXText * innerText() const;
|
||
+ LyXText * innerText();
|
||
+ ///
|
||
+ LyXText const * innerText() const;
|
||
|
||
//
|
||
// elementary moving
|
||
Index: src/ispell.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ispell.C,v
|
||
retrieving revision 1.25
|
||
diff -u -r1.25 ispell.C
|
||
--- src/ispell.C 20 Jan 2005 16:17:36 -0000 1.25
|
||
+++ src/ispell.C 23 Jan 2005 12:09:37 -0000
|
||
@@ -24,11 +24,17 @@
|
||
|
||
#include "support/forkedcall.h"
|
||
|
||
+#ifdef _WIN32
|
||
+# include "support/os_win32.h"
|
||
+#endif
|
||
+
|
||
// HP-UX 11.x doesn't have this header
|
||
#ifdef HAVE_SYS_SELECT_H
|
||
#include <sys/select.h>
|
||
#endif
|
||
-#include <sys/time.h>
|
||
+#ifndef _WIN32
|
||
+# include <sys/time.h>
|
||
+#endif
|
||
|
||
using boost::shared_ptr;
|
||
|
||
@@ -88,6 +94,7 @@
|
||
}
|
||
|
||
// child process
|
||
+#ifndef _WIN32
|
||
dup2(pipein[0], STDIN_FILENO);
|
||
dup2(pipeout[1], STDOUT_FILENO);
|
||
dup2(pipeerr[1], STDERR_FILENO);
|
||
@@ -180,6 +187,7 @@
|
||
|
||
lyxerr << "LyX: Failed to start ispell!" << endl;
|
||
_exit(0);
|
||
+#endif
|
||
}
|
||
|
||
|
||
@@ -191,6 +199,7 @@
|
||
{
|
||
lyxerr[Debug::GUI] << "Created ispell" << endl;
|
||
|
||
+#ifndef _WIN32
|
||
// static due to the setvbuf. Ugly.
|
||
static char o_buf[BUFSIZ];
|
||
|
||
@@ -275,6 +284,7 @@
|
||
close(pipeerr[1]);
|
||
child_->kill();
|
||
child_.reset(0);
|
||
+#endif
|
||
}
|
||
|
||
|
||
@@ -295,18 +305,23 @@
|
||
fclose(out);
|
||
}
|
||
|
||
+#ifndef _WIN32
|
||
close(pipein[0]);
|
||
close(pipein[1]);
|
||
close(pipeout[0]);
|
||
close(pipeout[1]);
|
||
close(pipeerr[0]);
|
||
close(pipeerr[1]);
|
||
+#endif
|
||
delete [] str;
|
||
}
|
||
|
||
|
||
bool ISpell::select(bool & err_read)
|
||
{
|
||
+#ifdef _WIN32
|
||
+ return false;
|
||
+#else
|
||
fd_set infds;
|
||
struct timeval tv;
|
||
int retval = 0;
|
||
@@ -316,11 +331,15 @@
|
||
tv.tv_sec = 2;
|
||
tv.tv_usec = 0;
|
||
|
||
+#ifdef HAVE_SELECT
|
||
retval = ::select(SELECT_TYPE_ARG1 (max(pipeout[0], pipeerr[0]) + 1),
|
||
SELECT_TYPE_ARG234 (&infds),
|
||
0,
|
||
0,
|
||
SELECT_TYPE_ARG5 (&tv));
|
||
+#else
|
||
+ retval = -1;
|
||
+#endif
|
||
|
||
// error
|
||
if (retval <= 0)
|
||
@@ -335,6 +354,7 @@
|
||
fgets(buf, BUFSIZ, in);
|
||
err_read = false;
|
||
return false;
|
||
+#endif
|
||
}
|
||
|
||
|
||
Index: src/lyx_cb.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyx_cb.C,v
|
||
retrieving revision 1.247
|
||
diff -u -r1.247 lyx_cb.C
|
||
--- src/lyx_cb.C 31 Jan 2005 10:42:18 -0000 1.247
|
||
+++ src/lyx_cb.C 31 Jan 2005 10:57:53 -0000
|
||
@@ -44,6 +44,10 @@
|
||
#include "support/path.h"
|
||
#include "support/systemcall.h"
|
||
|
||
+#ifdef _WIN32
|
||
+# include "support/os_win32.h" // fork()
|
||
+#endif
|
||
+
|
||
#include <boost/shared_ptr.hpp>
|
||
#include <boost/filesystem/operations.hpp>
|
||
|
||
Index: src/lyxlex_pimpl.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxlex_pimpl.h,v
|
||
retrieving revision 1.22
|
||
diff -u -r1.22 lyxlex_pimpl.h
|
||
--- src/lyxlex_pimpl.h 21 Jan 2005 08:39:13 -0000 1.22
|
||
+++ src/lyxlex_pimpl.h 25 Jan 2005 12:40:01 -0000
|
||
@@ -23,6 +23,7 @@
|
||
#include <istream>
|
||
#include <stack>
|
||
#include <vector>
|
||
+#include <fstream> // for std::filebuf
|
||
|
||
///
|
||
class LyXLex::Pimpl : boost::noncopyable {
|
||
Index: src/lyxrow.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxrow.h,v
|
||
retrieving revision 1.42
|
||
diff -u -r1.42 lyxrow.h
|
||
--- src/lyxrow.h 30 Nov 2004 01:59:34 -0000 1.42
|
||
+++ src/lyxrow.h 27 Jan 2005 10:55:12 -0000
|
||
@@ -17,7 +17,11 @@
|
||
|
||
#include "support/types.h"
|
||
|
||
-///
|
||
+/**
|
||
+ * An on-screen row of text. A paragraph is broken into a
|
||
+ * RowList for display. Each Row contains position pointers
|
||
+ * into the first and last character positions of that row.
|
||
+ */
|
||
class Row {
|
||
public:
|
||
///
|
||
Index: src/lyxserver.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxserver.C,v
|
||
retrieving revision 1.59
|
||
diff -u -r1.59 lyxserver.C
|
||
--- src/lyxserver.C 20 Jan 2005 15:07:36 -0000 1.59
|
||
+++ src/lyxserver.C 21 Jan 2005 09:47:31 -0000
|
||
@@ -54,6 +54,10 @@
|
||
#include <sys/stat.h>
|
||
#include <fcntl.h>
|
||
|
||
+#ifdef _WIN32
|
||
+# include "support/os_win32.h" // F_SETFL, O_NONBLOCK, fcntl
|
||
+#endif
|
||
+
|
||
#ifdef __EMX__
|
||
#include <cstdlib>
|
||
#include <io.h>
|
||
@@ -182,6 +186,8 @@
|
||
// Imported handles can be used both with OS/2 APIs and emx
|
||
// library functions.
|
||
fd = _imphandle(os2fd);
|
||
+#elif defined(_WIN32)
|
||
+
|
||
#else
|
||
if (::access(filename.c_str(), F_OK) == 0) {
|
||
lyxerr << "LyXComm: Pipe " << filename << " already exists.\n"
|
||
@@ -236,10 +242,12 @@
|
||
}
|
||
#endif
|
||
|
||
+#ifndef _WIN32
|
||
if (::close(fd) < 0) {
|
||
lyxerr << "LyXComm: Could not close pipe " << filename
|
||
<< '\n' << strerror(errno) << endl;
|
||
}
|
||
+#endif
|
||
|
||
// OS/2 pipes are deleted automatically
|
||
#ifndef __EMX__
|
||
@@ -275,7 +283,13 @@
|
||
errno = 0;
|
||
int status;
|
||
// the single = is intended here.
|
||
- while ((status = ::read(infd, charbuf, charbuf_size - 1))) {
|
||
+ while ((status =
|
||
+#ifndef _WIN32
|
||
+ ::read(infd, charbuf, charbuf_size - 1)
|
||
+#else
|
||
+ -1
|
||
+#endif
|
||
+ )) {
|
||
|
||
if (status > 0) {
|
||
charbuf[status] = '\0'; // turn it into a c string
|
||
@@ -332,6 +346,9 @@
|
||
|
||
if (pipename.empty()) return;
|
||
|
||
+#ifdef _WIN32
|
||
+ return;
|
||
+#else
|
||
if (!ready) {
|
||
lyxerr << "LyXComm: Pipes are closed. Could not send "
|
||
<< msg << endl;
|
||
@@ -342,6 +359,7 @@
|
||
closeConnection();
|
||
openConnection();
|
||
}
|
||
+#endif
|
||
#ifdef __EMX__
|
||
APIRET rc;
|
||
int errnum;
|
||
Index: src/lyxsocket.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxsocket.C,v
|
||
retrieving revision 1.6
|
||
diff -u -r1.6 lyxsocket.C
|
||
--- src/lyxsocket.C 23 Jul 2004 19:01:48 -0000 1.6
|
||
+++ src/lyxsocket.C 19 Jan 2005 11:18:01 -0000
|
||
@@ -68,7 +68,9 @@
|
||
LyXServerSocket::~LyXServerSocket()
|
||
{
|
||
lyx_gui::unregister_socket_callback(fd_);
|
||
+#ifndef _WIN32
|
||
::close(fd_);
|
||
+#endif
|
||
lyx::support::unlink(address_);
|
||
lyxerr[Debug::LYXSERVER] << "lyx: Server socket quitting" << endl;
|
||
}
|
||
@@ -155,7 +157,11 @@
|
||
{
|
||
string const linen(line + '\n');
|
||
int const size = linen.size();
|
||
+#ifndef _WIN32
|
||
int const written = ::write(fd_, linen.c_str(), size);
|
||
+#else
|
||
+ int const written = -1;
|
||
+#endif
|
||
if (written < size) { // Allways mean end of connection.
|
||
if ((written == -1) && (errno == EPIPE)) {
|
||
// The program will also receive a SIGPIPE
|
||
@@ -194,7 +200,9 @@
|
||
|
||
LyXDataSocket::~LyXDataSocket()
|
||
{
|
||
+#ifndef _WIN32
|
||
::close(fd_);
|
||
+#endif
|
||
|
||
lyx_gui::unregister_socket_callback(fd_);
|
||
lyxerr[Debug::LYXSERVER] << "lyx: Data socket " << fd_ << " quitting."
|
||
@@ -216,7 +224,13 @@
|
||
int count;
|
||
|
||
// read and store characters in buffer
|
||
- while ((count = ::read(fd_, charbuf, charbuf_size - 1)) > 0) {
|
||
+ while ((count =
|
||
+#ifndef _WIN32
|
||
+ ::read(fd_, charbuf, charbuf_size - 1)
|
||
+#else
|
||
+ 0
|
||
+#endif
|
||
+ ) > 0) {
|
||
buffer_.append(charbuf, charbuf + count);
|
||
}
|
||
|
||
@@ -250,7 +264,11 @@
|
||
{
|
||
string const linen(line + '\n');
|
||
int const size = linen.size();
|
||
+#ifndef _WIN32
|
||
int const written = ::write(fd_, linen.c_str(), size);
|
||
+#else
|
||
+ int const written = -1;
|
||
+#endif
|
||
if (written < size) { // Allways mean end of connection.
|
||
if ((written == -1) && (errno == EPIPE)) {
|
||
// The program will also receive a SIGPIPE
|
||
Index: src/lyxtext.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxtext.h,v
|
||
retrieving revision 1.316
|
||
diff -u -r1.316 lyxtext.h
|
||
--- src/lyxtext.h 17 Dec 2004 16:27:07 -0000 1.316
|
||
+++ src/lyxtext.h 31 Jan 2005 09:58:00 -0000
|
||
@@ -70,7 +70,7 @@
|
||
bool toggleall);
|
||
|
||
/// what you expect when pressing <enter> at cursor position
|
||
- void breakParagraph(LCursor & cur, char keep_layout = 0);
|
||
+ void breakParagraph(LCursor & cur, bool keep_layout = false);
|
||
|
||
/// set layout over selection
|
||
pit_type setLayout(pit_type start, pit_type end,
|
||
@@ -124,7 +124,7 @@
|
||
FuncStatus & status) const;
|
||
|
||
/// access to out BufferView. This should go...
|
||
- BufferView * bv();
|
||
+// BufferView * bv();
|
||
/// access to out BufferView. This should go...
|
||
BufferView * bv() const;
|
||
|
||
Index: src/paragraph.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph.C,v
|
||
retrieving revision 1.400
|
||
diff -u -r1.400 paragraph.C
|
||
--- src/paragraph.C 24 Jan 2005 17:12:18 -0000 1.400
|
||
+++ src/paragraph.C 27 Jan 2005 12:17:23 -0000
|
||
@@ -1795,6 +1795,8 @@
|
||
|
||
Row & Paragraph::getRow(pos_type pos)
|
||
{
|
||
+ BOOST_ASSERT(!rows().empty());
|
||
+
|
||
RowList::iterator rit = rows_.end();
|
||
RowList::iterator const begin = rows_.begin();
|
||
|
||
@@ -1807,6 +1809,8 @@
|
||
|
||
Row const & Paragraph::getRow(pos_type pos) const
|
||
{
|
||
+ BOOST_ASSERT(!rows().empty());
|
||
+
|
||
RowList::const_iterator rit = rows_.end();
|
||
RowList::const_iterator const begin = rows_.begin();
|
||
|
||
@@ -1819,6 +1823,8 @@
|
||
|
||
size_t Paragraph::pos2row(pos_type pos) const
|
||
{
|
||
+ BOOST_ASSERT(!rows().empty());
|
||
+
|
||
RowList::const_iterator rit = rows_.end();
|
||
RowList::const_iterator const begin = rows_.begin();
|
||
|
||
@@ -1873,11 +1879,3 @@
|
||
}
|
||
}
|
||
|
||
-//void Paragraph::metrics(MetricsInfo & mi, Dimension & dim, LyXText & text)
|
||
-//{
|
||
-//}
|
||
-//
|
||
-//
|
||
-//void draw(PainterInfo & pi, int x, int y, LyXText & text) const
|
||
-//{
|
||
-//}
|
||
Index: src/paragraph.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph.h,v
|
||
retrieving revision 1.146
|
||
diff -u -r1.146 paragraph.h
|
||
--- src/paragraph.h 19 Jan 2005 15:03:29 -0000 1.146
|
||
+++ src/paragraph.h 27 Jan 2005 12:58:12 -0000
|
||
@@ -134,7 +134,7 @@
|
||
lyx::depth_type depth) const;
|
||
|
||
/// Can we drop the standard paragraph wrapper?
|
||
- bool Paragraph::emptyTag() const;
|
||
+ bool emptyTag() const;
|
||
|
||
/// Get the id of the paragraph, usefull for docbook and linuxdoc
|
||
std::string getID(Buffer const & buf,
|
||
@@ -293,7 +293,7 @@
|
||
BOOST_ASSERT(pos < int(text_.size()));
|
||
return text_[pos];
|
||
}
|
||
- ///
|
||
+ /// Get the char, but mirror all bracket characters if it is right-to-left
|
||
value_type getUChar(BufferParams const &, lyx::pos_type pos) const;
|
||
/// The position must already exist.
|
||
void setChar(lyx::pos_type pos, value_type c);
|
||
@@ -326,6 +326,9 @@
|
||
InsetBase * getInset(lyx::pos_type pos);
|
||
///
|
||
InsetBase const * getInset(lyx::pos_type pos) const;
|
||
+ ///
|
||
+ InsetList insetlist;
|
||
+
|
||
|
||
///
|
||
bool isHfill(lyx::pos_type pos) const;
|
||
@@ -344,7 +347,7 @@
|
||
/// returns -1 if inset not found
|
||
int getPositionOfInset(InsetBase const * inset) const;
|
||
|
||
- ///
|
||
+ /// Returns the number of line breaks and white-space stripped at the start
|
||
int stripLeadingSpaces();
|
||
|
||
/// return true if we allow multiple spaces
|
||
@@ -352,7 +355,7 @@
|
||
|
||
/// return true if we allow this par to stay empty
|
||
bool allowEmpty() const;
|
||
- ////
|
||
+ ///
|
||
unsigned char transformChar(unsigned char c, lyx::pos_type pos) const;
|
||
///
|
||
ParagraphParameters & params();
|
||
@@ -366,37 +369,34 @@
|
||
///
|
||
size_t pos2row(lyx::pos_type pos) const;
|
||
|
||
- ///
|
||
- InsetList insetlist;
|
||
-
|
||
/// total height of paragraph
|
||
unsigned int height() const { return dim_.height(); }
|
||
/// total width of paragraph, may differ from workwidth
|
||
unsigned int width() const { return dim_.width(); }
|
||
unsigned int ascent() const { return dim_.ascent(); }
|
||
unsigned int descent() const { return dim_.descent(); }
|
||
- ///
|
||
+ /// LyXText updates the rows using this access point
|
||
RowList & rows() { return rows_; }
|
||
- ///
|
||
+ /// The painter and others use this
|
||
RowList const & rows() const { return rows_; }
|
||
|
||
- // compute paragraph metrics
|
||
- void metrics(MetricsInfo & mi, Dimension & dim, LyXText & text);
|
||
- // draw paragraph
|
||
- void draw(PainterInfo & pi, int x, int y, LyXText & text) const;
|
||
- /// dump some information
|
||
- void dump() const;
|
||
+ /// LyXText::redoParagraph updates this
|
||
+ Dimension & dim() { return dim_; }
|
||
|
||
+ /// dump some information to lyxerr
|
||
+ void dump() const;
|
||
+private:
|
||
/// cached dimensions of paragraph
|
||
Dimension dim_;
|
||
|
||
-private:
|
||
///
|
||
mutable RowList rows_;
|
||
///
|
||
LyXLayout_ptr layout_;
|
||
- /// keeping this here instead of in the pimpl makes LyX >10% faster
|
||
- // for average tasks as buffer loading/switching etc.
|
||
+ /**
|
||
+ * Keeping this here instead of in the pimpl makes LyX >10% faster
|
||
+ * for average tasks as buffer loading/switching etc.
|
||
+ */
|
||
TextContainer text_;
|
||
/// end of label
|
||
lyx::pos_type begin_of_body_;
|
||
@@ -406,7 +406,6 @@
|
||
friend class Paragraph::Pimpl;
|
||
///
|
||
Pimpl * pimpl_;
|
||
-
|
||
};
|
||
|
||
|
||
Index: src/paragraph_funcs.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph_funcs.h,v
|
||
retrieving revision 1.46
|
||
diff -u -r1.46 paragraph_funcs.h
|
||
--- src/paragraph_funcs.h 30 Nov 2004 01:59:36 -0000 1.46
|
||
+++ src/paragraph_funcs.h 27 Jan 2005 13:19:36 -0000
|
||
@@ -21,8 +21,15 @@
|
||
class Paragraph;
|
||
class ParagraphList;
|
||
|
||
-
|
||
-///
|
||
+/**
|
||
+ * This breaks a paragraph at the specified position.
|
||
+ * The new paragraph will:
|
||
+ * get the default layout, when flag == 0
|
||
+ * will inherit the existing one, except for depth, when flag == 1
|
||
+ * will inherit the existing one, including depth, when flag == 2
|
||
+ * Be aware that the old or new paragraph does not contain any rows
|
||
+ * after this.
|
||
+ */
|
||
void breakParagraph(BufferParams const & bparams,
|
||
ParagraphList & paragraphs,
|
||
lyx::pit_type par,
|
||
Index: src/rowpainter.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/rowpainter.C,v
|
||
retrieving revision 1.140
|
||
diff -u -r1.140 rowpainter.C
|
||
--- src/rowpainter.C 18 Jan 2005 14:15:55 -0000 1.140
|
||
+++ src/rowpainter.C 31 Jan 2005 11:59:07 -0000
|
||
@@ -58,7 +58,7 @@
|
||
public:
|
||
/// initialise and run painter
|
||
RowPainter(PainterInfo & pi, LyXText const & text,
|
||
- pit_type pit, Row & row, int x, int y);
|
||
+ pit_type pit, Row const & row, int x, int y);
|
||
|
||
// paint various parts
|
||
void paintAppendix();
|
||
@@ -101,7 +101,7 @@
|
||
ParagraphList & pars_;
|
||
|
||
/// The row to paint
|
||
- Row & row_;
|
||
+ Row const & row_;
|
||
|
||
/// Row's paragraph
|
||
pit_type const pit_;
|
||
@@ -119,7 +119,7 @@
|
||
|
||
|
||
RowPainter::RowPainter(PainterInfo & pi,
|
||
- LyXText const & text, pit_type pit, Row & row, int x, int y)
|
||
+ LyXText const & text, pit_type pit, Row const & row, int x, int y)
|
||
: bv_(*pi.base.bv), pain_(pi.pain), text_(text), pars_(text.paragraphs()),
|
||
row_(row), pit_(pit), par_(text.paragraphs()[pit]),
|
||
xo_(x), yo_(y), width_(text_.width())
|
||
@@ -178,7 +178,7 @@
|
||
PainterInfo pi(const_cast<BufferView *>(&bv_), pain_);
|
||
pi.base.font = getFont(pos);
|
||
pi.ltr_pos = (text_.bidi.level(pos) % 2 == 0);
|
||
- theCoords.insets_.add(inset, int(x_), yo_);
|
||
+ theCoords.insets().add(inset, int(x_), yo_);
|
||
inset->drawSelection(pi, int(x_), yo_);
|
||
inset->draw(pi, int(x_), yo_);
|
||
x_ += inset->width();
|
||
@@ -738,12 +738,12 @@
|
||
|
||
Paragraph & par = text.paragraphs()[pit];
|
||
|
||
- RowList::iterator const rb = par.rows().begin();
|
||
- RowList::iterator const re = par.rows().end();
|
||
- theCoords.pars_[&text][pit] = Point(x, y);
|
||
+ RowList::const_iterator const rb = par.rows().begin();
|
||
+ RowList::const_iterator const re = par.rows().end();
|
||
+ theCoords.parPos()[&text][pit] = Point(x, y);
|
||
|
||
y -= rb->ascent();
|
||
- for (RowList::iterator rit = rb; rit != re; ++rit) {
|
||
+ for (RowList::const_iterator rit = rb; rit != re; ++rit) {
|
||
y += rit->ascent();
|
||
bool const inside = (y + rit->descent() >= 0
|
||
&& y - rit->ascent() < ww);
|
||
@@ -801,12 +801,12 @@
|
||
}
|
||
|
||
// and grey out above (should not happen later)
|
||
- lyxerr << "par ascent: " << text->getPar(vi.p1).ascent() << endl;
|
||
+// lyxerr << "par ascent: " << text->getPar(vi.p1).ascent() << endl;
|
||
if (vi.y1 > 0)
|
||
pain.fillRectangle(0, 0, bv.workWidth(), vi.y1, LColor::bottomarea);
|
||
|
||
// and possibly grey out below
|
||
- lyxerr << "par descent: " << text->getPar(vi.p1).ascent() << endl;
|
||
+// lyxerr << "par descent: " << text->getPar(vi.p1).ascent() << endl;
|
||
if (vi.y2 < bv.workHeight())
|
||
pain.fillRectangle(0, vi.y2, bv.workWidth(), bv.workHeight() - vi.y2, LColor::bottomarea);
|
||
}
|
||
Index: src/text.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v
|
||
retrieving revision 1.592
|
||
diff -u -r1.592 text.C
|
||
--- src/text.C 19 Jan 2005 08:42:32 -0000 1.592
|
||
+++ src/text.C 31 Jan 2005 10:05:42 -0000
|
||
@@ -376,12 +376,6 @@
|
||
} // namespace anon
|
||
|
||
|
||
-BufferView * LyXText::bv()
|
||
-{
|
||
- BOOST_ASSERT(bv_owner != 0);
|
||
- return bv_owner;
|
||
-}
|
||
-
|
||
|
||
BufferView * LyXText::bv() const
|
||
{
|
||
@@ -1017,7 +1011,7 @@
|
||
|
||
}
|
||
|
||
-void LyXText::breakParagraph(LCursor & cur, char keep_layout)
|
||
+void LyXText::breakParagraph(LCursor & cur, bool keep_layout)
|
||
{
|
||
BOOST_ASSERT(this == cur.text());
|
||
// allow only if at start or end, or all previous is new text
|
||
@@ -1045,25 +1039,30 @@
|
||
if (cur.pos() != cur.lastpos() && cpar.isLineSeparator(cur.pos()))
|
||
cpar.erase(cur.pos());
|
||
|
||
- // break the paragraph
|
||
+ // How should the layout for the new paragraph be?
|
||
+ int preserve_layout = 0;
|
||
if (keep_layout)
|
||
- keep_layout = 2;
|
||
+ preserve_layout = 2;
|
||
else
|
||
- keep_layout = layout->isEnvironment();
|
||
+ preserve_layout = layout->isEnvironment();
|
||
+
|
||
+ // We need to remember this before we break the paragraph, because
|
||
+ // that invalidates the layout variable
|
||
+ bool sensitive = layout->labeltype == LABEL_SENSITIVE;
|
||
|
||
- // we need to set this before we insert the paragraph. IMO the
|
||
- // breakParagraph call should return a bool if it inserts the
|
||
- // paragraph before or behind and we should react on that one
|
||
- // but we can fix this in 1.3.0 (Jug 20020509)
|
||
+ // we need to set this before we insert the paragraph.
|
||
bool const isempty = cpar.allowEmpty() && cpar.empty();
|
||
+
|
||
::breakParagraph(cur.buffer().params(), paragraphs(), cpit,
|
||
- cur.pos(), keep_layout);
|
||
+ cur.pos(), preserve_layout);
|
||
+
|
||
+ // After this, neither paragraph contains any rows!
|
||
|
||
cpit = cur.pit();
|
||
pit_type next_par = cpit + 1;
|
||
|
||
// well this is the caption hack since one caption is really enough
|
||
- if (layout->labeltype == LABEL_SENSITIVE) {
|
||
+ if (sensitive) {
|
||
if (cur.pos() == 0)
|
||
// set to standard-layout
|
||
pars_[cpit].applyLayout(tclass.defaultLayout());
|
||
@@ -1072,16 +1071,6 @@
|
||
pars_[next_par].applyLayout(tclass.defaultLayout());
|
||
}
|
||
|
||
- // if the cursor is at the beginning of a row without prior newline,
|
||
- // move one row up!
|
||
- // This touches only the screen-update. Otherwise we would may have
|
||
- // an empty row on the screen
|
||
- if (cur.pos() != 0 && cur.textRow().pos() == cur.pos()
|
||
- && !pars_[cpit].isNewline(cur.pos() - 1))
|
||
- {
|
||
- cursorLeft(cur);
|
||
- }
|
||
-
|
||
while (!pars_[next_par].empty() && pars_[next_par].isNewline(0))
|
||
pars_[next_par].erase(0);
|
||
|
||
@@ -1172,8 +1161,8 @@
|
||
cur.message(_("You cannot insert a space at the "
|
||
"beginning of a paragraph. Please read the Tutorial."));
|
||
sent_space_message = true;
|
||
- return;
|
||
}
|
||
+ return;
|
||
}
|
||
BOOST_ASSERT(cur.pos() > 0);
|
||
if (par.isLineSeparator(cur.pos() - 1)
|
||
@@ -1686,7 +1675,7 @@
|
||
|
||
dim.asc += par.rows()[0].ascent();
|
||
dim.des -= par.rows()[0].ascent();
|
||
- par.dim_ = dim;
|
||
+ par.dim() = dim;
|
||
//lyxerr << "redoParagraph: " << par.rows().size() << " rows\n";
|
||
}
|
||
|
||
Index: src/text2.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text2.C,v
|
||
retrieving revision 1.594
|
||
diff -u -r1.594 text2.C
|
||
--- src/text2.C 6 Jan 2005 16:39:30 -0000 1.594
|
||
+++ src/text2.C 31 Jan 2005 12:01:19 -0000
|
||
@@ -119,7 +119,7 @@
|
||
InsetBase * inset = iit->inset;
|
||
#if 1
|
||
lyxerr << "examining inset " << inset << endl;
|
||
- if (theCoords.insets_.has(inset))
|
||
+ if (theCoords.getInsets().has(inset))
|
||
lyxerr
|
||
<< " xo: " << inset->xo() << "..."
|
||
<< inset->xo() + inset->width()
|
||
@@ -1122,8 +1122,8 @@
|
||
pit_type LyXText::getPitNearY(int y) const
|
||
{
|
||
BOOST_ASSERT(!paragraphs().empty());
|
||
- BOOST_ASSERT(theCoords.pars_.find(this) != theCoords.pars_.end());
|
||
- CoordCache::InnerParPosCache const & cc = theCoords.pars_[this];
|
||
+ BOOST_ASSERT(theCoords.getParPos().find(this) != theCoords.getParPos().end());
|
||
+ CoordCache::InnerParPosCache const & cc = theCoords.getParPos().find(this)->second;
|
||
lyxerr << "LyXText::getPitNearY: y: " << y << " cache size: "
|
||
<< cc.size() << endl;
|
||
|
||
@@ -1282,8 +1282,6 @@
|
||
|
||
void LyXText::cursorDown(LCursor & cur)
|
||
{
|
||
-
|
||
-
|
||
Paragraph const & par = cur.paragraph();
|
||
int const row = par.pos2row(cur.pos());
|
||
int const x = cur.targetX();
|
||
Index: src/text3.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text3.C,v
|
||
retrieving revision 1.280
|
||
diff -u -r1.280 text3.C
|
||
--- src/text3.C 27 Jan 2005 21:05:34 -0000 1.280
|
||
+++ src/text3.C 31 Jan 2005 12:11:17 -0000
|
||
@@ -353,7 +353,7 @@
|
||
void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
|
||
{
|
||
lyxerr[Debug::ACTION] << "LyXText::dispatch: cmd: " << cmd << endl;
|
||
- //lyxerr << "*** LyXText::dispatch: cmd: " << cmd << endl;
|
||
+ lyxerr << "*** LyXText::dispatch: cmd: " << cmd << endl;
|
||
|
||
BOOST_ASSERT(cur.text() == this);
|
||
BufferView * bv = &cur.bv();
|
||
Index: src/client/client.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/client/client.C,v
|
||
retrieving revision 1.7
|
||
diff -u -r1.7 client.C
|
||
--- src/client/client.C 20 Jan 2005 15:38:13 -0000 1.7
|
||
+++ src/client/client.C 21 Jan 2005 09:43:09 -0000
|
||
@@ -25,12 +25,14 @@
|
||
# include <unistd.h>
|
||
#endif
|
||
|
||
+#ifndef _WIN32
|
||
// select()
|
||
-#include <sys/select.h>
|
||
+# include <sys/select.h>
|
||
|
||
// socket(), connect()
|
||
-#include <sys/socket.h>
|
||
-#include <sys/un.h>
|
||
+# include <sys/socket.h>
|
||
+# include <sys/un.h>
|
||
+#endif
|
||
|
||
// fcntl()
|
||
#include <fcntl.h>
|
||
Index: src/frontends/LyXView.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/LyXView.C,v
|
||
retrieving revision 1.49
|
||
diff -u -r1.49 LyXView.C
|
||
--- src/frontends/LyXView.C 20 Jan 2005 15:38:14 -0000 1.49
|
||
+++ src/frontends/LyXView.C 21 Jan 2005 09:43:10 -0000
|
||
@@ -39,7 +39,9 @@
|
||
|
||
#include <boost/bind.hpp>
|
||
|
||
-#include <sys/time.h>
|
||
+#ifndef _WIN32
|
||
+# include <sys/time.h>
|
||
+#endif
|
||
#ifdef HAVE_UNISTD_H
|
||
# include <unistd.h>
|
||
#endif
|
||
Index: src/frontends/qt2/QDialogView.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QDialogView.h,v
|
||
retrieving revision 1.10
|
||
diff -u -r1.10 QDialogView.h
|
||
--- src/frontends/qt2/QDialogView.h 19 May 2004 15:11:33 -0000 1.10
|
||
+++ src/frontends/qt2/QDialogView.h 25 Jan 2005 12:45:06 -0000
|
||
@@ -13,6 +13,7 @@
|
||
#define QDIALOGVIEW_H
|
||
|
||
#include "Dialog.h"
|
||
+
|
||
#include <boost/scoped_ptr.hpp>
|
||
|
||
#include <qapplication.h>
|
||
@@ -110,7 +111,11 @@
|
||
template <class GUIDialog>
|
||
QDialog * QView<GUIDialog>::form() const
|
||
{
|
||
- return dialog_.get();
|
||
+ /* Brain dead MSVC compiler wants to know the class hierarchy at the
|
||
+ definition site of the template, rather than the instantation point
|
||
+ to downcast correctly. So, rather than including all dialogs to
|
||
+ provide that, we just cast it with the ugly hammer. */
|
||
+ return (QDialog *) dialog_.get();
|
||
}
|
||
|
||
|
||
Index: src/frontends/qt2/QLPainter.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QLPainter.C,v
|
||
retrieving revision 1.34
|
||
diff -u -r1.34 QLPainter.C
|
||
--- src/frontends/qt2/QLPainter.C 20 May 2004 09:36:27 -0000 1.34
|
||
+++ src/frontends/qt2/QLPainter.C 31 Jan 2005 12:29:53 -0000
|
||
@@ -202,8 +202,9 @@
|
||
int tmpx = x;
|
||
size_t ls = s.length();
|
||
for (size_t i = 0; i < ls; ++i) {
|
||
- QChar const c = s[i].upper();
|
||
- if (c != s[i]) {
|
||
+ // Brain-dead MSVC wants at(i) rather than operator[]
|
||
+ QChar const c = s.at(i).upper();
|
||
+ if (c != s.at(i)) {
|
||
qp_->setFont(qsmallfont);
|
||
qp_->drawText(tmpx, y, c);
|
||
tmpx += qsmallfontm.width(c);
|
||
@@ -229,7 +230,8 @@
|
||
#if QT_VERSION >= 300
|
||
str.setLength(ls);
|
||
for (size_t i = 0; i < ls; ++i)
|
||
- str[i] = QChar(encoding->ucs(s[i]));
|
||
+ // Brain-dead MSVC wants at(i) rather than operator[]
|
||
+ str.at(i) = QChar(encoding->ucs(s[i]));
|
||
// HACK: QT3 refuses to show single compose characters
|
||
if (ls == 1 && str[0].unicode() >= 0x05b0 && str[0].unicode() <= 0x05c2)
|
||
str = ' ' + str;
|
||
Index: src/frontends/qt2/lengthvalidator.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/lengthvalidator.h,v
|
||
retrieving revision 1.4
|
||
diff -u -r1.4 lengthvalidator.h
|
||
--- src/frontends/qt2/lengthvalidator.h 22 Nov 2004 12:22:19 -0000 1.4
|
||
+++ src/frontends/qt2/lengthvalidator.h 23 Jan 2005 09:47:57 -0000
|
||
@@ -19,7 +19,7 @@
|
||
class QWidget;
|
||
|
||
|
||
-class Q_EXPORT LengthValidator : public QValidator
|
||
+class LengthValidator : public QValidator
|
||
{
|
||
Q_OBJECT
|
||
public:
|
||
Index: src/insets/inset.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/inset.C,v
|
||
retrieving revision 1.131
|
||
diff -u -r1.131 inset.C
|
||
--- src/insets/inset.C 5 Jan 2005 20:21:26 -0000 1.131
|
||
+++ src/insets/inset.C 31 Jan 2005 09:31:42 -0000
|
||
@@ -79,5 +79,5 @@
|
||
void InsetOld::setPosCache(PainterInfo const &, int x, int y) const
|
||
{
|
||
//lyxerr << "InsetOld:: position cache to " << x << " " << y << std::endl;
|
||
- theCoords.insets_.add(this, x, y);
|
||
+ theCoords.insets().add(this, x, y);
|
||
}
|
||
Index: src/insets/insetbase.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetbase.C,v
|
||
retrieving revision 1.39
|
||
diff -u -r1.39 insetbase.C
|
||
--- src/insets/insetbase.C 19 Jan 2005 15:03:30 -0000 1.39
|
||
+++ src/insets/insetbase.C 31 Jan 2005 12:01:20 -0000
|
||
@@ -293,13 +293,13 @@
|
||
|
||
int InsetBase::xo() const
|
||
{
|
||
- return theCoords.insets_.x(this);
|
||
+ return theCoords.getInsets().x(this);
|
||
}
|
||
|
||
|
||
int InsetBase::yo() const
|
||
{
|
||
- return theCoords.insets_.y(this);
|
||
+ return theCoords.getInsets().y(this);
|
||
}
|
||
|
||
|
||
@@ -310,7 +310,7 @@
|
||
// << " x1: " << xo() << " x2: " << xo() + width()
|
||
// << " y1: " << yo() - ascent() << " y2: " << yo() + descent()
|
||
// << std::endl;
|
||
- return theCoords.insets_.has(this)
|
||
+ return theCoords.getInsets().has(this)
|
||
&& x >= xo()
|
||
&& x <= xo() + width()
|
||
&& y >= yo() - ascent()
|
||
Index: src/insets/insettabular.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettabular.C,v
|
||
retrieving revision 1.452
|
||
diff -u -r1.452 insettabular.C
|
||
--- src/insets/insettabular.C 27 Jan 2005 21:05:42 -0000 1.452
|
||
+++ src/insets/insettabular.C 31 Jan 2005 12:01:20 -0000
|
||
@@ -1024,7 +1024,7 @@
|
||
{
|
||
int xx = 0;
|
||
int yy = 0;
|
||
- Point o = theCoords.insets_.xy(&inset);
|
||
+ Point o = theCoords.getInsets().xy(&inset);
|
||
int const xo = o.x_;
|
||
int const yo = o.y_;
|
||
|
||
@@ -1055,7 +1055,7 @@
|
||
idx_type idx_min = 0;
|
||
int dist_min = std::numeric_limits<int>::max();
|
||
for (idx_type i = 0; i < nargs(); ++i) {
|
||
- if (theCoords.insets_.has(tabular.getCellInset(i).get())) {
|
||
+ if (theCoords.getInsets().has(tabular.getCellInset(i).get())) {
|
||
int d = dist(*tabular.getCellInset(i), x, y);
|
||
if (d < dist_min) {
|
||
dist_min = d;
|
||
Index: src/insets/updatableinset.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/updatableinset.C,v
|
||
retrieving revision 1.50
|
||
diff -u -r1.50 updatableinset.C
|
||
--- src/insets/updatableinset.C 27 Jan 2005 21:05:43 -0000 1.50
|
||
+++ src/insets/updatableinset.C 31 Jan 2005 12:01:20 -0000
|
||
@@ -43,7 +43,7 @@
|
||
}
|
||
|
||
int const workW = bv.workWidth();
|
||
- int xo_ = theCoords.insets_.x(this);
|
||
+ int xo_ = theCoords.getInsets().x(this);
|
||
int const tmp_xo_ = xo_ - scx;
|
||
|
||
if (tmp_xo_ > 0 && tmp_xo_ + width() < workW)
|
||
@@ -63,7 +63,7 @@
|
||
|
||
void UpdatableInset::scroll(BufferView & bv, int offset) const
|
||
{
|
||
- int const xo_ = theCoords.insets_.x(this);
|
||
+ int const xo_ = theCoords.getInsets().x(this);
|
||
if (offset > 0) {
|
||
if (!scx && xo_ >= 20)
|
||
return;
|
||
Index: src/mathed/math_data.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/math_data.C,v
|
||
retrieving revision 1.59
|
||
diff -u -r1.59 math_data.C
|
||
--- src/mathed/math_data.C 5 Jan 2005 20:21:27 -0000 1.59
|
||
+++ src/mathed/math_data.C 31 Jan 2005 12:01:19 -0000
|
||
@@ -411,17 +411,17 @@
|
||
void MathArray::setXY(int x, int y) const
|
||
{
|
||
//lyxerr << "setting position cache for MathArray " << this << std::endl;
|
||
- theCoords.arrays_.add(this, x, y);
|
||
+ theCoords.arrays().add(this, x, y);
|
||
}
|
||
|
||
|
||
int MathArray::xo() const
|
||
{
|
||
- return theCoords.arrays_.x(this);
|
||
+ return theCoords.getArrays().x(this);
|
||
}
|
||
|
||
|
||
int MathArray::yo() const
|
||
{
|
||
- return theCoords.arrays_.y(this);
|
||
+ return theCoords.getArrays().y(this);
|
||
}
|
||
Index: src/mathed/math_diminset.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/math_diminset.C,v
|
||
retrieving revision 1.23
|
||
diff -u -r1.23 math_diminset.C
|
||
--- src/mathed/math_diminset.C 14 Aug 2004 14:03:42 -0000 1.23
|
||
+++ src/mathed/math_diminset.C 31 Jan 2005 09:31:42 -0000
|
||
@@ -40,5 +40,5 @@
|
||
void MathDimInset::setPosCache(PainterInfo const &, int x, int y) const
|
||
{
|
||
//lyxerr << "MathDimInset: cache to " << x << " " << y << std::endl;
|
||
- theCoords.insets_.add(this, x, y);
|
||
+ theCoords.insets().add(this, x, y);
|
||
}
|
||
Index: src/mathed/math_nestinset.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/math_nestinset.C,v
|
||
retrieving revision 1.143
|
||
diff -u -r1.143 math_nestinset.C
|
||
--- src/mathed/math_nestinset.C 6 Jan 2005 16:07:01 -0000 1.143
|
||
+++ src/mathed/math_nestinset.C 31 Jan 2005 12:01:19 -0000
|
||
@@ -110,23 +110,23 @@
|
||
// absolute again when actually drawing the cursor. What a mess.
|
||
BOOST_ASSERT(ptr_cmp(&sl.inset(), this));
|
||
MathArray const & ar = sl.cell();
|
||
- if (!theCoords.arrays_.has(&ar)) {
|
||
- // this can (semi-)legally happen if we jsut created this cell
|
||
+ if (!theCoords.getArrays().has(&ar)) {
|
||
+ // this can (semi-)legally happen if we just created this cell
|
||
// and it never has been drawn before. So don't ASSERT.
|
||
//lyxerr << "no cached data for array " << &ar << endl;
|
||
x = 0;
|
||
y = 0;
|
||
return;
|
||
}
|
||
- Point const pt = theCoords.arrays_.xy(&ar);
|
||
- if (!theCoords.insets_.has(this)) {
|
||
+ Point const pt = theCoords.getArrays().xy(&ar);
|
||
+ if (!theCoords.getInsets().has(this)) {
|
||
// same as above
|
||
//lyxerr << "no cached data for inset " << this << endl;
|
||
x = 0;
|
||
y = 0;
|
||
return;
|
||
}
|
||
- Point const pt2 = theCoords.insets_.xy(this);
|
||
+ Point const pt2 = theCoords.getInsets().xy(this);
|
||
//lyxerr << "retrieving position cache for MathArray "
|
||
// << pt.x_ << ' ' << pt.y_ << std::endl;
|
||
x = pt.x_ - pt2.x_ + ar.pos2x(sl.pos());
|
||
Index: src/support/chdir.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/chdir.C,v
|
||
retrieving revision 1.10
|
||
diff -u -r1.10 chdir.C
|
||
--- src/support/chdir.C 20 Jan 2005 15:38:14 -0000 1.10
|
||
+++ src/support/chdir.C 25 Jan 2005 12:47:15 -0000
|
||
@@ -16,11 +16,17 @@
|
||
# include <unistd.h>
|
||
#endif
|
||
|
||
+#ifdef _WIN32
|
||
+# include <windows.h>
|
||
+#endif
|
||
+
|
||
int lyx::support::chdir(std::string const & name)
|
||
{
|
||
-#ifndef __EMX__
|
||
- return ::chdir(name.c_str());
|
||
-#else
|
||
+#ifdef __EMX__
|
||
return ::_chdir2(name.c_str());
|
||
+#elif defined(_WIN32)
|
||
+ return SetCurrentDirectory(name.c_str()) != 0 ? 0 : -1;
|
||
+#else
|
||
+ return ::chdir(name.c_str());
|
||
#endif
|
||
}
|
||
Index: src/support/filetools.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/filetools.C,v
|
||
retrieving revision 1.204
|
||
diff -u -r1.204 filetools.C
|
||
--- src/support/filetools.C 31 Jan 2005 10:42:23 -0000 1.204
|
||
+++ src/support/filetools.C 31 Jan 2005 11:08:10 -0000
|
||
@@ -1153,6 +1153,11 @@
|
||
|
||
cmd_ret const RunCommand(string const & cmd)
|
||
{
|
||
+#ifdef _WIN32
|
||
+ // TODO: Implement this, or merge it into forkedcall.
|
||
+ // Used for lyx2lyx in buffer.C, echo in math_extern and kpse in this file
|
||
+ return make_pair(-1, string());
|
||
+#else
|
||
// FIXME: replace all calls to RunCommand with ForkedCall
|
||
// (if the output is not needed) or the code in ispell.C
|
||
// (if the output is needed).
|
||
@@ -1193,6 +1198,7 @@
|
||
sigprocmask(SIG_SETMASK, &oldMask, 0);
|
||
|
||
return make_pair(pret, ret);
|
||
+#endif
|
||
}
|
||
|
||
|
||
Index: src/support/forkedcall.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcall.C,v
|
||
retrieving revision 1.21
|
||
diff -u -r1.21 forkedcall.C
|
||
--- src/support/forkedcall.C 20 Jan 2005 15:38:14 -0000 1.21
|
||
+++ src/support/forkedcall.C 25 Jan 2005 12:41:14 -0000
|
||
@@ -30,6 +30,10 @@
|
||
#include "support/lyxlib.h"
|
||
#include "support/filetools.h"
|
||
#include "support/os.h"
|
||
+#ifdef _WIN32
|
||
+#include "os_win32.h"
|
||
+#include <process.h>
|
||
+#endif
|
||
|
||
#include "debug.h"
|
||
|
||
@@ -41,7 +45,9 @@
|
||
#include <csignal>
|
||
#include <cstdlib>
|
||
#include <sys/types.h>
|
||
-#include <sys/wait.h>
|
||
+#ifndef _WIN32
|
||
+# include <sys/wait.h>
|
||
+#endif
|
||
#ifdef HAVE_UNISTD_H
|
||
# include <unistd.h>
|
||
#endif
|
||
@@ -70,7 +76,9 @@
|
||
if (secs > 0) {
|
||
new Murder(secs, pid);
|
||
} else if (pid != 0) {
|
||
+#ifdef SIGKILL
|
||
lyx::support::kill(pid, SIGKILL);
|
||
+#endif
|
||
}
|
||
}
|
||
|
||
@@ -78,7 +86,9 @@
|
||
void kill()
|
||
{
|
||
if (pid_ != 0) {
|
||
+#ifdef SIGKILL
|
||
lyx::support::kill(pid_, SIGKILL);
|
||
+#endif
|
||
}
|
||
lyxerr << "Killed " << pid_ << std::endl;
|
||
delete this;
|
||
@@ -152,14 +162,16 @@
|
||
if (!pid())
|
||
return false;
|
||
|
||
+#ifndef _WIN32
|
||
// Un-UNIX like, but we don't have much use for
|
||
// knowing if a zombie exists, so just reap it first.
|
||
int waitstatus;
|
||
waitpid(pid(), &waitstatus, WNOHANG);
|
||
|
||
// Racy of course, but it will do.
|
||
- if (::kill(pid(), 0) && errno == ESRCH)
|
||
+ if (lyx::kill(pid(), 0) && errno == ESRCH)
|
||
return false;
|
||
+#endif
|
||
return true;
|
||
}
|
||
|
||
@@ -178,6 +190,7 @@
|
||
Murder::killItDead(0, pid());
|
||
|
||
} else {
|
||
+#ifdef SIGHUP
|
||
int ret = lyx::support::kill(pid(), SIGHUP);
|
||
|
||
// The process is already dead if wait_for_death is false
|
||
@@ -186,6 +199,7 @@
|
||
if (wait_for_death) {
|
||
Murder::killItDead(tolerance, pid());
|
||
}
|
||
+#endif
|
||
}
|
||
}
|
||
|
||
@@ -195,6 +209,7 @@
|
||
{
|
||
// We'll pretend that the child returns 1 on all error conditions.
|
||
retval_ = 1;
|
||
+#ifndef _WIN32
|
||
int status;
|
||
bool wait = true;
|
||
while (wait) {
|
||
@@ -223,6 +238,7 @@
|
||
wait = false;
|
||
}
|
||
}
|
||
+#endif
|
||
return retval_;
|
||
}
|
||
|
||
@@ -299,7 +315,12 @@
|
||
std::cout << *ait << std::endl;
|
||
argv.push_back(0);
|
||
|
||
-#ifndef __EMX__
|
||
+#ifdef __EMX
|
||
+ pid_t const cpid = spawnvp(P_SESSION|P_DEFAULT|P_MINIMIZE|P_BACKGROUND,
|
||
+ argv[0], &*argv.begin());
|
||
+#elif defined(_WIN32)
|
||
+ pid_t const cpid = spawnvp(_P_NOWAIT, argv[0], &*argv.begin());
|
||
+#else
|
||
pid_t const cpid = ::fork();
|
||
if (cpid == 0) {
|
||
// Child
|
||
@@ -310,9 +331,6 @@
|
||
<< strerror(errno) << endl;
|
||
_exit(1);
|
||
}
|
||
-#else
|
||
- pid_t const cpid = spawnvp(P_SESSION|P_DEFAULT|P_MINIMIZE|P_BACKGROUND,
|
||
- argv[0], &*argv.begin());
|
||
#endif
|
||
|
||
if (cpid < 0) {
|
||
Index: src/support/forkedcall.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcall.h,v
|
||
retrieving revision 1.19
|
||
diff -u -r1.19 forkedcall.h
|
||
--- src/support/forkedcall.h 26 Sep 2004 14:19:47 -0000 1.19
|
||
+++ src/support/forkedcall.h 17 Jan 2005 12:17:09 -0000
|
||
@@ -31,6 +31,10 @@
|
||
|
||
#include <sys/types.h>
|
||
|
||
+#ifdef _WIN32
|
||
+typedef int pid_t;
|
||
+#endif
|
||
+
|
||
namespace lyx {
|
||
namespace support {
|
||
|
||
Index: src/support/forkedcontr.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcontr.C,v
|
||
retrieving revision 1.27
|
||
diff -u -r1.27 forkedcontr.C
|
||
--- src/support/forkedcontr.C 20 Jan 2005 15:38:14 -0000 1.27
|
||
+++ src/support/forkedcontr.C 21 Jan 2005 09:51:07 -0000
|
||
@@ -19,14 +19,22 @@
|
||
|
||
#include "debug.h"
|
||
|
||
+#ifdef _WIN32
|
||
+#include "os_win32.h"
|
||
+#include <windows.h>
|
||
+#endif
|
||
+
|
||
#include <boost/bind.hpp>
|
||
|
||
#include <cerrno>
|
||
#include <cstdlib>
|
||
+
|
||
#ifdef HAVE_UNISTD_H
|
||
# include <unistd.h>
|
||
#endif
|
||
-#include <sys/wait.h>
|
||
+#ifndef _WIN32
|
||
+# include <sys/wait.h>
|
||
+#endif
|
||
|
||
using boost::bind;
|
||
|
||
@@ -176,7 +184,9 @@
|
||
ForkedcallsController::Data & store =
|
||
fcc.reaped_children[++fcc.current_child];
|
||
// Clean up the child process.
|
||
+#ifndef _WIN32
|
||
store.pid = wait(&store.status);
|
||
+#endif
|
||
}
|
||
|
||
} // namespace anon
|
||
@@ -193,11 +203,12 @@
|
||
ForkedcallsController::ForkedcallsController()
|
||
: reaped_children(50), current_child(-1)
|
||
{
|
||
+#ifndef _WIN32
|
||
signal(SIGCHLD, child_handler);
|
||
-
|
||
sigemptyset(&oldMask);
|
||
sigemptyset(&newMask);
|
||
sigaddset(&newMask, SIGCHLD);
|
||
+#endif
|
||
}
|
||
|
||
|
||
@@ -206,7 +217,9 @@
|
||
// I want to print or something.
|
||
ForkedcallsController::~ForkedcallsController()
|
||
{
|
||
+#ifndef _WIN32
|
||
signal(SIGCHLD, SIG_DFL);
|
||
+#endif
|
||
}
|
||
|
||
|
||
@@ -215,6 +228,7 @@
|
||
forkedCalls.push_back(newcall.clone());
|
||
|
||
if (forkedCalls.size() > reaped_children.size()) {
|
||
+#ifndef _WIN32
|
||
// Block the SIGCHLD signal.
|
||
sigprocmask(SIG_BLOCK, &newMask, &oldMask);
|
||
|
||
@@ -222,6 +236,7 @@
|
||
|
||
// Unblock the SIGCHLD signal and restore the old mask.
|
||
sigprocmask(SIG_SETMASK, &oldMask, 0);
|
||
+#endif
|
||
}
|
||
}
|
||
|
||
@@ -255,8 +270,10 @@
|
||
if (current_child == -1)
|
||
return;
|
||
|
||
+#ifndef _WIN32
|
||
// Block the SIGCHLD signal.
|
||
sigprocmask(SIG_BLOCK, &newMask, &oldMask);
|
||
+#endif
|
||
|
||
for (int i = 0; i != 1 + current_child; ++i) {
|
||
Data & store = reaped_children[i];
|
||
@@ -312,8 +329,10 @@
|
||
// Reset the counter
|
||
current_child = -1;
|
||
|
||
+#ifndef _WIN32
|
||
// Unblock the SIGCHLD signal and restore the old mask.
|
||
sigprocmask(SIG_SETMASK, &oldMask, 0);
|
||
+#endif
|
||
}
|
||
|
||
} // namespace support
|
||
Index: src/support/forkedcontr.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcontr.h,v
|
||
retrieving revision 1.18
|
||
diff -u -r1.18 forkedcontr.h
|
||
--- src/support/forkedcontr.h 7 Nov 2004 13:22:51 -0000 1.18
|
||
+++ src/support/forkedcontr.h 23 Jan 2005 12:25:33 -0000
|
||
@@ -19,7 +19,10 @@
|
||
#include <boost/shared_ptr.hpp>
|
||
|
||
#include <csignal>
|
||
-//#include <sys/types.h> // needed for pid_t
|
||
+#ifdef _WIN32
|
||
+typedef int pid_t;
|
||
+#endif
|
||
+#include <sys/types.h> // needed for pid_t
|
||
#include <list>
|
||
#include <vector>
|
||
|
||
@@ -79,8 +82,10 @@
|
||
/// The child processes
|
||
ListType forkedCalls;
|
||
|
||
+#ifndef _WIN32
|
||
/// Used to block SIGCHLD signals.
|
||
sigset_t newMask, oldMask;
|
||
+#endif
|
||
};
|
||
|
||
} // namespace support
|
||
Index: src/support/fs_extras.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/fs_extras.C,v
|
||
retrieving revision 1.1
|
||
diff -u -r1.1 fs_extras.C
|
||
--- src/support/fs_extras.C 31 Jan 2005 10:42:24 -0000 1.1
|
||
+++ src/support/fs_extras.C 31 Jan 2005 11:31:39 -0000
|
||
@@ -22,6 +22,10 @@
|
||
# endif
|
||
# endif
|
||
|
||
+#ifdef BOOST_WINDOWS
|
||
+# include <windows.h>
|
||
+#endif
|
||
+
|
||
namespace fs = boost::filesystem;
|
||
|
||
namespace boost {
|
||
@@ -32,6 +36,12 @@
|
||
#ifdef BOOST_POSIX
|
||
return ::access(ph.string().c_str(), R_OK) == 0;
|
||
#endif
|
||
+#ifdef BOOST_WINDOWS
|
||
+ DWORD const attr = ::GetFileAttributes( ph.string().c_str() );
|
||
+ return attr != INVALID_FILE_ATTRIBUTES &&
|
||
+ ( attr & FILE_ATTRIBUTE_DIRECTORY ) != FILE_ATTRIBUTE_DIRECTORY;
|
||
+
|
||
+#endif
|
||
}
|
||
|
||
|
||
@@ -40,14 +50,21 @@
|
||
#ifdef BOOST_POSIX
|
||
return ::access(ph.string().c_str(), W_OK) == 0;
|
||
#endif
|
||
+#ifdef BOOST_WINDOWS
|
||
+ DWORD const attr = ::GetFileAttributes( ph.string().c_str() );
|
||
+ if (attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_READONLY) != 0) {
|
||
+ // Read-only - no write access
|
||
+ return false;
|
||
+ }
|
||
+ return attr != INVALID_FILE_ATTRIBUTES &&
|
||
+ ( attr & FILE_ATTRIBUTE_DIRECTORY ) != FILE_ATTRIBUTE_DIRECTORY;
|
||
+#endif
|
||
}
|
||
|
||
|
||
bool is_readonly(path const & ph)
|
||
{
|
||
-#ifdef BOOST_POSIX
|
||
return is_readable(ph) && !is_writable(ph);
|
||
-#endif
|
||
}
|
||
|
||
|
||
@@ -115,6 +132,16 @@
|
||
"boost::filesystem::copy_file",
|
||
source, target,
|
||
fs::detail::system_error_code()));
|
||
+#endif
|
||
+
|
||
+#ifdef BOOST_WINDOWS
|
||
+ if (::CopyFile(source.string().c_str(), target.string().c_str(), FALSE) == 0) {
|
||
+ boost::throw_exception(
|
||
+ filesystem_error(
|
||
+ "boost::filesystem::copy_file",
|
||
+ source, target,
|
||
+ fs::detail::system_error_code()));
|
||
+ }
|
||
#endif
|
||
}
|
||
|
||
Index: src/support/getcwd.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/getcwd.C,v
|
||
retrieving revision 1.12
|
||
diff -u -r1.12 getcwd.C
|
||
--- src/support/getcwd.C 20 Jan 2005 15:38:14 -0000 1.12
|
||
+++ src/support/getcwd.C 21 Jan 2005 09:50:41 -0000
|
||
@@ -19,6 +19,10 @@
|
||
# include <unistd.h>
|
||
#endif
|
||
|
||
+#ifdef _WIN32
|
||
+# include <windows.h>
|
||
+#endif
|
||
+
|
||
using boost::scoped_array;
|
||
|
||
using std::string;
|
||
@@ -29,10 +33,13 @@
|
||
inline
|
||
char * l_getcwd(char * buffer, size_t size)
|
||
{
|
||
-#ifndef __EMX__
|
||
- return ::getcwd(buffer, size);
|
||
-#else
|
||
+#ifdef __EMX
|
||
return ::_getcwd2(buffer, size);
|
||
+#elif defined(_WIN32)
|
||
+ GetCurrentDirectory(size, buffer);
|
||
+ return buffer;
|
||
+#else
|
||
+ return ::getcwd(buffer, size);
|
||
#endif
|
||
}
|
||
|
||
Index: src/support/kill.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/kill.C,v
|
||
retrieving revision 1.12
|
||
diff -u -r1.12 kill.C
|
||
--- src/support/kill.C 7 Nov 2004 13:22:51 -0000 1.12
|
||
+++ src/support/kill.C 20 Jan 2005 11:46:47 -0000
|
||
@@ -15,7 +15,38 @@
|
||
#include <sys/types.h>
|
||
#include <csignal>
|
||
|
||
+#ifdef _WIN32
|
||
+#include "debug.h"
|
||
+#include "os.h"
|
||
+
|
||
+#include <windows.h>
|
||
+#include <errno.h>
|
||
+
|
||
+using std::endl;
|
||
+#endif //_WIN32
|
||
+
|
||
int lyx::support::kill(int pid, int sig)
|
||
{
|
||
+#ifdef _WIN32
|
||
+ if (pid == (int)GetCurrentProcessId()) {
|
||
+ return -(raise(sig));
|
||
+ } else {
|
||
+ HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid);
|
||
+ if (!hProcess) {
|
||
+ lyxerr << "kill OpenProcess failed!" << endl;
|
||
+ return -1;
|
||
+ } else {
|
||
+ if (!TerminateProcess(hProcess, sig)){
|
||
+ lyxerr << "kill process failed!" << endl;
|
||
+ CloseHandle(hProcess);
|
||
+ return -1;
|
||
+ }
|
||
+ CloseHandle(hProcess);
|
||
+ }
|
||
+ }
|
||
+ return 0;
|
||
+
|
||
+#else
|
||
return ::kill(pid, sig);
|
||
+#endif
|
||
}
|
||
Index: src/support/mkdir.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/mkdir.C,v
|
||
retrieving revision 1.16
|
||
diff -u -r1.16 mkdir.C
|
||
--- src/support/mkdir.C 20 Jan 2005 15:38:14 -0000 1.16
|
||
+++ src/support/mkdir.C 25 Jan 2005 12:52:02 -0000
|
||
@@ -18,6 +18,9 @@
|
||
#ifdef HAVE_UNISTD_H
|
||
# include <unistd.h>
|
||
#endif
|
||
+#ifdef _WIN32
|
||
+# include <Windows.h>
|
||
+#endif
|
||
|
||
int lyx::support::mkdir(std::string const & pathname, unsigned long int mode)
|
||
{
|
||
@@ -30,12 +33,12 @@
|
||
// POSIX
|
||
return ::mkdir(pathname.c_str(), mode_t(mode));
|
||
# endif
|
||
-#else
|
||
-# if HAVE__MKDIR
|
||
+#elif defined(_WIN32)
|
||
// plain Windows 32
|
||
- return ::_mkdir(pathname.c_str());
|
||
-# else
|
||
-# error "Don't know how to create a directory on this system."
|
||
-# endif
|
||
+ return CreateDirectory(pathname.c_str(), 0) != 0 ? 0 : -1;
|
||
+#elif HAVE__MKDIR
|
||
+ return ::_mkdir(pathname.c_str());
|
||
+#else
|
||
+# error "Don't know how to create a directory on this system."
|
||
#endif
|
||
}
|
||
Index: src/support/os_win32.h
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/os_win32.h,v
|
||
retrieving revision 1.1
|
||
diff -u -r1.1 os_win32.h
|
||
--- src/support/os_win32.h 22 Jan 2005 15:36:53 -0000 1.1
|
||
+++ src/support/os_win32.h 25 Jan 2005 12:40:09 -0000
|
||
@@ -65,16 +65,6 @@
|
||
#define O_NONBLOCK 0x4000
|
||
inline int fcntl (int, int, ...) {return -1;}
|
||
|
||
-//signal.h
|
||
-#define SIGHUP 1
|
||
-#define SIGKILL 9
|
||
-
|
||
-//sys/time.h
|
||
-//struct timeval {
|
||
-// long tv_sec;
|
||
-// long tv_usec;
|
||
-//};
|
||
-
|
||
//unistd.h
|
||
inline int fork () {return -1;}
|
||
#define pipe(a) _pipe(a,0,0)
|
||
Index: src/support/rmdir.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/rmdir.C,v
|
||
retrieving revision 1.8
|
||
diff -u -r1.8 rmdir.C
|
||
--- src/support/rmdir.C 20 Jan 2005 15:38:14 -0000 1.8
|
||
+++ src/support/rmdir.C 25 Jan 2005 12:13:39 -0000
|
||
@@ -16,7 +16,15 @@
|
||
# include <unistd.h>
|
||
#endif
|
||
|
||
+#ifdef _WIN32
|
||
+# include <windows.h>
|
||
+#endif
|
||
+
|
||
int lyx::support::rmdir(std::string const & dir)
|
||
{
|
||
- return ::rmdir(dir.c_str());
|
||
+#ifdef _WIN32
|
||
+ return ::RemoveDirectory(dir.c_str()) != 0 ? 0 : -1;
|
||
+#else
|
||
+ return :rmdir(dir.c_str());
|
||
+#endif
|
||
}
|
||
Index: src/support/socktools.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/socktools.C,v
|
||
retrieving revision 1.6
|
||
diff -u -r1.6 socktools.C
|
||
--- src/support/socktools.C 20 Jan 2005 15:38:14 -0000 1.6
|
||
+++ src/support/socktools.C 21 Jan 2005 09:43:42 -0000
|
||
@@ -15,8 +15,10 @@
|
||
|
||
#include "debug.h"
|
||
|
||
+#ifndef _WIN32
|
||
#include <sys/socket.h>
|
||
#include <sys/un.h>
|
||
+#endif
|
||
#include <fcntl.h>
|
||
#ifdef HAVE_UNISTD_H
|
||
# include <unistd.h>
|
||
@@ -48,6 +50,7 @@
|
||
// special file 'name' will be created in the filesystem.
|
||
int listen(string const & name, int queue)
|
||
{
|
||
+#ifndef _WIN32
|
||
int fd; // File descriptor for the socket
|
||
sockaddr_un addr; // Structure that hold the socket address
|
||
|
||
@@ -105,14 +108,17 @@
|
||
lyx::support::unlink(name);
|
||
return -1;
|
||
}
|
||
-
|
||
return fd;
|
||
+#else
|
||
+ return -1;
|
||
+#endif
|
||
}
|
||
|
||
// Returns a file descriptor for a new connection from the socket
|
||
// descriptor 'sd' (or -1 in case of error)
|
||
int accept(int sd)
|
||
{
|
||
+#ifndef _WIN32
|
||
int fd;
|
||
|
||
// Returns the new file descriptor or -1 in case of error
|
||
@@ -132,6 +138,9 @@
|
||
return -1;
|
||
}
|
||
return fd;
|
||
+#else
|
||
+ return -1;
|
||
+#endif
|
||
}
|
||
|
||
} // namespace socktools
|
||
Index: src/support/tempname.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/tempname.C,v
|
||
retrieving revision 1.25
|
||
diff -u -r1.25 tempname.C
|
||
--- src/support/tempname.C 20 Jan 2005 15:38:14 -0000 1.25
|
||
+++ src/support/tempname.C 24 Jan 2005 07:51:08 -0000
|
||
@@ -30,6 +30,10 @@
|
||
# include <sys/stat.h>
|
||
#endif
|
||
|
||
+#ifdef _WIN32
|
||
+# include <io.h>
|
||
+#endif
|
||
+
|
||
using boost::scoped_array;
|
||
|
||
using std::string;
|
||
@@ -42,6 +46,9 @@
|
||
{
|
||
#if defined(HAVE_MKSTEMP)
|
||
return ::mkstemp(templ);
|
||
+#elif defined(_WIN32)
|
||
+ ::_mktemp(templ);
|
||
+ return (int) ::fopen(templ, "w");
|
||
#elif defined(HAVE_MKTEMP)
|
||
// This probably just barely works...
|
||
::mktemp(templ);
|
||
@@ -58,7 +65,9 @@
|
||
{
|
||
string const tmpdir(dir.empty() ? package().temp_dir() : dir);
|
||
string tmpfl(AddName(tmpdir, mask));
|
||
+#ifndef _WIN32
|
||
tmpfl += convert<string>(getpid());
|
||
+#endif
|
||
tmpfl += "XXXXXX";
|
||
|
||
// The supposedly safe mkstemp version
|
||
@@ -69,7 +78,11 @@
|
||
int const tmpf = make_tempfile(tmpl.get());
|
||
if (tmpf != -1) {
|
||
string const t(tmpl.get());
|
||
+#ifdef _WIN32
|
||
+ ::fclose((FILE *) tmpf);
|
||
+#else
|
||
::close(tmpf);
|
||
+#endif
|
||
lyxerr[Debug::FILES] << "Temporary file `" << t
|
||
<< "' created." << endl;
|
||
return t;
|
||
Index: src/support/userinfo.C
|
||
===================================================================
|
||
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/userinfo.C,v
|
||
retrieving revision 1.9
|
||
diff -u -r1.9 userinfo.C
|
||
--- src/support/userinfo.C 20 Jan 2005 15:38:14 -0000 1.9
|
||
+++ src/support/userinfo.C 21 Jan 2005 09:43:42 -0000
|
||
@@ -15,7 +15,9 @@
|
||
|
||
#include <boost/assert.hpp>
|
||
|
||
-#include <pwd.h>
|
||
+#ifndef _WIN32
|
||
+# include <pwd.h>
|
||
+#endif
|
||
#ifdef HAVE_UNISTD_H
|
||
# include <unistd.h>
|
||
#endif
|
||
@@ -28,6 +30,7 @@
|
||
|
||
string const user_name()
|
||
{
|
||
+#ifndef _WIN32
|
||
struct passwd * pw(getpwuid(geteuid()));
|
||
BOOST_ASSERT(pw);
|
||
|
||
@@ -35,6 +38,9 @@
|
||
if (name.empty())
|
||
name = pw->pw_name;
|
||
return name;
|
||
+#else
|
||
+ return "dummy";
|
||
+#endif
|
||
}
|
||
|
||
|