mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-09-20 15:01:58 +00:00
move the most important changes from branch new_insets to head. Still dependant on NEW_INSETS
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1731 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
8cb2e519b3
commit
42a1e2ea5a
@ -111,9 +111,6 @@ BufferView::Pimpl::Pimpl(BufferView * b, LyXView * o,
|
|||||||
current_scrollbar_value(0), cursor_timeout(400),
|
current_scrollbar_value(0), cursor_timeout(400),
|
||||||
workarea_(xpos, ypos, width, height), using_xterm_cursor(false)
|
workarea_(xpos, ypos, width, height), using_xterm_cursor(false)
|
||||||
{
|
{
|
||||||
//buffer_ = 0;
|
|
||||||
//workarea_ = new WorkArea(xpos, ypos, width, height);
|
|
||||||
|
|
||||||
// Setup the signals
|
// Setup the signals
|
||||||
workarea_.scrollCB.connect(slot(this, &BufferView::Pimpl::scrollCB));
|
workarea_.scrollCB.connect(slot(this, &BufferView::Pimpl::scrollCB));
|
||||||
workarea_.workAreaExpose
|
workarea_.workAreaExpose
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
2001-03-11 Lars Gullik Bjønnes <larsbj@trylle.birdstep.com>
|
2001-03-11 Lars Gullik Bjønnes <larsbj@trylle.birdstep.com>
|
||||||
|
|
||||||
|
* FloatList.C (FloatList): update from the new_insets branch.
|
||||||
|
* Floating.[Ch]: ditto
|
||||||
|
* LaTeXFeatures.C: ditto
|
||||||
|
* buffer.C: ditto
|
||||||
|
* lyxlex_pimpl.C: ditto
|
||||||
|
|
||||||
* paragraph.C (Last): remove when NEW_INSETS is defined.
|
* paragraph.C (Last): remove when NEW_INSETS is defined.
|
||||||
|
|
||||||
* other file: changes because of the above.
|
* other file: changes because of the above.
|
||||||
|
@ -6,24 +6,42 @@
|
|||||||
|
|
||||||
#include "FloatList.h"
|
#include "FloatList.h"
|
||||||
|
|
||||||
|
// This class is now mostly finished, except one thing, it is a global
|
||||||
|
// object. This will not do. The user (and layout files) are free to
|
||||||
|
// create floats and modify them to fit into a certain document. So it is
|
||||||
|
// pretty clear that each layout needs its own list, as do documents.
|
||||||
|
// However this is also not enough since we really want the user to be
|
||||||
|
// able to create "presistent" floats, in the sense that a user created
|
||||||
|
// float can be used across sessions and across documents. So we need a
|
||||||
|
// global¹ floatlist as well. The interaction between these are not quite
|
||||||
|
// clear, but it seems natural that the definition found in the document
|
||||||
|
// takes precedence.
|
||||||
|
// We also have the issue about what get stored _in_ the lyx file.
|
||||||
|
//
|
||||||
|
// ¹ not absolutely global but somewhere where documents,layouts and
|
||||||
|
// the bufferview can have access to it.
|
||||||
|
//
|
||||||
|
// Lgb
|
||||||
|
|
||||||
FloatList::FloatList()
|
FloatList::FloatList()
|
||||||
{
|
{
|
||||||
// Insert the latex builtin float-types
|
// Insert the latex builtin float-types
|
||||||
|
// (these will later be read from a layout file)
|
||||||
|
|
||||||
// table
|
// table
|
||||||
Floating table("table", "htbp", "lot", "", "plain", "Table", true);
|
Floating table("table", "htbp", "lot", "", "plain", "Table", true);
|
||||||
list[table.type()] = table;
|
newFloat(table);
|
||||||
|
|
||||||
// figure
|
// figure
|
||||||
Floating figure("figure", "htbp", "lof", "", "plain", "Figure", true);
|
Floating figure("figure", "htbp", "lof", "", "plain", "Figure", true);
|
||||||
list[figure.type()] = figure;
|
newFloat(figure);
|
||||||
|
|
||||||
// And we add algorithm too since LyX has
|
// And we add algorithm too since LyX has
|
||||||
// supported that for a long time,
|
// supported that for a long time,
|
||||||
// but support for this should probably be moved to a layout file.
|
// but support for this should probably be moved to a layout file.
|
||||||
Floating algorithm("algorithm", "htbp", "loa",
|
Floating algorithm("algorithm", "htbp", "loa",
|
||||||
"", "ruled", "Algorithm");
|
"", "ruled", "Algorithm");
|
||||||
list[algorithm.type()] = algorithm;
|
newFloat(algorithm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,6 +42,24 @@ string const & Floating::placement() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string const & Floating::ext() const
|
||||||
|
{
|
||||||
|
return ext_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string const & Floating::within() const
|
||||||
|
{
|
||||||
|
return within_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string const & Floating::style() const
|
||||||
|
{
|
||||||
|
return style_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
string const & Floating::name() const
|
string const & Floating::name() const
|
||||||
{
|
{
|
||||||
return name_;
|
return name_;
|
||||||
|
@ -38,6 +38,12 @@ public:
|
|||||||
///
|
///
|
||||||
string const & placement() const;
|
string const & placement() const;
|
||||||
///
|
///
|
||||||
|
string const & ext() const;
|
||||||
|
///
|
||||||
|
string const & within() const;
|
||||||
|
///
|
||||||
|
string const & style() const;
|
||||||
|
///
|
||||||
string const & name() const;
|
string const & name() const;
|
||||||
///
|
///
|
||||||
bool builtin() const;
|
bool builtin() const;
|
||||||
|
@ -330,21 +330,44 @@ string const LaTeXFeatures::getMacros()
|
|||||||
// \floatstyle{ruled}
|
// \floatstyle{ruled}
|
||||||
// \newfloat{algorithm}{htbp}{loa}
|
// \newfloat{algorithm}{htbp}{loa}
|
||||||
// \floatname{algorithm}{Algorithm}
|
// \floatname{algorithm}{Algorithm}
|
||||||
UsedFloats::const_iterator beg = usedFloats.begin();
|
UsedFloats::const_iterator cit = usedFloats.begin();
|
||||||
UsedFloats::const_iterator end = usedFloats.end();
|
UsedFloats::const_iterator end = usedFloats.end();
|
||||||
for (; beg != end; ++beg) {
|
ostringstream floats;
|
||||||
Floating const & fl = floatList.getType((*beg));
|
for (; cit != end; ++cit) {
|
||||||
|
Floating const & fl = floatList.getType((*cit));
|
||||||
|
|
||||||
|
// For builtin floats we do nothing.
|
||||||
|
if (fl.builtin()) continue;
|
||||||
|
|
||||||
// We have to special case "table" and "figure"
|
// We have to special case "table" and "figure"
|
||||||
if ((fl.type() == "tabular" && !fl.builtin()) ||
|
if (fl.type() == "tabular" || fl.type() == "figure") {
|
||||||
(fl.type() == "figure" && !fl.builtin())) {
|
|
||||||
// Output code to modify "table" or "figure"
|
// Output code to modify "table" or "figure"
|
||||||
// but only if builtin == false
|
// but only if builtin == false
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// The other non builtin floats.
|
// The other non builtin floats.
|
||||||
|
|
||||||
|
string type = fl.type();
|
||||||
|
string placement = fl.placement();
|
||||||
|
string ext = fl.ext();
|
||||||
|
string within = fl.within();
|
||||||
|
string style = fl.style();
|
||||||
|
string name = fl.name();
|
||||||
|
floats << "\\floatstyle{" << style << "}\n"
|
||||||
|
<< "\\newfloat{" << type << "}{" << placement
|
||||||
|
<< "}{" << ext << "}";
|
||||||
|
if (!within.empty())
|
||||||
|
floats << "[" << within << "]";
|
||||||
|
floats << "\n"
|
||||||
|
<< "\\floatname{" << type << "}{"
|
||||||
|
<< name << "}\n";
|
||||||
|
|
||||||
|
// What missing here is to code to minimalize the code
|
||||||
|
// outputted so that the same flotastyle will not be
|
||||||
|
// used several times. when the same style is still in
|
||||||
|
// effect. (Lgb)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
macros += floats.str();
|
||||||
|
|
||||||
for (LanguageList::const_iterator cit = UsedLanguages.begin();
|
for (LanguageList::const_iterator cit = UsedLanguages.begin();
|
||||||
cit != UsedLanguages.end(); ++cit)
|
cit != UsedLanguages.end(); ++cit)
|
||||||
|
226
src/buffer.C
226
src/buffer.C
@ -372,6 +372,7 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, LyXParagraph *& par,
|
|||||||
par->InsertInset(pos, inset, font);
|
par->InsertInset(pos, inset, font);
|
||||||
++pos;
|
++pos;
|
||||||
} else if (token == "\\layout") {
|
} else if (token == "\\layout") {
|
||||||
|
#ifndef NEW_INSETS
|
||||||
if (!return_par)
|
if (!return_par)
|
||||||
return_par = par;
|
return_par = par;
|
||||||
else {
|
else {
|
||||||
@ -398,14 +399,195 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, LyXParagraph *& par,
|
|||||||
par->layout =
|
par->layout =
|
||||||
textclasslist.NumberOfLayout(params.textclass,
|
textclasslist.NumberOfLayout(params.textclass,
|
||||||
layout.obsoleted_by()).second;
|
layout.obsoleted_by()).second;
|
||||||
#ifndef NEW_INSETS
|
|
||||||
par->footnoteflag = footnoteflag;
|
par->footnoteflag = footnoteflag;
|
||||||
par->footnotekind = footnotekind;
|
par->footnotekind = footnotekind;
|
||||||
#endif
|
|
||||||
par->params.depth(depth);
|
par->params.depth(depth);
|
||||||
font = LyXFont(LyXFont::ALL_INHERIT, params.language);
|
font = LyXFont(LyXFont::ALL_INHERIT, params.language);
|
||||||
if (file_format < 216 && params.language->lang() == "hebrew")
|
if (file_format < 216 && params.language->lang() == "hebrew")
|
||||||
font.setLanguage(default_language);
|
font.setLanguage(default_language);
|
||||||
|
#else
|
||||||
|
lex.EatLine();
|
||||||
|
string const layoutname = lex.GetString();
|
||||||
|
pair<bool, LyXTextClass::LayoutList::size_type> pp
|
||||||
|
= textclasslist.NumberOfLayout(params.textclass,
|
||||||
|
layoutname);
|
||||||
|
|
||||||
|
#ifdef USE_CAPTION
|
||||||
|
// The is the compability reading of layout caption.
|
||||||
|
// It can be removed in LyX version 1.3.0. (Lgb)
|
||||||
|
if (compare_no_case(layoutname, "caption") == 0) {
|
||||||
|
// We expect that the par we are now working on is
|
||||||
|
// really inside a InsetText inside a InsetFloat.
|
||||||
|
// We also know that captions can only be
|
||||||
|
// one paragraph. (Lgb)
|
||||||
|
|
||||||
|
// We should now read until the next "\layout"
|
||||||
|
// is reached.
|
||||||
|
// This is probably not good enough, what if the
|
||||||
|
// caption is the last par in the document (Lgb)
|
||||||
|
istream & ist = lex.getStream();
|
||||||
|
stringstream ss;
|
||||||
|
string line;
|
||||||
|
int begin = 0;
|
||||||
|
while (true) {
|
||||||
|
getline(ist, line);
|
||||||
|
if (prefixIs(line, "\\layout")) {
|
||||||
|
lex.pushToken(line);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (prefixIs(line, "\\begin_inset"))
|
||||||
|
++begin;
|
||||||
|
if (prefixIs(line, "\\end_inset")) {
|
||||||
|
if (begin)
|
||||||
|
--begin;
|
||||||
|
else {
|
||||||
|
lex.pushToken(line);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ss << line << '\n';
|
||||||
|
}
|
||||||
|
// Now we should have the whole layout in ss
|
||||||
|
// we should now be able to give this to the
|
||||||
|
// caption inset.
|
||||||
|
ss << "\\end_inset\n";
|
||||||
|
|
||||||
|
// This seems like a bug in stringstream.
|
||||||
|
// We really should be able to use ss
|
||||||
|
// directly. (Lgb)
|
||||||
|
istringstream is(ss.str());
|
||||||
|
LyXLex tmplex(0, 0);
|
||||||
|
tmplex.setStream(is);
|
||||||
|
Inset * inset = new InsetCaption;
|
||||||
|
inset->Read(this, tmplex);
|
||||||
|
par->InsertInset(pos, inset, font);
|
||||||
|
++pos;
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
// BEGIN pextra_minipage compability
|
||||||
|
// This should be removed in 1.3.x (Lgb)
|
||||||
|
|
||||||
|
// This compability code is not perfect. In a couple
|
||||||
|
// of rand cases it fails. When the minipage par is
|
||||||
|
// the first par in the document, and when there are
|
||||||
|
// none or only one regular paragraphs after the
|
||||||
|
// minipage. Currently I am not investing any effort
|
||||||
|
// in fixing those cases.
|
||||||
|
static LyXParagraph * minipar = 0;
|
||||||
|
|
||||||
|
if (minipar
|
||||||
|
&& par->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE) {
|
||||||
|
lyxerr << "minipages in a row" << endl;
|
||||||
|
if (par->params.pextraStartMinipage()) {
|
||||||
|
lyxerr << "start new minipage" << endl;
|
||||||
|
// minipages in a row
|
||||||
|
minipar->previous()->next(par);
|
||||||
|
par->previous()->next(0);
|
||||||
|
par->previous(minipar->previous());
|
||||||
|
InsetMinipage * mini = new InsetMinipage;
|
||||||
|
// Before we insert the list of
|
||||||
|
// minipages into the inset we have
|
||||||
|
// to clean up a bit.
|
||||||
|
// This is not quite correct yet since
|
||||||
|
// we do want to use some of these
|
||||||
|
// parameters to set options in the
|
||||||
|
// minipage isnet.
|
||||||
|
LyXParagraph * tmp = minipar;
|
||||||
|
while (tmp) {
|
||||||
|
tmp->params.pextraType(0);
|
||||||
|
tmp->params.pextraWidth(string());
|
||||||
|
tmp->params.pextraWidthp(string());
|
||||||
|
tmp->params.pextraAlignment(0);
|
||||||
|
tmp->params.pextraHfill(false);
|
||||||
|
tmp->params.pextraStartMinipage(false);
|
||||||
|
tmp = tmp->next();
|
||||||
|
}
|
||||||
|
|
||||||
|
mini->inset->par = minipar;
|
||||||
|
par->previous()->InsertInset(par->previous()->size(), mini);
|
||||||
|
minipar = par;
|
||||||
|
} else {
|
||||||
|
lyxerr << "new minipage par" << endl;
|
||||||
|
//nothing to do just continue reading
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (minipar) {
|
||||||
|
lyxerr << "last minipage par read" << endl;
|
||||||
|
// The last paragraph read was not part of a
|
||||||
|
// minipage but the par linked list is...
|
||||||
|
// So we need to remove the last par from the
|
||||||
|
// rest, insert the rest of the paragraphs into
|
||||||
|
// a InsetMinipage, insert this minipage into
|
||||||
|
// prevpar, append the current par to prevpar
|
||||||
|
// and continue...
|
||||||
|
par->previous()->next(0);
|
||||||
|
par->previous(minipar->previous());
|
||||||
|
minipar->previous()->next(par);
|
||||||
|
minipar->previous(0);
|
||||||
|
InsetMinipage * mini = new InsetMinipage;
|
||||||
|
|
||||||
|
// Before we insert the list of
|
||||||
|
// minipages into the inset we have
|
||||||
|
// to clean up a bit.
|
||||||
|
// This is not quite correct yet since we
|
||||||
|
// do want to use some of these parameters
|
||||||
|
// to set options in the minipage isnet.
|
||||||
|
LyXParagraph * tmp = minipar;
|
||||||
|
while (tmp) {
|
||||||
|
tmp->params.pextraType(0);
|
||||||
|
tmp->params.pextraWidth(string());
|
||||||
|
tmp->params.pextraWidthp(string());
|
||||||
|
tmp->params.pextraAlignment(0);
|
||||||
|
tmp->params.pextraHfill(false);
|
||||||
|
tmp->params.pextraStartMinipage(false);
|
||||||
|
tmp = tmp->next();
|
||||||
|
}
|
||||||
|
|
||||||
|
mini->inset->par = minipar;
|
||||||
|
par->previous()->InsertInset(par->previous()->size(), mini);
|
||||||
|
minipar = 0;
|
||||||
|
} else if (par->params.pextraType() == LyXParagraph::PEXTRA_MINIPAGE) {
|
||||||
|
|
||||||
|
// par is the first paragraph in a minipage
|
||||||
|
lyxerr << "begin minipage" << endl;
|
||||||
|
minipar = par;
|
||||||
|
|
||||||
|
}
|
||||||
|
// End of pextra_minipage compability
|
||||||
|
|
||||||
|
if (!return_par)
|
||||||
|
return_par = par;
|
||||||
|
else {
|
||||||
|
par->fitToSize();
|
||||||
|
par = new LyXParagraph(par);
|
||||||
|
}
|
||||||
|
pos = 0;
|
||||||
|
if (pp.first) {
|
||||||
|
par->layout = pp.second;
|
||||||
|
} else {
|
||||||
|
// layout not found
|
||||||
|
// use default layout "Standard" (0)
|
||||||
|
par->layout = 0;
|
||||||
|
}
|
||||||
|
// Test whether the layout is obsolete.
|
||||||
|
LyXLayout const & layout =
|
||||||
|
textclasslist.Style(params.textclass,
|
||||||
|
par->layout);
|
||||||
|
if (!layout.obsoleted_by().empty())
|
||||||
|
par->layout = textclasslist
|
||||||
|
.NumberOfLayout(params.textclass,
|
||||||
|
layout.obsoleted_by())
|
||||||
|
.second;
|
||||||
|
par->params.depth(depth);
|
||||||
|
font = LyXFont(LyXFont::ALL_INHERIT, params.language);
|
||||||
|
if (file_format < 216
|
||||||
|
&& params.language->lang() == "hebrew")
|
||||||
|
font.setLanguage(default_language);
|
||||||
|
#ifdef USE_CAPTION
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#ifndef NEW_INSETS
|
#ifndef NEW_INSETS
|
||||||
} else if (token == "\\end_float") {
|
} else if (token == "\\end_float") {
|
||||||
if (!return_par)
|
if (!return_par)
|
||||||
@ -434,14 +616,14 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, LyXParagraph *& par,
|
|||||||
footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
|
footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
|
||||||
#else
|
#else
|
||||||
} else if (token == "\\begin_float") {
|
} else if (token == "\\begin_float") {
|
||||||
// This is the compability reader, unfinished but tested.
|
// This is the compability reader. It can be removed in
|
||||||
// (Lgb)
|
// LyX version 1.3.0. (Lgb)
|
||||||
lex.next();
|
lex.next();
|
||||||
string const tmptok = lex.GetString();
|
string const tmptok = lex.GetString();
|
||||||
//lyxerr << "old float: " << tmptok << endl;
|
//lyxerr << "old float: " << tmptok << endl;
|
||||||
|
|
||||||
Inset * inset = 0;
|
Inset * inset = 0;
|
||||||
string old_float;
|
stringstream old_float;
|
||||||
|
|
||||||
if (tmptok == "footnote") {
|
if (tmptok == "footnote") {
|
||||||
inset = new InsetFoot;
|
inset = new InsetFoot;
|
||||||
@ -449,37 +631,37 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, LyXParagraph *& par,
|
|||||||
inset = new InsetMarginal;
|
inset = new InsetMarginal;
|
||||||
} else if (tmptok == "fig") {
|
} else if (tmptok == "fig") {
|
||||||
inset = new InsetFloat("figure");
|
inset = new InsetFloat("figure");
|
||||||
old_float += "placement htbp\n";
|
old_float << "placement htbp\n";
|
||||||
} else if (tmptok == "tab") {
|
} else if (tmptok == "tab") {
|
||||||
inset = new InsetFloat("table");
|
inset = new InsetFloat("table");
|
||||||
old_float += "placement htbp\n";
|
old_float << "placement htbp\n";
|
||||||
} else if (tmptok == "alg") {
|
} else if (tmptok == "alg") {
|
||||||
inset = new InsetFloat("algorithm");
|
inset = new InsetFloat("algorithm");
|
||||||
old_float += "placement htbp\n";
|
old_float << "placement htbp\n";
|
||||||
} else if (tmptok == "wide-fig") {
|
} else if (tmptok == "wide-fig") {
|
||||||
InsetFloat * tmp = new InsetFloat("figure");
|
InsetFloat * tmp = new InsetFloat("figure");
|
||||||
tmp->wide(true);
|
tmp->wide(true);
|
||||||
inset = tmp;
|
inset = tmp;
|
||||||
old_float += "placement htbp\n";
|
old_float << "placement htbp\n";
|
||||||
} else if (tmptok == "wide-tab") {
|
} else if (tmptok == "wide-tab") {
|
||||||
InsetFloat * tmp = new InsetFloat("table");
|
InsetFloat * tmp = new InsetFloat("table");
|
||||||
tmp->wide(true);
|
tmp->wide(true);
|
||||||
inset = tmp;
|
inset = tmp;
|
||||||
old_float += "placement htbp\n";
|
old_float << "placement htbp\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!inset) return false; // no end read yet
|
if (!inset) return false; // no end read yet
|
||||||
|
|
||||||
old_float += "collapsed true\n";
|
old_float << "collapsed true\n";
|
||||||
|
|
||||||
// Here we need to check for \end_deeper and handle that
|
// Here we need to check for \end_deeper and handle that
|
||||||
// before we do the footnote parsing.
|
// before we do the footnote parsing.
|
||||||
// This _is_ a hack! (Lgb)
|
// This _is_ a hack! (Lgb)
|
||||||
while(true) {
|
while (true) {
|
||||||
lex.next();
|
lex.next();
|
||||||
string const tmp = lex.GetString();
|
string const tmp = lex.GetString();
|
||||||
if (tmp == "\\end_deeper") {
|
if (tmp == "\\end_deeper") {
|
||||||
lyxerr << "\\end_deeper caught!" << endl;
|
//lyxerr << "\\end_deeper caught!" << endl;
|
||||||
if (!depth) {
|
if (!depth) {
|
||||||
lex.printError("\\end_deeper: "
|
lex.printError("\\end_deeper: "
|
||||||
"depth is already null");
|
"depth is already null");
|
||||||
@ -487,21 +669,19 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, LyXParagraph *& par,
|
|||||||
--depth;
|
--depth;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
old_float += tmp;
|
old_float << tmp << ' ';
|
||||||
old_float += ' ';
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
old_float += lex.getLongString("\\end_float");
|
old_float << lex.getLongString("\\end_float")
|
||||||
old_float += "\n\\end_inset\n";
|
<< "\n\\end_inset\n";
|
||||||
//lyxerr << "float body: " << old_float << endl;
|
//lyxerr << "Float Body:\n" << old_float.str() << endl;
|
||||||
|
// That this does not work seems like a bug
|
||||||
istringstream istr(old_float);
|
// in stringstream. (Lgb)
|
||||||
|
istringstream istr(old_float.str());
|
||||||
LyXLex nylex(0, 0);
|
LyXLex nylex(0, 0);
|
||||||
nylex.setStream(istr);
|
nylex.setStream(istr);
|
||||||
|
|
||||||
inset->Read(this, nylex);
|
inset->Read(this, nylex);
|
||||||
par->InsertInset(pos, inset, font);
|
par->InsertInset(pos, inset, font);
|
||||||
++pos;
|
++pos;
|
||||||
@ -3420,9 +3600,11 @@ vector<string> const Buffer::getLabelList()
|
|||||||
|
|
||||||
vector<vector<Buffer::TocItem> > const Buffer::getTocList() const
|
vector<vector<Buffer::TocItem> > const Buffer::getTocList() const
|
||||||
{
|
{
|
||||||
|
#ifndef NEW_INSETS
|
||||||
int figs = 0;
|
int figs = 0;
|
||||||
int tables = 0;
|
int tables = 0;
|
||||||
int algs = 0;
|
int algs = 0;
|
||||||
|
#endif
|
||||||
vector<vector<TocItem> > l(4);
|
vector<vector<TocItem> > l(4);
|
||||||
LyXParagraph * par = paragraph;
|
LyXParagraph * par = paragraph;
|
||||||
while (par) {
|
while (par) {
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2001-03-11 Lars Gullik Bjønnes <larsbj@trylle.birdstep.com>
|
||||||
|
|
||||||
|
* insetcaption.[Ch]: update from new_insets branch
|
||||||
|
* insetfloat.[Ch]: ditto
|
||||||
|
|
||||||
2001-03-06 John Levon <moz@compsoc.man.ac.uk>
|
2001-03-06 John Levon <moz@compsoc.man.ac.uk>
|
||||||
|
|
||||||
* insetexternal.C:
|
* insetexternal.C:
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* LyX, The Document Processor
|
* LyX, The Document Processor
|
||||||
*
|
*
|
||||||
* Copyright 2000 The LyX Team.
|
* Copyright 2000-2001 The LyX Team.
|
||||||
*
|
*
|
||||||
* ======================================================
|
* ======================================================
|
||||||
*/
|
*/
|
||||||
@ -15,11 +15,25 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "insetcaption.h"
|
#include "insetcaption.h"
|
||||||
|
#include "Painter.h"
|
||||||
|
#include "font.h"
|
||||||
|
#include "BufferView.h"
|
||||||
|
#include "FloatList.h"
|
||||||
|
#include "insets/insetfloat.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
using std::ostream;
|
using std::ostream;
|
||||||
using std::endl;
|
using std::endl;
|
||||||
|
|
||||||
|
InsetCaption::InsetCaption()
|
||||||
|
: InsetText()
|
||||||
|
{
|
||||||
|
SetAutoBreakRows(true);
|
||||||
|
SetDrawFrame(0, InsetText::LOCKED);
|
||||||
|
SetFrameColor(0, LColor::footnoteframe);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetCaption::Write(Buffer const * buf, ostream & os) const
|
void InsetCaption::Write(Buffer const * buf, ostream & os) const
|
||||||
{
|
{
|
||||||
os << "Caption\n";
|
os << "Caption\n";
|
||||||
@ -30,10 +44,82 @@ void InsetCaption::Write(Buffer const * buf, ostream & os) const
|
|||||||
|
|
||||||
void InsetCaption::Read(Buffer const * buf, LyXLex & lex)
|
void InsetCaption::Read(Buffer const * buf, LyXLex & lex)
|
||||||
{
|
{
|
||||||
string token = lex.GetString();
|
#if 0
|
||||||
|
// We will enably this check again when the compability
|
||||||
|
// code is removed from Buffer::Read (Lgb)
|
||||||
|
string const token = lex.GetString();
|
||||||
if (token != "Caption") {
|
if (token != "Caption") {
|
||||||
lyxerr << "InsetCaption::Read: consistency check failed."
|
lyxerr << "InsetCaption::Read: consistency check failed."
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
InsetText::Read(buf, lex);
|
InsetText::Read(buf, lex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string const InsetCaption::EditMessage() const
|
||||||
|
{
|
||||||
|
return _("Opened Caption Inset");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetCaption::draw(BufferView * bv, LyXFont const & f,
|
||||||
|
int baseline, float & x, bool cleared) const
|
||||||
|
{
|
||||||
|
// We must draw the label, we should get the label string
|
||||||
|
// from the enclosing float inset.
|
||||||
|
// The question is: Who should draw the label, the caption inset,
|
||||||
|
// the text inset or the paragraph?
|
||||||
|
// We should also draw the float number (Lgb)
|
||||||
|
|
||||||
|
// See if we can find the name of the float this caption
|
||||||
|
// belongs to.
|
||||||
|
Inset * i1 = owner();
|
||||||
|
Inset * i2 = i1 ? i1->owner() : 0;
|
||||||
|
string const type = static_cast<InsetFloat *>(i2)->type();
|
||||||
|
string const fl = i2 ? floatList.getType(type).name() : N_("Float");
|
||||||
|
|
||||||
|
// Discover the number...
|
||||||
|
// ...
|
||||||
|
string const num = "#";
|
||||||
|
|
||||||
|
// Generate the label
|
||||||
|
string const label = _(fl) + " " + num + ":";
|
||||||
|
|
||||||
|
Painter & pain = bv->painter();
|
||||||
|
int const w = lyxfont::width(label, f);
|
||||||
|
pain.text(int(x), baseline, label, f);
|
||||||
|
x += w;
|
||||||
|
|
||||||
|
InsetText::draw(bv, f, baseline, x, cleared);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int InsetCaption::Latex(Buffer const * buf, ostream & os,
|
||||||
|
bool fragile, bool free_spc) const
|
||||||
|
{
|
||||||
|
// This is a bit too simplistic to take advantage of
|
||||||
|
// caption options we must add more later. (Lgb)
|
||||||
|
// This code is currently only able to handle the simple
|
||||||
|
// \caption{...}, later we will make it take advantage
|
||||||
|
// of the one of the caption packages. (Lgb)
|
||||||
|
ostringstream ost;
|
||||||
|
int const l = InsetText::Latex(buf, ost, fragile, free_spc);
|
||||||
|
os << "\\caption{" << ost.str() << "}\n";
|
||||||
|
return l + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int InsetCaption::Ascii(Buffer const * /*buf*/,
|
||||||
|
ostream & /*os*/, int /*linelen*/) const
|
||||||
|
{
|
||||||
|
#warning Implement me!
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int InsetCaption::DocBook(Buffer const * /*buf*/, ostream & /*os*/) const
|
||||||
|
{
|
||||||
|
#warning Implement me!
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
*
|
*
|
||||||
* LyX, The Document Processor
|
* LyX, The Document Processor
|
||||||
*
|
*
|
||||||
* Copyright 2000 The LyX Team.
|
* Copyright 2000-2001 The LyX Team.
|
||||||
*
|
*
|
||||||
*======================================================
|
*======================================================
|
||||||
*/
|
*/
|
||||||
@ -23,16 +23,60 @@
|
|||||||
*/
|
*/
|
||||||
class InsetCaption : public InsetText {
|
class InsetCaption : public InsetText {
|
||||||
public:
|
public:
|
||||||
|
///
|
||||||
|
InsetCaption();
|
||||||
///
|
///
|
||||||
void Write(Buffer const * buf, std::ostream & os) const;
|
void Write(Buffer const * buf, std::ostream & os) const;
|
||||||
///
|
///
|
||||||
void Read(Buffer const * buf, LyXLex & lex);
|
void Read(Buffer const * buf, LyXLex & lex);
|
||||||
///
|
///
|
||||||
Inset::Code LyxCode() const {
|
virtual
|
||||||
return CAPTION_CODE;
|
bool display() const;
|
||||||
}
|
///
|
||||||
|
virtual
|
||||||
|
bool needFullRow() const;
|
||||||
|
///
|
||||||
|
virtual
|
||||||
|
Inset::Code LyxCode() const;
|
||||||
|
///
|
||||||
|
virtual
|
||||||
|
string const EditMessage() const;
|
||||||
|
///
|
||||||
|
virtual
|
||||||
|
void draw(BufferView * bv, LyXFont const & f,
|
||||||
|
int baseline, float & x, bool cleared) const;
|
||||||
|
///
|
||||||
|
virtual
|
||||||
|
int Latex(Buffer const * buf, std::ostream & os,
|
||||||
|
bool fragile, bool free_spc) const;
|
||||||
|
///
|
||||||
|
virtual
|
||||||
|
int Ascii(Buffer const * buf, std::ostream & os, int linelen) const;
|
||||||
|
///
|
||||||
|
virtual
|
||||||
|
int DocBook(Buffer const * buf, std::ostream & os) const;
|
||||||
protected:
|
protected:
|
||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
inline
|
||||||
|
bool InsetCaption::display() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline
|
||||||
|
bool InsetCaption::needFullRow() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline
|
||||||
|
Inset::Code InsetCaption::LyxCode() const
|
||||||
|
{
|
||||||
|
return CAPTION_CODE;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,7 +20,9 @@
|
|||||||
#include "lyxinset.h"
|
#include "lyxinset.h"
|
||||||
#include "lyxfont.h"
|
#include "lyxfont.h"
|
||||||
#include "LColor.h"
|
#include "LColor.h"
|
||||||
|
#if 1 // NEW_INSETS
|
||||||
|
#include "lyxparagraph.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
class Painter;
|
class Painter;
|
||||||
class InsetText;
|
class InsetText;
|
||||||
@ -145,10 +147,14 @@ protected:
|
|||||||
LColor::color framecolor;
|
LColor::color framecolor;
|
||||||
///
|
///
|
||||||
LyXFont labelfont;
|
LyXFont labelfont;
|
||||||
|
#ifdef NEW_INSETS
|
||||||
|
public:
|
||||||
|
#endif
|
||||||
///
|
///
|
||||||
InsetText * inset;
|
InsetText * inset;
|
||||||
// Instead of making these ints protected we could have a
|
// Instead of making these ints protected we could have a
|
||||||
// protected method "clickInButton" (Lgb)
|
// protected method "clickInButton" (Lgb)
|
||||||
|
protected:
|
||||||
///
|
///
|
||||||
mutable int
|
mutable int
|
||||||
button_length, button_top_y, button_bottom_y;
|
button_length, button_top_y, button_bottom_y;
|
||||||
|
@ -76,10 +76,27 @@ using std::endl;
|
|||||||
// \newfloat{algorithm}{htbp}{loa}[<sect>]
|
// \newfloat{algorithm}{htbp}{loa}[<sect>]
|
||||||
// \floatname{algorithm}{Algorithm}
|
// \floatname{algorithm}{Algorithm}
|
||||||
//
|
//
|
||||||
|
// The intention is that floats should be definable from two places:
|
||||||
|
// - layout files
|
||||||
|
// - the "gui" (i.e. by the user)
|
||||||
|
//
|
||||||
|
// From layout files.
|
||||||
|
// This should only be done for floats defined in a documentclass and that
|
||||||
|
// does not need any additional packages. The two most known floats in this
|
||||||
|
// category is "table" and "figure". Floats defined in layout files are only
|
||||||
|
// stored in lyx files if the user modifies them.
|
||||||
|
//
|
||||||
|
// By the user.
|
||||||
|
// There should be a gui dialog (and also a collection of lyxfuncs) where
|
||||||
|
// the user can modify existing floats and/or create new ones.
|
||||||
|
//
|
||||||
|
// The individual floats will also have some settable
|
||||||
|
// variables: wide and placement.
|
||||||
|
//
|
||||||
// Lgb
|
// Lgb
|
||||||
|
|
||||||
InsetFloat::InsetFloat(string const & type)
|
InsetFloat::InsetFloat(string const & type)
|
||||||
: InsetCollapsable()
|
: InsetCollapsable(), wide_(false)
|
||||||
{
|
{
|
||||||
string lab(_("float:"));
|
string lab(_("float:"));
|
||||||
lab += type;
|
lab += type;
|
||||||
@ -92,7 +109,6 @@ InsetFloat::InsetFloat(string const & type)
|
|||||||
setAutoCollapse(false);
|
setAutoCollapse(false);
|
||||||
floatType_ = type;
|
floatType_ = type;
|
||||||
setInsetName(type);
|
setInsetName(type);
|
||||||
//floatPlacement = "H";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -199,6 +215,21 @@ string const & InsetFloat::type() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void InsetFloat::placement(string const & p)
|
||||||
|
{
|
||||||
|
// Here we should only allow the placement to be set
|
||||||
|
// if a valid value.
|
||||||
|
#warning FIX!
|
||||||
|
floatPlacement_ = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string const & InsetFloat::placement() const
|
||||||
|
{
|
||||||
|
return floatPlacement_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void InsetFloat::wide(bool w)
|
void InsetFloat::wide(bool w)
|
||||||
{
|
{
|
||||||
wide_ = w;
|
wide_ = w;
|
||||||
|
@ -48,6 +48,10 @@ public:
|
|||||||
///
|
///
|
||||||
string const & type() const;
|
string const & type() const;
|
||||||
///
|
///
|
||||||
|
void placement(string const & p);
|
||||||
|
///
|
||||||
|
string const & placement() const;
|
||||||
|
///
|
||||||
void wide(bool w);
|
void wide(bool w);
|
||||||
///
|
///
|
||||||
bool wide() const;
|
bool wide() const;
|
||||||
|
@ -9,6 +9,9 @@
|
|||||||
#include "support/lyxalgo.h"
|
#include "support/lyxalgo.h"
|
||||||
#include "support/filetools.h"
|
#include "support/filetools.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#if 1 // to get NEW_INSETS
|
||||||
|
#include "lyxparagraph.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
using std::sort;
|
using std::sort;
|
||||||
using std::ostream;
|
using std::ostream;
|
||||||
@ -139,10 +142,28 @@ void LyXLex::Pimpl::setCommentChar(char c)
|
|||||||
bool LyXLex::Pimpl::next(bool esc /* = false */)
|
bool LyXLex::Pimpl::next(bool esc /* = false */)
|
||||||
{
|
{
|
||||||
if (!pushTok.empty()) {
|
if (!pushTok.empty()) {
|
||||||
|
#ifndef NEW_INSETS
|
||||||
pushTok.copy(buff, string::npos);
|
pushTok.copy(buff, string::npos);
|
||||||
buff[pushTok.length()] = '\0';
|
buff[pushTok.length()] = '\0';
|
||||||
pushTok.erase();
|
pushTok.erase();
|
||||||
return true;
|
return true;
|
||||||
|
#else
|
||||||
|
// There can have been a whole line pushed so
|
||||||
|
// we extract the first word and leaves the rest
|
||||||
|
// in pushTok. (Lgb)
|
||||||
|
if (pushTok.find(' ') != string::npos) {
|
||||||
|
string tmp;
|
||||||
|
pushTok = split(pushTok, tmp, ' ');
|
||||||
|
tmp.copy(buff, string::npos);
|
||||||
|
buff[tmp.length()] = '\0';
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
pushTok.copy(buff, string::npos);
|
||||||
|
buff[pushTok.length()] = '\0';
|
||||||
|
pushTok.erase();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (!esc) {
|
if (!esc) {
|
||||||
unsigned char c = 0; // getc() returns an int
|
unsigned char c = 0; // getc() returns an int
|
||||||
@ -380,6 +401,15 @@ int LyXLex::Pimpl::lex()
|
|||||||
|
|
||||||
bool LyXLex::Pimpl::EatLine()
|
bool LyXLex::Pimpl::EatLine()
|
||||||
{
|
{
|
||||||
|
#ifndef NEW_INSETS
|
||||||
|
// This is not handling the pushed token
|
||||||
|
if (!pushTok.empty()) {
|
||||||
|
pushTok.copy(buff, string::npos);
|
||||||
|
buff[pushTok.length()] = '\0';
|
||||||
|
pushTok.erase();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
int i = 0;
|
int i = 0;
|
||||||
unsigned char c = '\0';
|
unsigned char c = '\0';
|
||||||
char cc = 0;
|
char cc = 0;
|
||||||
@ -412,10 +442,28 @@ bool LyXLex::Pimpl::EatLine()
|
|||||||
bool LyXLex::Pimpl::nextToken()
|
bool LyXLex::Pimpl::nextToken()
|
||||||
{
|
{
|
||||||
if (!pushTok.empty()) {
|
if (!pushTok.empty()) {
|
||||||
|
#ifndef NEW_INSETS
|
||||||
pushTok.copy(buff, string::npos);
|
pushTok.copy(buff, string::npos);
|
||||||
buff[pushTok.length()] = '\0';
|
buff[pushTok.length()] = '\0';
|
||||||
pushTok.erase();
|
pushTok.erase();
|
||||||
return true;
|
return true;
|
||||||
|
#else
|
||||||
|
// There can have been a whole line pushed so
|
||||||
|
// we extract the first word and leaves the rest
|
||||||
|
// in pushTok. (Lgb)
|
||||||
|
if (pushTok.find(' ') != string::npos) {
|
||||||
|
string tmp;
|
||||||
|
pushTok = split(pushTok, tmp, ' ');
|
||||||
|
tmp.copy(buff, string::npos);
|
||||||
|
buff[tmp.length()] = '\0';
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
pushTok.copy(buff, string::npos);
|
||||||
|
buff[pushTok.length()] = '\0';
|
||||||
|
pushTok.erase();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
status = 0;
|
status = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user