mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-23 02:14:50 +00:00
Fixed cut&paste bugs and added freespacing for ERT Insets.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3115 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
c968dac821
commit
fcb37cc693
@ -1,5 +1,15 @@
|
|||||||
2001-11-29 Juergen Vigna <jug@sad.it>
|
2001-11-29 Juergen Vigna <jug@sad.it>
|
||||||
|
|
||||||
|
* text.C: added support for paragraph::isFreeSpacing()
|
||||||
|
|
||||||
|
* buffer.C: same as above
|
||||||
|
|
||||||
|
* paragraph.h: inserted isFreeSpacing() function to enable
|
||||||
|
FreeSpacing inside InsetERT.
|
||||||
|
|
||||||
|
* CutAndPaste.C (cutSelection/copySelection): set the inset_owner
|
||||||
|
of the paragraph's in the cut/copy buffer to 0!
|
||||||
|
|
||||||
* text2.C (removeRow): remove the assert as it can!
|
* text2.C (removeRow): remove the assert as it can!
|
||||||
|
|
||||||
* lyxtext.h: added helper function firstRow returning firstrow and
|
* lyxtext.h: added helper function firstRow returning firstrow and
|
||||||
|
@ -137,6 +137,12 @@ bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph ** endpar,
|
|||||||
startpar->pasteParagraph(current_view->buffer()->params);
|
startpar->pasteParagraph(current_view->buffer()->params);
|
||||||
(*endpar) = startpar; // this because endpar gets deleted here!
|
(*endpar) = startpar; // this because endpar gets deleted here!
|
||||||
}
|
}
|
||||||
|
// this paragraph's are of noone's owner!
|
||||||
|
Paragraph * p = buf;
|
||||||
|
while(p) {
|
||||||
|
p->setInsetOwner(0);
|
||||||
|
p = p->next();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -188,6 +194,12 @@ bool CutAndPaste::copySelection(Paragraph * startpar, Paragraph * endpar,
|
|||||||
while (tmppar2->size() > tmpi2) {
|
while (tmppar2->size() > tmpi2) {
|
||||||
tmppar2->erase(tmppar2->size() - 1);
|
tmppar2->erase(tmppar2->size() - 1);
|
||||||
}
|
}
|
||||||
|
// this paragraph's are of noone's owner!
|
||||||
|
tmppar = buf;
|
||||||
|
while(tmppar) {
|
||||||
|
tmppar->setInsetOwner(0);
|
||||||
|
tmppar = tmppar->next();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
14
src/buffer.C
14
src/buffer.C
@ -1065,7 +1065,7 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
|
|||||||
par->getLayout());
|
par->getLayout());
|
||||||
|
|
||||||
// Insets don't make sense in a free-spacing context! ---Kayvan
|
// Insets don't make sense in a free-spacing context! ---Kayvan
|
||||||
if (layout.free_spacing) {
|
if (layout.free_spacing || par->isFreeSpacing()) {
|
||||||
if (lex.isOK()) {
|
if (lex.isOK()) {
|
||||||
lex.next();
|
lex.next();
|
||||||
string next_token = lex.getString();
|
string next_token = lex.getString();
|
||||||
@ -1123,7 +1123,7 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
|
|||||||
textclasslist.Style(params.textclass,
|
textclasslist.Style(params.textclass,
|
||||||
par->getLayout());
|
par->getLayout());
|
||||||
|
|
||||||
if (layout.free_spacing) {
|
if (layout.free_spacing || par->isFreeSpacing()) {
|
||||||
par->insertChar(pos, ' ', font);
|
par->insertChar(pos, ' ', font);
|
||||||
} else {
|
} else {
|
||||||
Inset * inset = new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
|
Inset * inset = new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
|
||||||
@ -1364,11 +1364,12 @@ void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos,
|
|||||||
}
|
}
|
||||||
// do not insert consecutive spaces if !free_spacing
|
// do not insert consecutive spaces if !free_spacing
|
||||||
} else if ((*cit == ' ' || *cit == '\t') &&
|
} else if ((*cit == ' ' || *cit == '\t') &&
|
||||||
space_inserted && !layout.free_spacing)
|
space_inserted && !layout.free_spacing &&
|
||||||
|
!par->isFreeSpacing())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
} else if (*cit == '\t') {
|
} else if (*cit == '\t') {
|
||||||
if (!layout.free_spacing) {
|
if (!layout.free_spacing && !par->isFreeSpacing()) {
|
||||||
// tabs are like spaces here
|
// tabs are like spaces here
|
||||||
par->insertChar(pos, ' ', font);
|
par->insertChar(pos, ' ', font);
|
||||||
++pos;
|
++pos;
|
||||||
@ -2927,7 +2928,8 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
|
|||||||
} else {
|
} else {
|
||||||
string sgml_string;
|
string sgml_string;
|
||||||
if (par->sgmlConvertChar(c, sgml_string)
|
if (par->sgmlConvertChar(c, sgml_string)
|
||||||
&& !style.free_spacing) {
|
&& !style.free_spacing && !par->isFreeSpacing())
|
||||||
|
{
|
||||||
// in freespacing mode, spaces are
|
// in freespacing mode, spaces are
|
||||||
// non-breaking characters
|
// non-breaking characters
|
||||||
if (desc_on) {// if char is ' ' then...
|
if (desc_on) {// if char is ' ' then...
|
||||||
@ -3314,7 +3316,7 @@ void Buffer::simpleDocBookOnePar(ostream & os,
|
|||||||
|
|
||||||
if (style.pass_thru) {
|
if (style.pass_thru) {
|
||||||
os << c;
|
os << c;
|
||||||
} else if(style.free_spacing || c != ' ') {
|
} else if(style.free_spacing || par->isFreeSpacing() || c != ' ') {
|
||||||
os << sgml_string;
|
os << sgml_string;
|
||||||
} else if (desc_on ==1) {
|
} else if (desc_on ==1) {
|
||||||
++char_line_count;
|
++char_line_count;
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
* insettext.C: inserted a reinitLyXText function everywhere I delete
|
* insettext.C: inserted a reinitLyXText function everywhere I delete
|
||||||
the paragraphs! This should fixe the crashes we had.
|
the paragraphs! This should fixe the crashes we had.
|
||||||
Also use the new function firstRow() instead of getRowNearY(dummy_y)
|
Also use the new function firstRow() instead of getRowNearY(dummy_y)
|
||||||
|
(paragraph): set the InsetOwner() of the new paragraphs!
|
||||||
|
|
||||||
2001-11-28 André Pönitz <poenitz@gmx.net>
|
2001-11-28 André Pönitz <poenitz@gmx.net>
|
||||||
|
|
||||||
|
@ -376,7 +376,7 @@ int InsetCollapsable::latex(Buffer const * buf, ostream & os,
|
|||||||
return inset.latex(buf, os, fragile, free_spc);
|
return inset.latex(buf, os, fragile, free_spc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
int InsetCollapsable::getMaxWidth(BufferView * bv,
|
int InsetCollapsable::getMaxWidth(BufferView * bv,
|
||||||
UpdatableInset const * in) const
|
UpdatableInset const * in) const
|
||||||
{
|
{
|
||||||
@ -394,6 +394,7 @@ int InsetCollapsable::getMaxWidth(BufferView * bv,
|
|||||||
return UpdatableInset::getMaxWidth(bv, in);
|
return UpdatableInset::getMaxWidth(bv, in);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
void InsetCollapsable::update(BufferView * bv, LyXFont const & font,
|
void InsetCollapsable::update(BufferView * bv, LyXFont const & font,
|
||||||
|
@ -136,8 +136,10 @@ public:
|
|||||||
///
|
///
|
||||||
void setAutoCollapse(bool f) { autocollapse = f; }
|
void setAutoCollapse(bool f) { autocollapse = f; }
|
||||||
#endif
|
#endif
|
||||||
|
#if 0
|
||||||
///
|
///
|
||||||
int getMaxWidth(BufferView *, UpdatableInset const *) const;
|
int getMaxWidth(BufferView *, UpdatableInset const *) const;
|
||||||
|
#endif
|
||||||
///
|
///
|
||||||
LyXText * getLyXText(BufferView const *, bool const recursive) const;
|
LyXText * getLyXText(BufferView const *, bool const recursive) const;
|
||||||
///
|
///
|
||||||
|
@ -2335,6 +2335,12 @@ Paragraph * InsetText::paragraph() const
|
|||||||
void InsetText::paragraph(Paragraph * p)
|
void InsetText::paragraph(Paragraph * p)
|
||||||
{
|
{
|
||||||
par = p;
|
par = p;
|
||||||
|
// set ourself as owner for all the paragraphs inserted!
|
||||||
|
Paragraph * np = par;
|
||||||
|
while (np) {
|
||||||
|
np->setInsetOwner(this);
|
||||||
|
np = np->next();
|
||||||
|
}
|
||||||
reinitLyXText();
|
reinitLyXText();
|
||||||
// redraw myself when asked for
|
// redraw myself when asked for
|
||||||
need_update = INIT;
|
need_update = INIT;
|
||||||
|
@ -928,8 +928,11 @@ void Paragraph::makeSameLayout(Paragraph const * par)
|
|||||||
|
|
||||||
int Paragraph::stripLeadingSpaces(LyXTextClassList::size_type tclass)
|
int Paragraph::stripLeadingSpaces(LyXTextClassList::size_type tclass)
|
||||||
{
|
{
|
||||||
if (textclasslist.Style(tclass, getLayout()).free_spacing)
|
if (textclasslist.Style(tclass, getLayout()).free_spacing ||
|
||||||
|
isFreeSpacing())
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (size()
|
while (size()
|
||||||
@ -2156,3 +2159,13 @@ Paragraph * Paragraph::getParFromID(int id) const
|
|||||||
{
|
{
|
||||||
return pimpl_->getParFromID(id);
|
return pimpl_->getParFromID(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Paragraph::isFreeSpacing() const
|
||||||
|
{
|
||||||
|
// for now we just need this, later should we need this in some
|
||||||
|
// other way we can always add a function to Inset::() too.
|
||||||
|
if (pimpl_->inset_owner && pimpl_->inset_owner->owner())
|
||||||
|
return (pimpl_->inset_owner->owner()->lyxCode() == Inset::ERT_CODE);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -334,6 +334,8 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
///
|
///
|
||||||
bool sgmlConvertChar(char c, string & sgml_string);
|
bool sgmlConvertChar(char c, string & sgml_string);
|
||||||
|
///
|
||||||
|
bool isFreeSpacing() const;
|
||||||
|
|
||||||
ParagraphParameters & params();
|
ParagraphParameters & params();
|
||||||
ParagraphParameters const & params() const;
|
ParagraphParameters const & params() const;
|
||||||
|
@ -219,9 +219,9 @@ void Paragraph::Pimpl::erase(pos_type pos)
|
|||||||
|
|
||||||
|
|
||||||
void Paragraph::Pimpl::simpleTeXBlanks(std::ostream & os, TexRow & texrow,
|
void Paragraph::Pimpl::simpleTeXBlanks(std::ostream & os, TexRow & texrow,
|
||||||
pos_type const i,
|
pos_type const i,
|
||||||
int & column, LyXFont const & font,
|
int & column, LyXFont const & font,
|
||||||
LyXLayout const & style)
|
LyXLayout const & style)
|
||||||
{
|
{
|
||||||
if (style.pass_thru) return;
|
if (style.pass_thru) return;
|
||||||
if (column > tex_code_break_column
|
if (column > tex_code_break_column
|
||||||
@ -230,6 +230,7 @@ void Paragraph::Pimpl::simpleTeXBlanks(std::ostream & os, TexRow & texrow,
|
|||||||
&& (i < size() - 1)
|
&& (i < size() - 1)
|
||||||
// same in FreeSpacing mode
|
// same in FreeSpacing mode
|
||||||
&& !style.free_spacing
|
&& !style.free_spacing
|
||||||
|
&& !owner_->isFreeSpacing()
|
||||||
// In typewriter mode, we want to avoid
|
// In typewriter mode, we want to avoid
|
||||||
// ! . ? : at the end of a line
|
// ! . ? : at the end of a line
|
||||||
&& !(font.family() == LyXFont::TYPEWRITER_FAMILY
|
&& !(font.family() == LyXFont::TYPEWRITER_FAMILY
|
||||||
@ -307,7 +308,7 @@ void Paragraph::Pimpl::simpleTeXSpecialChars(Buffer const * buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int tmp = inset->latex(buf, os, moving_arg,
|
int tmp = inset->latex(buf, os, moving_arg,
|
||||||
style.free_spacing);
|
style.free_spacing);
|
||||||
|
|
||||||
if (close)
|
if (close)
|
||||||
os << "}";
|
os << "}";
|
||||||
|
@ -1746,7 +1746,8 @@ void LyXText::insertChar(BufferView * bview, char c)
|
|||||||
|
|
||||||
bool const freeSpacing =
|
bool const freeSpacing =
|
||||||
textclasslist.Style(bview->buffer()->params.textclass,
|
textclasslist.Style(bview->buffer()->params.textclass,
|
||||||
cursor.row()->par()->getLayout()).free_spacing;
|
cursor.row()->par()->getLayout()).free_spacing ||
|
||||||
|
cursor.row()->par()->isFreeSpacing();
|
||||||
|
|
||||||
|
|
||||||
if (lyxrc.auto_number) {
|
if (lyxrc.auto_number) {
|
||||||
|
@ -2376,8 +2376,11 @@ void LyXText::deleteEmptyParagraphMechanism(BufferView * bview,
|
|||||||
|
|
||||||
// We allow all kinds of "mumbo-jumbo" when freespacing.
|
// We allow all kinds of "mumbo-jumbo" when freespacing.
|
||||||
if (textclasslist.Style(bview->buffer()->params.textclass,
|
if (textclasslist.Style(bview->buffer()->params.textclass,
|
||||||
old_cursor.par()->getLayout()).free_spacing)
|
old_cursor.par()->getLayout()).free_spacing ||
|
||||||
|
old_cursor.par()->isFreeSpacing())
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
bool deleted = false;
|
bool deleted = false;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user