+2002-01-05 Kayvan A. Sylvan <kayvan@sylvan.com>
+
+ * examples/noweb2lyx.lyx: Updated for lyx-1.2.0. Also got rid of
+ a harmless noweb error.
+
2002-01-04 Jürgen Spitzmüller <j.spitzmueller@gmx.de>
* ui/default.ui: added dots "..." to insert->include file.
-#This file was created by <kayvan> Sun May 2 15:56:35 1999
-#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
-\lyxformat 2.15
+#LyX 1.2 created this file. For more info see http://www.lyx.org/
+\lyxformat 220
\textclass literate-article
\begin_preamble
%
\paperpackage a4
\use_geometry 0
\use_amsmath 0
+\use_natbib 0
+\use_numerical_citations 0
\paperorientation portrait
\secnumdepth 3
\tocdepth 3
# Copyright (C) 1999 Kayvan A.
Sylvan <kayvan@sylvan.com>
\newline
-#
-\protected_separator
-You are free to use and modify this code under the terms of
+# You are free to use and modify this code under the terms of
\newline
# the GNU General Public Licence version 2 or later.
\newline
#
\newline
-#
-\protected_separator
-Written with assistance from:
+# Written with assistance from:
\newline
-#
-\protected_separator
- Edmar Wienskoski Jr.
+# Edmar Wienskoski Jr.
<edmar-w-jr@technologist.com>
\newline
-#
-\protected_separator
- Amir Karger <karger@post.harvard.edu>
+# Amir Karger <karger@post.harvard.edu>
\newline
#
\newline
-# $Id: noweb2lyx.lyx,v 1.2 2000/11/03 11:21:36 lasgouttes Exp $
+# $Id: noweb2lyx.lyx,v 1.3 2002/01/07 10:17:42 lasgouttes Exp $
\newline
#
\newline
Code chunks look like this:
\layout LyX-Code
-<<Name of chunk here>>=
+<
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+{}
+\end_inset
+
+<Name of chunk here>
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+{}
+\end_inset
+
+>=
\newline
{...
code for the chunk goes here ...}
The other form that the ``@'' line takes is as follows:
\layout LyX-Code
-<<Name of chunk here>>=
+<
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+{}
+\end_inset
+
+<Name of chunk here>
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
+{}
+\end_inset
+
+>=
\newline
{...
code for the chunk ...}
\noun default
code chunks.
This proved to be too hard and presents other problems
-\begin_float footnote
+\begin_inset Foot
+collapsed true
+
\layout Standard
Not the least of these problems is the fact that << is a quote in French.
-\end_float
+\end_inset
+
.
On the other hand, it turns out that reLyX contains a very useful literal
quoting mechanism.
We want to be able to run it as a simple pre-processor and post-processor
from within reLyX.
We can accomplish this by setting the flags
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[pre_only]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
and
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[post_only]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
before we reach the main conversion code.
\layout Standard
\newline
if (!$post_only) {
\newline
-
-\protected_separator
-
-\protected_separator
-<<Transform noweb for reLyX>>
+ <<Transform noweb for reLyX>>
\newline
}
\newline
if ((!$pre_only) && (!$post_only)) {
\newline
-
-\protected_separator
-
-\protected_separator
-<<Run reLyX on intermediate file>>
+ <<Run reLyX on intermediate file>>
\newline
}
\newline
if (!$pre_only) {
\newline
-
-\protected_separator
-
-\protected_separator
-<<Fix up LyX file>>
+ <<Fix up LyX file>>
\newline
}
\newline
\newline
{
\newline
-
-\protected_separator
-
-\protected_separator
-if (/^
+ if (/^
\backslash
s*
\backslash
\backslash
>=/) { # Beginning of a noweb scrap
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-<<Read in and output the noweb code chunk>>
+ <<Read in and output the noweb code chunk>>
\newline
-
-\protected_separator
-
-\protected_separator
-} elsif (/^@
+ } elsif (/^@
\backslash
s+(.*)/) { # Beginning of a documentation chunk
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-print OUTPUT $1; # We do not need the ``@'' part
+ print OUTPUT $1; # We do not need the ``@'' part
\newline
-
-\protected_separator
-
-\protected_separator
-} elsif (/
+ } elsif (/
\backslash
[
\backslash
\backslash
]/) { # noweb quoted code
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-<<Perform special input quoting of [[var]]>>
+ <<Perform special input quoting of [[var]]>>
\newline
-
-\protected_separator
-
-\protected_separator
-} else {
+ } else {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-print OUTPUT; # Just let the line pass through
+ print OUTPUT; # Just let the line pass through
\newline
-
-\protected_separator
-
-\protected_separator
-}
+ }
\newline
}
\newline
\layout Standard
While reading in the
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[INPUT]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
file, once we have identified a
\noun on
noweb
noweb2lyx
\noun default
, we will use
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[INPUT]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
and
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[OUTPUT]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
to read and write files.
In the code fragment above, we need to read from the input file and write
to a file that will be later transformed by reLyX.
\newline
if ($pre_only) {
\newline
-
-\protected_separator
-
-\protected_separator
-&setup_files($input_file, $output_file);
+ &setup_files($input_file, $output_file);
\newline
} else {
\newline
-
-\protected_separator
-
-\protected_separator
-$relyx_file = "temp$$";
+ $relyx_file = "temp$$";
\newline
-
-\protected_separator
-
-\protected_separator
-&setup_files($input_file, $relyx_file);
+ &setup_files($input_file, $relyx_file);
\newline
}
\newline
\layout Standard
This code uses a small perl subroutine,
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[setup_files]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
, which we define below:
\layout Scrap
\newline
sub setup_files {
\newline
-
-\protected_separator
-
-\protected_separator
-my($in, $out) = @_;
+ my($in, $out) = @_;
\newline
-
-\protected_separator
-
-\protected_separator
-open(INPUT, "<$in") || die "Can not read $in: $!
+ open(INPUT, "<$in") || die "Can not read $in: $!
\backslash
n";
\newline
-
-\protected_separator
-
-\protected_separator
-open(OUTPUT, ">$out") || die "Can not write $out: $!
+ open(OUTPUT, ">$out") || die "Can not write $out: $!
\backslash
n";
\newline
}
\newline
-@ %def setup_files
-\protected_separator
-
-\protected_separator
-
+@ %def setup_files
\layout Subsection
Reading in the
\newline
scrapline: while (<INPUT>) {
\newline
-
-\protected_separator
-
-\protected_separator
-last scrapline if /^@
+ last scrapline if /^@
\backslash
s+/;
\newline
-
-\protected_separator
-
-\protected_separator
-$savedScrap .= $_;
+ $savedScrap .= $_;
\newline
};
\newline
switch: {
\newline
-
-\protected_separator
-
-\protected_separator
-if (/^@
+ if (/^@
\backslash
s+$/) {$savedScrap .= $_; last switch; }
\newline
-
-\protected_separator
-
-\protected_separator
-if (/^@
+ if (/^@
\backslash
s+%def.*$/) {$savedScrap .= $_; last switch; }
\newline
-
-\protected_separator
-
-\protected_separator
-if (/^@
+ if (/^@
\backslash
s+(.*)$/) {$savedScrap .= "@
\backslash
\layout Standard
Finally, we need to close the
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[INPUT]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
and
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[OUTPUT]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
files.
\layout Scrap
In this section, we describe and implement the code that runs reLyX on the
intermediate file
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[relyx_file]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
.
\layout Subsection
noweb2lyx.nw
\emph default
file that is generated by LyX
-\begin_float footnote
+\begin_inset Foot
+collapsed true
+
\layout Standard
reLyX searches for
\backslash
doc
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
{}
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
ument
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
{}
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
class and gets confused, so we have to obfuscate it slightly.
-\end_float
+\end_inset
+
.
With the regular expression as it is, we can actually run
\noun on
\newline
open(INPUT, "<$relyx_file") ||
\newline
-
-\protected_separator
-
-\protected_separator
-die "Can not read $relyx_file: $!
+ die "Can not read $relyx_file: $!
\backslash
n";
\newline
\newline
parse: while(<INPUT>) {
\newline
-
-\protected_separator
-
-\protected_separator
-if (/
+ if (/
\backslash
\backslash
docu[m]entclass{(.*)}/) {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-$class = $1;
+ $class = $1;
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-last parse;
+ last parse;
\newline
-
-\protected_separator
-
-\protected_separator
-}
+ }
\newline
}
\newline
\backslash
n"
\newline
-
-\protected_separator
-
-\protected_separator
-if (system("reLyX -c $doc_class $relyx_file"));
+ if (system("reLyX -c $doc_class $relyx_file"));
\newline
@
\layout Standard
\newline
{
\newline
-
-\protected_separator
-
-\protected_separator
-<<Fix code chunks in latex layout>>
+ <<Fix code chunks in latex layout>>
\newline
-
-\protected_separator
-
-\protected_separator
-<<Fix [[var]] noweb construct>>
+ <<Fix [[var]] noweb construct>>
\newline
-
-\protected_separator
-
-\protected_separator
-print OUTPUT; # default
+ print OUTPUT; # default
\newline
}
\newline
\layout Standard
Note that in the perl code that is contained in the
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[while(<INPUT>)]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
loop above, the perl construct
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[next line]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
is sufficient to restart the loop.
We can use this construct to do some relatively complex parsing of the
reLyX generated file.
\layout Standard
Setting up the
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[INPUT]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
and
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
[[OUTPUT]]
-\latex default
+\end_inset
+
+
+\family default
+\series default
+\shape default
+\size default
+\emph default
+\bar default
+\noun default
+\color default
is taken care of by this code:
\layout Scrap
\newline
if ($post_only) {
\newline
-
-\protected_separator
-
-\protected_separator
-&setup_files("$input_file", "$output_file");
+ &setup_files("$input_file", "$output_file");
\newline
} else {
\newline
-
-\protected_separator
- &setup_files("$relyx_file.lyx", "$output_file");
+ &setup_files("$relyx_file.lyx", "$output_file");
\newline
}
\newline
\backslash
latex latex/) { # Beginning of some latex code
\newline
-
-\protected_separator
-
-\protected_separator
-if (($line = <INPUT>) =~ /^
+ if (($line = <INPUT>) =~ /^
\backslash
s*<</) { # code scrap
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-<<Transform this chunk into layout scrap>>
+ <<Transform this chunk into layout scrap>>
\newline
-
-\protected_separator
-
-\protected_separator
-} else {
+ } else {
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-# print the
+ # print the
\backslash
latex latex line + next line
\newline
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-
-\protected_separator
-print OUTPUT "$_$line";
+ print OUTPUT "$_$line";
\newline
-
-\protected_separator
-
-\protected_separator
-}
+ }
\newline
-
-\protected_separator
-
-\protected_separator
-next line;
+ next line;
\newline
}
\newline
\newline
codeline: while (<INPUT>) {
\newline
-
-\protected_separator
-
-\protected_separator
-$savedScrap .= $_;
+ $savedScrap .= $_;
\newline
-
-\protected_separator
-
-\protected_separator
-last codeline if /^@
+ last codeline if /^@
\backslash
s+/;
\newline
\newline
slurp: while (<INPUT>) {
\newline
-
-\protected_separator
-
-\protected_separator
-last slurp if /
+ last slurp if /
\backslash
\backslash
latex /;
\newline
-
-\protected_separator
-
-\protected_separator
-next slurp if /
+ next slurp if /
\backslash
\backslash
newline/;
\newline
-
-\protected_separator
-
-\protected_separator
-next slurp if /^
+ next slurp if /^
\backslash
s*$/;
\newline
-
-\protected_separator
-
-\protected_separator
-warn "confused by line: $_";
+ warn "confused by line: $_";
\newline
}
\newline
\backslash
]/) { # special code for [[var]]
\newline
-
-\protected_separator
-
-\protected_separator
-s/
+ s/
\backslash
[
\backslash
\backslash
n/g;
\newline
-
-\protected_separator
-
-\protected_separator
-print OUTPUT;
+ print OUTPUT;
\newline
-
-\protected_separator
-
-\protected_separator
-next line;
+ next line;
\newline
}
\newline
\newline
if ($ARGV[0] eq "-pre") {
\newline
-
-\protected_separator
-
-\protected_separator
-&usage unless ($#ARGV == 2);
+ &usage unless ($#ARGV == 2);
\newline
-
-\protected_separator
-
-\protected_separator
-$input_file = $ARGV[1]; $output_file = $ARGV[2]; $pre_only = 1;
+ $input_file = $ARGV[1]; $output_file = $ARGV[2]; $pre_only = 1;
\newline
} elsif ($ARGV[0] eq "-post") {
\newline
-
-\protected_separator
-
-\protected_separator
-&usage unless ($#ARGV == 2);
+ &usage unless ($#ARGV == 2);
\newline
-
-\protected_separator
-
-\protected_separator
-$input_file = $ARGV[1]; $output_file = $ARGV[2]; $post_only = 1;
+ $input_file = $ARGV[1]; $output_file = $ARGV[2]; $post_only = 1;
\newline
} else {
\newline
-
-\protected_separator
-
-\protected_separator
-&usage unless ($#ARGV == 1);
+ &usage unless ($#ARGV == 1);
\newline
-
-\protected_separator
-
-\protected_separator
-$input_file = $ARGV[0];
-\protected_separator
-$output_file = $ARGV[1];
+ $input_file = $ARGV[0]; $output_file = $ARGV[1];
\newline
-
-\protected_separator
-
-\protected_separator
-$pre_only = 0; $post_only = 0;
+ $pre_only = 0; $post_only = 0;
\newline
}
\newline
\newline
sub usage() {
\newline
-
-\protected_separator
-
-\protected_separator
-print "Usage: noweb2lyx [-pre | -post] input-file output-file
+ print "Usage: noweb2lyx [-pre | -post] input-file output-file
\newline
\newline
\backslash
n";
\newline
-
-\protected_separator
-
-\protected_separator
-exit;
+ exit;
\newline
}
\newline
\layout Standard
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
\backslash
nowebchunks
+\end_inset
+
+
\layout Section*
Identifiers
\layout Standard
-\latex latex
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+
+\begin_inset ERT
+status Collapsed
+
+\layout Standard
\backslash
nowebindex
+\end_inset
+
+
\the_end
Box b(insetDimensions(text, cursor));
if (!b.contained(x, y)) {
+ lyxerr[Debug::GUI] << "Missed inset at x,y " << x << "," << y
+ << " box " << b << endl;
return 0;
}
+2002-01-06 John Levon <moz@compsoc.man.ac.uk>
+
+ * box.h: make signed dimensions to allow insets wider than
+ the screen (bug #162)
+
+ * BufferView_pimpl.C: add some insetHit debug
+
+2002-01-05 John Levon <moz@compsoc.man.ac.uk>
+
+ * vc-backend.C: add FIXME
+
+2002-01-03 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
+
+ * lyxfunc.C (getStatus): enable code for showing math font status
+ in toolbar/menu.
+
2002-01-07 Juergen Vigna <jug@sad.it>
* text.C (nextBreakPoint): removed debug output not needed anymore.
* lyxfunc.C (dispatch): add a finishUndo() in LFUN_ESCAPE.
-2002-01-03 Martin Vermeer <martin.vermeer@hut.fi>
+2002-01-03 Martin Vermeer <martin.vermeer@hut.fi>
* FormMathsPanel.C:
* FormMathsPanel.h
* MathsSymbols.C:
* form_maths_panel.C:
* form_maths_panel.h:
- * form_maths_panel.fd:
- implemented sub- and super- buttons in math panel.
+ * form_maths_panel.fd: implemented sub- and super- buttons in math
+ panel.
- * lyx_main.C:
- Revised hardwired bindings to allow original _ and ^ (or ^ space)
- to be used as in TeX (req'd byAndré).
-
- * lyxfunc.C:
- Allow ^and _ again to be used both as super/subscript (mathed)
- and as themselves (in text).
+ * lyx_main.C: Revised hardwired bindings to allow original _ and ^
+ (or ^ space) to be used as in TeX (req'd by André).
+ * lyxfunc.C: Allow ^ and _ again to be used both as
+ super/subscript (mathed) and as themselves (in text).
2002-01-03 Allan Rae <rae@lyx.org>
* XFormsView.C (setWindowTitle): also set icon title.
- * LyXView.h: (setWindowTitle): signature changed.
+ * LyXView.h (setWindowTitle): signature changed.
* XFormsView.h (setWindowTitle): ditto.
2002-01-02 Juergen Vigna <jug@sad.it>
* It is expected that the box be constructed in
* normalised form, that is to say : x1,y1 is top-left,
* x2,y2 is bottom-right.
+ *
+ * Negative values are allowed.
*/
struct Box {
- unsigned int x1;
- unsigned int x2;
- unsigned int y1;
- unsigned int y2;
+ int x1;
+ int x2;
+ int y1;
+ int y2;
- Box(unsigned int x1_, unsigned int x2_,
- unsigned int y1_, unsigned int y2_) :
+ Box(int x1_, int x2_,
+ int y1_, int y2_) :
x1(x1_), x2(x2_), y1(y1_), y2(y2_) {}
/**
* the box. Check is exclusive (point on a border
* returns false).
*/
- bool contained(unsigned int x, unsigned int y) {
+ bool contained(int x, int y) {
return (x1 < x && x2 > x &&
y1 < y && y2 > y);
}
+
+
};
+inline std::ostream & operator<<(std::ostream & o, Box & b)
+{
+ return o << "x1,y1: " << b.x1 << "," << b.y1
+ << " x2,y2: " << b.x2 << "," << b.y2 << std::endl;
+}
+
#endif // BOX_H
+2002-01-05 John Levon <moz@compsoc.man.ac.uk>
+
+ * FormFiledialog.C: add FIXME
+
+ * xforms_helpers.C: fix use of FileInfo
+
2002-01-07 John Levon <moz@compsoc.man.ac.uk>
* FormTabular.h:
#include "helper_funcs.h"
using std::vector;
-using std::back_inserter;
-using std::transform;
using namespace character;
typedef FormCB<ControlCharacter, FormDB<FD_form_character> > base_class;
iDepth = 0;
string line, Temp;
char szMode[15];
- FileInfo fileInfo;
string File = pszDirectory;
if (File != "/") {
File = split(File, Temp, '/');
// gets file status
File = AddName(pszDirectory, fname);
- fileInfo.newFile(File, true);
+ // FIXME: we don't get this file exists/stattable
+ FileInfo fileInfo(File, true);
fileInfo.modeString(szMode);
unsigned int nlink = fileInfo.getNumberOfLinks();
string user = lyxUserCache.find(fileInfo.getUid());
}
FileInfo const tp(name);
- if (!tp.isDir()) {
+ if (!tp.isOK() || !tp.isDir()) {
error_message = N_("Directory does not exist.");
return false;
}
}
FileInfo const tp(name);
- if (!tp.isDir()) {
+ if (!tp.isOK() || !tp.isDir()) {
error_message = N_("Directory does not exist.");
return false;
}
}
FileInfo d(name);
- if (!d.isDir()) {
+
+ // FIXME: what is this supposed to do ?
+ // .newFile doesn't do what you think it does ...
+ if (!d.isOK() || !d.isDir()) {
d.newFile(dir);
}
}
FileInfo f(name);
- if (dir == name || f.isDir()) {
+ if (dir == name || (f.isOK() && f.isDir())) {
error_message = N_("A file is required, not a directory.");
return false;
}
- if (f.exist() && !f.writable()) {
+ if (f.isOK() && f.exist() && !f.writable()) {
error_message = N_("Cannot write to this file.");
return false;
}
}
FileInfo d(name);
- if (!d.isDir()) {
+ // FIXME: what is this supposed to do ?
+ if (!d.isOK() && !d.isDir()) {
d.newFile(dir);
}
}
FileInfo f(name);
- if (dir == name || f.isDir()) {
+ if (dir == name || (f.isOK() && f.isDir())) {
error_message = N_("A file is required, not a directory.");
return false;
}
+2002-01-07 Martin Vermeer <martin.vermeer@hut.fi>
+
+ * insettext.C: fix bug illustrated by attachment #37 of bug #59
+
+2002-01-05 John Levon <moz@compsoc.man.ac.uk>
+
+ * insetinclude.C: fix use of FileInfo
+
2002-01-07 Juergen Vigna <jug@sad.it>
* insettabular.C (draw): fixed clearing of cell around inset.
// the readonly flag can/will be wrong, not anymore I think.
FileInfo finfo(getFileName());
- bool const ro = !finfo.writable();
+ bool const ro = !(!finfo.isOK() || finfo.writable());
return bufferlist.readFile(getFileName(), ro) != 0;
}
if (!cleared && (top_x == int(x))
&& ((need_update&(INIT|FULL)) || (top_baseline != baseline)
||(last_drawn_width != insetWidth))) {
- clearInset(bv, baseline, cleared);
+ // Condition necessary to eliminate bug 59 attachment 37
+ if (baseline > 0) clearInset(bv, baseline, cleared);
}
top_x = int(x);
break;
}
}
-#if 0
else {
MathTextCodes tc = mathcursor->getLastCode();
switch (action) {
break;
}
}
- #endif
return flag;
}
+2002-01-05 John Levon <moz@compsoc.man.ac.uk>
+
+ * filetools.C: fix use of FileInfo
+
+ * FileInfo.h:
+ * FileInfo.C: add Asserts and documentation
+
2001-12-20 Kayvan A. Sylvan <kayvan@sylvan.com>
* os_win32.C: compilation fixes
#include <cerrno>
#include "FileInfo.h"
+#include "LAssert.h"
#if !S_IRUSR
# if S_IREAD
// should not be in FileInfo
char const * FileInfo::typeIndicator() const
{
+ lyx::Assert(isOK());
+
if (S_ISDIR(buf.st_mode)) return ("/");
#ifdef S_ISLNK
if (S_ISLNK(buf.st_mode)) return ("@");
mode_t FileInfo::getMode() const
{
+ lyx::Assert(isOK());
+
return buf.st_mode;
}
// should not be in FileInfo
char FileInfo::typeLetter() const
{
+ lyx::Assert(isOK());
+
#ifdef S_ISBLK
if (S_ISBLK(buf.st_mode)) return 'b';
#endif
// should not be in FileInfo
void FileInfo::setSticky(char * szString) const
{
+ lyx::Assert(isOK());
+
#ifdef S_ISUID
if (buf.st_mode & S_ISUID) {
if (szString[3] != 'x') szString[3] = 'S';
time_t FileInfo::getModificationTime() const
{
+ lyx::Assert(isOK());
return buf.st_mtime;
}
time_t FileInfo::getAccessTime() const
{
+ lyx::Assert(isOK());
return buf.st_atime;
}
time_t FileInfo::getStatusChangeTime() const
{
+ lyx::Assert(isOK());
return buf.st_ctime;
}
nlink_t FileInfo::getNumberOfLinks() const
{
+ lyx::Assert(isOK());
return buf.st_nlink;
}
uid_t FileInfo::getUid() const
{
+ lyx::Assert(isOK());
return buf.st_uid;
}
gid_t FileInfo::getGid() const
{
+ lyx::Assert(isOK());
return buf.st_gid;
}
off_t FileInfo::getSize() const
{
+ lyx::Assert(isOK());
return buf.st_size;
}
bool FileInfo::isLink() const
{
+ lyx::Assert(isOK());
return S_ISLNK(buf.st_mode);
}
bool FileInfo::isRegular() const
{
+ lyx::Assert(isOK());
return S_ISREG(buf.st_mode);
}
bool FileInfo::isDir() const
{
+ lyx::Assert(isOK());
return S_ISDIR(buf.st_mode);
}
bool FileInfo::isChar() const
{
+ lyx::Assert(isOK());
return S_ISCHR(buf.st_mode);
}
bool FileInfo::isBlock() const
{
+ lyx::Assert(isOK());
return S_ISBLK(buf.st_mode);
}
bool FileInfo::isFifo() const
{
+ lyx::Assert(isOK());
return S_ISFIFO(buf.st_mode);
}
bool FileInfo::isSocket() const
{
+ lyx::Assert(isOK());
#ifdef S_ISSOCK
return S_ISSOCK(buf.st_mode);
#else
return false;
}
}
-
-
-
#endif
/** Use objects of this class to get information about files.
+ *
+ * Users must make sure to check fi.isOK() before any operations
+ * requiring the file to exist such as fi.isDir()
*/
class FileInfo : boost::noncopyable {
public:
<< endl;
bool deleted = true;
- if (FileInfo(unlinkpath).isDir())
+ FileInfo fi(unlinkpath);
+ if (fi.isOK() && fi.isDir())
deleted = (DeleteAllFilesInDir(unlinkpath) == 0);
deleted &= (lyx::unlink(unlinkpath) == 0);
if (!deleted) {
//sm[4]; // options
//sm[5]; // tag or tagdate
FileInfo fi(file_);
+ // FIXME: must double check file is stattable/existing
time_t mod = fi.getModificationTime();
string mod_date = strip(asctime(gmtime(&mod)), '\n');
lyxerr[Debug::LYXVC]