On Fri, Jan 27, 2006 at 10:43:47AM +0100, Helge Hafting wrote: > Martin Vermeer wrote: > > >On Thu, Jan 26, 2006 at 09:11:25AM +0100, Helge Hafting wrote: > > > > > >>Martin Vermeer wrote: > >> > >> > >> > >>>So here it is, the complete patch, still a bit further polished. > >>> > >>> > >>> > >>> > >>Sorry, this does not compile. > >>Changes to paragraph.h seems to break other stuff: > >>
Here corrected patch. - Martin
Index: buffer.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/buffer.C,v
retrieving revision 1.630
diff -u -p -r1.630 buffer.C
--- buffer.C 29 Nov 2005 15:08:34 -0000 1.630
+++ buffer.C 26 Jan 2006 16:38:53 -0000
@@ -1307,6 +1307,9 @@ void Buffer::changeLanguage(Language con
for_each(par_iterator_begin(),
par_iterator_end(),
bind(&Paragraph::changeLanguage, _1, params(), from, to));
+
+ text().current_font.setLanguage(to);
+ text().real_current_font.setLanguage(to);
}
Index: lyxtext.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxtext.h,v
retrieving revision 1.334
diff -u -p -r1.334 lyxtext.h
--- lyxtext.h 1 Jan 2006 20:28:03 -0000 1.334
+++ lyxtext.h 26 Jan 2006 16:38:54 -0000
@@ -53,7 +53,7 @@ public:
typedef lyx::pit_type pit_type;
/// constructor
- explicit LyXText(BufferView *);
+ explicit LyXText(BufferView *, Language const * bp = 0);
///
void init(BufferView *);
@@ -329,6 +329,9 @@ public:
/// delete double space or empty paragraphs around old cursor
bool deleteEmptyParagraphMechanism(LCursor & cur, LCursor & old);
+ /// Get buffer's font from textclass, language from buffer parms
+ LyXFont bufferFont() const;
+
///
friend class LyXScreen;
@@ -341,10 +344,6 @@ public:
LyXFont current_font;
/// the current font
LyXFont real_current_font;
- /// our buffer's default layout font. This is textclass specific
- /* This is actually never initialized! Should be replaced by a
- * defaultfont() method that looks at the textclass (easy). [JMarc]*/
- LyXFont defaultfont_;
///
int background_color_;
Index: paragraph.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph.C,v
retrieving revision 1.418
diff -u -p -r1.418 paragraph.C
--- paragraph.C 30 Dec 2005 19:02:52 -0000 1.418
+++ paragraph.C 26 Jan 2006 16:38:55 -0000
@@ -356,12 +356,12 @@ FontSpan Paragraph::fontSpan(lyx::pos_ty
// Gets uninstantiated font setting at position 0
-LyXFont const Paragraph::getFirstFontSettings() const
+LyXFont const Paragraph::getFirstFontSettings(BufferParams const & bparams)
const
{
if (!empty() && !pimpl_->fontlist.empty())
return pimpl_->fontlist[0].font();
- return LyXFont(LyXFont::ALL_INHERIT);
+ return LyXFont(LyXFont::ALL_INHERIT, bparams.language);
}
@@ -1494,7 +1494,7 @@ Language const *
Paragraph::getParLanguage(BufferParams const & bparams) const
{
if (!empty())
- return getFirstFontSettings().language();
+ return getFirstFontSettings(bparams).language();
#ifdef WITH_WARNINGS
#warning FIXME we should check the prev par as well (Lgb)
#endif
@@ -1513,7 +1513,8 @@ bool Paragraph::isRightToLeftPar(BufferP
void Paragraph::changeLanguage(BufferParams const & bparams,
Language const * from, Language const * to)
{
- for (pos_type i = 0; i < size(); ++i) {
+ // <= to catch the dummy font change at end
+ for (pos_type i = 0; i <= size(); ++i) {
LyXFont font = getFontSettings(bparams, i);
if (font.language() == from) {
font.setLanguage(to);
@@ -1532,7 +1533,8 @@ bool Paragraph::isMultiLingual(BufferPar
for (; cit != end; ++cit)
if (cit->font().language() != ignore_language &&
cit->font().language() != latex_language &&
- cit->font().language() != doc_language)
+ cit->font().language() != doc_language &&
+ cit->font().language() != default_language)
return true;
return false;
}
Index: paragraph.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph.h,v
retrieving revision 1.159
diff -u -p -r1.159 paragraph.h
--- paragraph.h 1 Jan 2006 20:28:03 -0000 1.159
+++ paragraph.h 26 Jan 2006 16:38:56 -0000
@@ -273,7 +273,7 @@ public:
LyXFont const
getFontSettings(BufferParams const &, lyx::pos_type pos) const;
///
- LyXFont const getFirstFontSettings() const;
+ LyXFont const getFirstFontSettings(BufferParams const & bp) const;
/** Get fully instantiated font. If pos == -1, use the layout
font attached to this paragraph.
Index: paragraph_funcs.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/paragraph_funcs.C,v
retrieving revision 1.117
diff -u -p -r1.117 paragraph_funcs.C
--- paragraph_funcs.C 16 Jul 2005 12:02:30 -0000 1.117
+++ paragraph_funcs.C 26 Jan 2006 16:38:56 -0000
@@ -157,7 +157,7 @@ void breakParagraph(BufferParams const &
// Make sure that we keep the language when
// breaking paragrpah.
if (tmp->empty()) {
- LyXFont changed = tmp->getFirstFontSettings();
+ LyXFont changed = tmp->getFirstFontSettings(bparams);
LyXFont old = par.getFontSettings(bparams, par.size());
changed.setLanguage(old.language());
tmp->setFont(0, changed);
Index: rowpainter.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/rowpainter.C,v
retrieving revision 1.163
diff -u -p -r1.163 rowpainter.C
--- rowpainter.C 16 Jan 2006 15:17:17 -0000 1.163
+++ rowpainter.C 28 Jan 2006 05:28:22 -0000
@@ -306,7 +322,6 @@ void RowPainter::paintFromPos(pos_type &
{
pos_type const pos = text_.bidi.vis2log(vpos);
LyXFont orig_font = text_.getFont(par_, pos);
- text_.applyOuterFont(orig_font);
double const orig_x = x_;
@@ -657,7 +672,7 @@ void RowPainter::paintText()
if (running_strikeout && (highly_editable_inset ||
!is_struckout)) {
// Calculate 1/3 height of the buffer's default font
int const middle =
- yo_ -
font_metrics::maxAscent(text_.defaultfont_) / 3;
+ yo_ -
font_metrics::maxAscent(text_.bufferFont()) / 3;
pain_.line(last_strikeout_x, middle, int(x_), middle,
LColor::strikeout, Painter::line_solid,
Painter::line_thin);
running_strikeout = false;
@@ -710,7 +725,7 @@ void RowPainter::paintText()
if (running_strikeout) {
// calculate 1/3 height of the buffer's default font
int const middle =
- yo_ - font_metrics::maxAscent(text_.defaultfont_) / 3;
+ yo_ - font_metrics::maxAscent(text_.bufferFont()) / 3;
pain_.line(last_strikeout_x, middle, int(x_), middle,
LColor::strikeout, Painter::line_solid,
Painter::line_thin);
running_strikeout = false;
Index: text.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text.C,v
retrieving revision 1.639
diff -u -p -r1.639 text.C
--- text.C 19 Dec 2005 12:30:33 -0000 1.639
+++ text.C 26 Jan 2006 16:38:58 -0000
@@ -1692,16 +1692,13 @@ bool LyXText::redoParagraph(pit_type con
// redo insets
// FIXME: We should always use getFont(), see documentation of
// noFontChange() in insetbase.h.
- LyXFont const tclassfont =
- bv()->buffer()->params().getLyXTextClass().defaultfont();
InsetList::iterator ii = par.insetlist.begin();
InsetList::iterator iend = par.insetlist.end();
for (; ii != iend; ++ii) {
Dimension dim;
int const w = maxwidth_ - leftMargin(pit, ii->pos) -
rightMargin(par);
LyXFont const & font = ii->inset->noFontChange() ?
- tclassfont :
- getFont(par, ii->pos);
+ bufferFont() : getFont(par, ii->pos);
MetricsInfo mi(bv(), font, w);
ii->inset->metrics(mi, dim);
}
@@ -2201,8 +2198,9 @@ string LyXText::currentState(LCursor & c
// I think we should only show changes from the default
// font. (Asger)
+ // No, from the document font (MV)
LyXFont font = real_current_font;
- font.reduce(buf.params().getLyXTextClass().defaultfont());
+ font.reduce(bufferFont());
// avoid _(...) re-entrance problem
string const s = font.stateText(&buf.params());
Index: text2.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text2.C,v
retrieving revision 1.638
diff -u -p -r1.638 text2.C
--- text2.C 23 Jan 2006 10:25:41 -0000 1.638
+++ text2.C 26 Jan 2006 16:38:59 -0000
@@ -66,9 +66,11 @@ using std::string;
using std::min;
-LyXText::LyXText(BufferView * bv)
+LyXText::LyXText(BufferView * bv, Language const * lang)
: maxwidth_(bv ? bv->workWidth() : 100),
- current_font(LyXFont::ALL_INHERIT),
+ current_font(LyXFont::ALL_INHERIT,
+ ( bv ? bv->buffer()->params().language
+ : (lang ? lang : default_language))),
background_color_(LColor::background),
bv_owner(bv),
autoBreakRows_(false)
@@ -206,7 +208,7 @@ LyXFont LyXText::getFont(Paragraph const
font.realize(outerFont(pit, pars_));
// Realize with the fonts of lesser depth.
- font.realize(defaultfont_);
+ font.realize(bufferFont());
return font;
}
@@ -220,7 +222,7 @@ LyXFont LyXText::getFont(Paragraph const
// font.
void LyXText::applyOuterFont(LyXFont & font) const {
LyXFont lf(font_);
- lf.reduce(defaultfont_);
+ lf.reduce(bufferFont());
lf.realize(font);
lf.setLanguage(font.language());
font = lf;
@@ -237,7 +239,7 @@ LyXFont LyXText::getLayoutFont(pit_type
LyXFont font = layout->font;
// Realize with the fonts of lesser depth.
//font.realize(outerFont(pit, paragraphs()));
- font.realize(defaultfont_);
+ font.realize(bufferFont());
return font;
}
@@ -252,7 +254,7 @@ LyXFont LyXText::getLabelFont(Paragraph
LyXFont font = layout->labelfont;
// Realize with the fonts of lesser depth.
- font.realize(defaultfont_);
+ font.realize(bufferFont());
return font;
}
@@ -283,12 +285,13 @@ void LyXText::setCharFont(pit_type pit,
}
}
- layoutfont.realize(defaultfont_);
-
+ layoutfont.realize(bufferFont());
+
// Now, reduce font against full layout font
font.reduce(layoutfont);
pars_[pit].setFont(pos, font);
+
}
@@ -1276,6 +1284,16 @@ bool LyXText::deleteEmptyParagraphMechan
return false;
}
+
+
+LyXFont LyXText::bufferFont() const
+{
+ LyXFont font =
+ bv()->buffer()->params().getLyXTextClass().defaultfont();
+ font.setLanguage(bv()->buffer()->params().language);
+ return font;
+}
+
void LyXText::recUndo(pit_type first, pit_type last) const
Index: text3.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text3.C,v
retrieving revision 1.323
diff -u -p -r1.323 text3.C
--- text3.C 31 Dec 2005 11:40:32 -0000 1.323
+++ text3.C 26 Jan 2006 16:39:00 -0000
@@ -1114,12 +1122,6 @@ void LyXText::dispatch(LCursor & cur, Fu
cur.clearSelection();
LyXFont const old_font = real_current_font;
- // Prevents language turds in new lyxtexts under non-english
- BufferParams const & bufparams = cur.buffer().params();
- Language const * lang =
cur.paragraph().getParLanguage(bufparams);
- current_font.setLanguage(lang);
- real_current_font.setLanguage(lang);
-
string::const_iterator cit = cmd.argument.begin();
string::const_iterator end = cmd.argument.end();
for (; cit != end; ++cit)
Index: insets/insetcharstyle.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcharstyle.C,v
retrieving revision 1.39
diff -u -p -r1.39 insetcharstyle.C
--- insets/insetcharstyle.C 25 Nov 2005 14:40:32 -0000 1.39
+++ insets/insetcharstyle.C 26 Jan 2006 16:39:01 -0000
@@ -135,8 +136,9 @@ void InsetCharStyle::metrics(MetricsInfo
{
LyXFont tmpfont = mi.base.font;
getDrawFont(mi.base.font);
- mi.base.font.reduce(LyXFont(LyXFont::ALL_SANE));
mi.base.font.realize(tmpfont);
+ // Needed to propagate doc language (infamous blueline)
+ mi.base.font.setLanguage(tmpfont.language());
mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET;
InsetText::metrics(mi, dim);
mi.base.font = tmpfont;
Index: insets/insettext.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insettext.C,v
retrieving revision 1.623
diff -u -p -r1.623 insettext.C
--- insets/insettext.C 11 Jan 2006 14:22:10 -0000 1.623
+++ insets/insettext.C 26 Jan 2006 16:39:03 -0000
@@ -74,12 +74,16 @@ int InsetText::border_ = 2;
InsetText::InsetText(BufferParams const & bp)
- : drawFrame_(false), frame_color_(LColor::insetframe), text_(0)
+ : drawFrame_(false), frame_color_(LColor::insetframe),
+ text_(0, bp.language)
{
paragraphs().push_back(Paragraph());
paragraphs().back().layout(bp.getLyXTextClass().defaultLayout());
if (bp.tracking_changes)
paragraphs().back().trackChanges();
+ // Dispose of the infamous L-shaped cursor.
+ text_.current_font.setLanguage(bp.language);
+ text_.real_current_font.setLanguage(bp.language);
init();
}
@@ -91,6 +95,10 @@ InsetText::InsetText(InsetText const & i
drawFrame_ = in.drawFrame_;
frame_color_ = in.frame_color_;
text_.paragraphs() = in.text_.paragraphs();
+ // Hand current buffer language down to "cloned" textinsets
+ // e.g. tabular cells
+ text_.current_font = in.text_.current_font;
+ text_.real_current_font = in.text_.real_current_font;
init();
}
pgpu5O3ImxVbw.pgp
Description: PGP signature
