The branch, str-metrics, has been updated. - Log -----------------------------------------------------------------
commit f5ed81b270502b31cf2a6969573dc7488714ea31 Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Wed May 14 15:36:44 2014 +0200 Remove support for LyXRC::force_paint_single_char This workaround is not necessary anymore, and it complicates the code. The variable itself will be removed after the landing of the branch on master. diff --git a/00README_STR_METRICS_BRANCH b/00README_STR_METRICS_BRANCH index 0ab1589..568ac8f 100644 --- a/00README_STR_METRICS_BRANCH +++ b/00README_STR_METRICS_BRANCH @@ -32,14 +32,16 @@ What is done: * Re-implement cursorX and getPosNearX using row elements. -* Implement proper string metrics computation (with cache), when - lyxrc.force_paint_single_char is false. In this case, remove also +* Do not honor lyxrc.force_paint_single_char anymore. This is a + workaround that is not necessary anymore. + +* Implement proper string metrics computation (with cache). Remove useless workarounds which disable kerning and ligatures. -* when lyxrc.force_paint_single_char is false, draw also RtL text - string-wise. This both speeds-up drawing and prepares for code - removal, since we now rely on Qt to do things we use to do by - ourselves (see isArabic* and isHebrew* code in Encodings.cpp). +* Draw also RtL text string-wise. This both speeds-up drawing and + prepares for code removal, since we now rely on Qt to do things we + use to do by ourselves (see isArabic* and isHebrew* code in + Encodings.cpp). * Do not cut strings at separators in RowPainter when text is not justified. This speeds-up painting by reducing the number of strings @@ -50,7 +52,8 @@ Next steps: * Fix bugs uncovered by testing. -* Get rid of LyXRC::force_paint_single_char, which is only a workaround. +* Get rid of LyXRC::force_paint_single_char, which is not used anymore + in the source. * Maybe get rid of LyXRC::rtl_support, which does not have a real use case. diff --git a/src/LyXRC.h b/src/LyXRC.h index 14f73d9..405f935 100644 --- a/src/LyXRC.h +++ b/src/LyXRC.h @@ -551,7 +551,8 @@ public: }; /// ScrollWheelZoom scroll_wheel_zoom; - /// + /// FIXME: this shall be removed, as the source does not refer + /// to it anymore. bool force_paint_single_char; /// int cursor_width; diff --git a/src/frontends/qt4/GuiFontLoader.cpp b/src/frontends/qt4/GuiFontLoader.cpp index 7f08817..d7c015f 100644 --- a/src/frontends/qt4/GuiFontLoader.cpp +++ b/src/frontends/qt4/GuiFontLoader.cpp @@ -165,8 +165,6 @@ QFont symbolFont(QString const & family, bool * ok) upper[0] = family[0].toUpper(); QFont font; - if (lyxrc.force_paint_single_char) - font.setKerning(false); font.setFamily(family); if (isChosenFont(font, family)) { @@ -257,8 +255,6 @@ static QString makeFontName(QString const & family, QString const & foundry) GuiFontInfo::GuiFontInfo(FontInfo const & f) : metrics(QFont()) { - if (lyxrc.force_paint_single_char) - font.setKerning(false); QString const pat = symbolFamily(f.family()); if (!pat.isEmpty()) { bool ok; diff --git a/src/frontends/qt4/GuiFontMetrics.cpp b/src/frontends/qt4/GuiFontMetrics.cpp index 4be0fb2..27d4446 100644 --- a/src/frontends/qt4/GuiFontMetrics.cpp +++ b/src/frontends/qt4/GuiFontMetrics.cpp @@ -112,18 +112,12 @@ int GuiFontMetrics::rbearing(char_type c) const int GuiFontMetrics::width(docstring const & s) const { int w = 0; - if (lyxrc.force_paint_single_char) { - size_t const ls = s.size(); - for (size_t i = 0; i < ls; ++i) - w += width(s[i]); + map<docstring, int>::const_iterator it = strwidth_cache_.find(s); + if (it != strwidth_cache_.end()) { + w = it->second; } else { - map<docstring, int>::const_iterator it = strwidth_cache_.find(s); - if (it != strwidth_cache_.end()) { - w = it->second; - } else { - w = metrics_.width(toqstr(s)); - strwidth_cache_[s] = w; - } + w = metrics_.width(toqstr(s)); + strwidth_cache_[s] = w; } return w; } diff --git a/src/frontends/qt4/GuiPainter.cpp b/src/frontends/qt4/GuiPainter.cpp index ca63966..1b81d62 100644 --- a/src/frontends/qt4/GuiPainter.cpp +++ b/src/frontends/qt4/GuiPainter.cpp @@ -321,8 +321,6 @@ int GuiPainter::text(int x, int y, docstring const & s, // occurs at a line-break. As a kludge, we force Qt to // render this glyph using a one-column line. // This is needed for some math glyphs. - // FIXME In texted, this behaves differently depending - // on lyxrc.force_paint_single_char status. // Should the soft hyphen char be displayed at all? // I don't think so (i.e., Qt is correct as far as // texted is concerned). /spitz diff --git a/src/rowpainter.cpp b/src/rowpainter.cpp index 8286ec7..6dc975f 100644 --- a/src/rowpainter.cpp +++ b/src/rowpainter.cpp @@ -200,9 +200,6 @@ void RowPainter::paintChars(pos_type & vpos, Font const & font) // collect as much similar chars as we can for (++vpos ; vpos < end ; ++vpos) { - if (lyxrc.force_paint_single_char) - break; - pos = bidi_.vis2log(vpos); if (pos < font_span.first || pos > font_span.last) break; commit 178751a26a14c1ec2144fd0a85efee723ee4c6d2 Merge: c8d3203 d7e9ab0 Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Wed May 14 15:18:36 2014 +0200 Merge remote-tracking branch 'origin/master' into str-metrics diff --cc src/frontends/qt4/GuiFontMetrics.cpp index b753a29,e007b4a..4be0fb2 --- a/src/frontends/qt4/GuiFontMetrics.cpp +++ b/src/frontends/qt4/GuiFontMetrics.cpp @@@ -116,47 -108,23 +109,22 @@@ int GuiFontMetrics::rbearing(char_type } - int GuiFontMetrics::smallcapsWidth(char_type c) const - { - // FIXME: Optimisation probably needed: we don't use the width cache. - if (is_utf16(c)) { - QChar const qc = ucs4_to_qchar(c); - QChar const uc = qc.toUpper(); - if (qc != uc) - return smallcaps_metrics_.width(uc); - else - return metrics_.width(qc); - } else { - QString const s = toqstr(docstring(1, c)); - QString const us = s.toUpper(); - if (s != us) - return smallcaps_metrics_.width(us); - else - return metrics_.width(s); - } - } - - int GuiFontMetrics::width(docstring const & s) const { - size_t ls = s.size(); int w = 0; - for (unsigned int i = 0; i < ls; ++i) { - //FIXME: we need to detect surrogate pairs and act accordingly - /** - if isSurrogateBase(s[i]) { - docstring c = s[i]; - w += metrics_.width(toqstr(c + s[i + 1])); - ++i; + if (lyxrc.force_paint_single_char) { + size_t const ls = s.size(); + for (size_t i = 0; i < ls; ++i) + w += width(s[i]); - } else if (smallcaps_shape_) { - size_t const ls = s.size(); - for (size_t i = 0; i < ls; ++i) - w += smallcapsWidth(s[i]); + } else { + map<docstring, int>::const_iterator it = strwidth_cache_.find(s); + if (it != strwidth_cache_.end()) { + w = it->second; + } else { + w = metrics_.width(toqstr(s)); + strwidth_cache_[s] = w; } - else - */ - w += width(s[i]); } - return w; } commit d7e9ab08a3497219136b2f8af27ce4a348b990ca Author: Juergen Spitzmueller <sp...@lyx.org> Date: Wed May 7 12:33:39 2014 +0200 Listings: Validate skip amounts correctly. Fixes: #7373. diff --git a/src/insets/InsetListingsParams.cpp b/src/insets/InsetListingsParams.cpp index a24d43f..d365d89 100644 --- a/src/insets/InsetListingsParams.cpp +++ b/src/insets/InsetListingsParams.cpp @@ -35,6 +35,7 @@ enum param_type { TRUEFALSE, // accept 'true' or 'false' INTEGER, // accept an integer LENGTH, // accept a latex length + SKIP, // accept a skip or a length ONEOF, // accept one of a few values SUBSETOF // accept a string composed of given characters }; @@ -93,6 +94,9 @@ private: }; +char const * allowed_skips = "\\smallskipamount,\\medskipamount,\\bigskipamount"; + + docstring ListingsParam::validate(string const & par) const { bool unclosed = false; @@ -163,6 +167,20 @@ docstring ListingsParam::validate(string const & par) const return _("Unbalanced braces!"); return docstring(); + case SKIP: + if (par2.empty() && !onoff_) { + if (!hint_.empty()) + return hint_; + else + return bformat(_("Please specify a LaTeX length expression or a skip amount (%1$s)"), + from_ascii(subst(allowed_skips, ",", ", "))); + } + if (!isValidLength(par2) && tokenPos(allowed_skips, ',', par2) == -1) + return _("Not a valid LaTeX length expression or skip amount."); + if (unclosed) + return _("Unbalanced braces!"); + return docstring(); + case ONEOF: { if (par2.empty() && !onoff_) { if (!hint_.empty()) @@ -296,11 +314,11 @@ ParValidator::ParValidator() all_params_["floatplacement"] = ListingsParam("tbp", false, SUBSETOF, "tbp", empty_hint); all_params_["aboveskip"] = - ListingsParam("\\medskipamount", false, LENGTH, "", empty_hint); + ListingsParam("\\medskipamount", false, SKIP, "", empty_hint); all_params_["belowskip"] = - ListingsParam("\\medskipamount", false, LENGTH, "", empty_hint); + ListingsParam("\\medskipamount", false, SKIP, "", empty_hint); all_params_["lineskip"] = - ListingsParam("", false, LENGTH, "", empty_hint); + ListingsParam("", false, SKIP, "", empty_hint); all_params_["boxpos"] = ListingsParam("", false, SUBSETOF, "bct", empty_hint); all_params_["print"] = @@ -423,9 +441,9 @@ ParValidator::ParValidator() all_params_["captionpos"] = ListingsParam("", false, SUBSETOF, "tb", empty_hint); all_params_["abovecaptionskip"] = - ListingsParam("", false, LENGTH, "", empty_hint); + ListingsParam("", false, SKIP, "", empty_hint); all_params_["belowcaptionskip"] = - ListingsParam("", false, LENGTH, "", empty_hint); + ListingsParam("", false, SKIP, "", empty_hint); all_params_["linewidth"] = ListingsParam("", false, LENGTH, "", empty_hint); all_params_["xleftmargin"] = commit 015333d987ae029aa1a6d3bcab3e96d70658a256 Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Wed May 7 12:06:56 2014 +0200 Rely on Qt to handle small caps text This has the advantage of simplifying our code and to produce the correct output: the small capitals should have the exact same width as the lower case letters. The slanted fonts are also translated to oblique on Qt side, but this does not seems to have an effect in my testing. It may be that proper oblique fonts need to be installed. diff --git a/src/frontends/qt4/GuiFontLoader.cpp b/src/frontends/qt4/GuiFontLoader.cpp index 9fd2060..3d0f2b0 100644 --- a/src/frontends/qt4/GuiFontLoader.cpp +++ b/src/frontends/qt4/GuiFontLoader.cpp @@ -304,8 +304,13 @@ GuiFontInfo::GuiFontInfo(FontInfo const & f) switch (f.realShape()) { case ITALIC_SHAPE: + font.setStyle(QFont::StyleItalic); + break; case SLANTED_SHAPE: - font.setItalic(true); + font.setStyle(QFont::StyleOblique); + break; + case SMALLCAPS_SHAPE: + font.setCapitalization(QFont::SmallCaps); break; default: break; @@ -327,19 +332,7 @@ GuiFontInfo::GuiFontInfo(FontInfo const & f) LYXERR(Debug::FONT, "The font has size: " << font.pointSizeF()); - if (f.realShape() != SMALLCAPS_SHAPE) { - metrics = GuiFontMetrics(font); - } else { - // handle small caps ourselves ... - FontInfo smallfont = f; - smallfont.decSize().decSize().setShape(UP_SHAPE); - QFont font2(font); - font2.setKerning(false); - font2.setPointSizeF(convert<double>(lyxrc.font_sizes[smallfont.size()]) - * lyxrc.zoom / 100.0); - - metrics = GuiFontMetrics(font, font2); - } + metrics = GuiFontMetrics(font); } diff --git a/src/frontends/qt4/GuiFontMetrics.cpp b/src/frontends/qt4/GuiFontMetrics.cpp index 9304465..e007b4a 100644 --- a/src/frontends/qt4/GuiFontMetrics.cpp +++ b/src/frontends/qt4/GuiFontMetrics.cpp @@ -40,7 +40,7 @@ namespace { * these are not real ucs4 characters. These are codepoints in the * computer modern fonts used, nothing unicode related. * See comment in QLPainter::text() for more explanation. - **/ + **/ inline QChar const ucs4_to_qchar(char_type const ucs4) { LATTEST(is_utf16(ucs4)); @@ -49,14 +49,7 @@ inline QChar const ucs4_to_qchar(char_type const ucs4) } // anon namespace -GuiFontMetrics::GuiFontMetrics(QFont const & font) -: metrics_(font, 0), smallcaps_metrics_(font), smallcaps_shape_(false) -{ -} - - -GuiFontMetrics::GuiFontMetrics(QFont const & font, QFont const & smallcaps_font) -: metrics_(font, 0), smallcaps_metrics_(smallcaps_font), smallcaps_shape_(true) +GuiFontMetrics::GuiFontMetrics(QFont const & font) : metrics_(font, 0) { } @@ -115,27 +108,6 @@ int GuiFontMetrics::rbearing(char_type c) const } -int GuiFontMetrics::smallcapsWidth(char_type c) const -{ - // FIXME: Optimisation probably needed: we don't use the width cache. - if (is_utf16(c)) { - QChar const qc = ucs4_to_qchar(c); - QChar const uc = qc.toUpper(); - if (qc != uc) - return smallcaps_metrics_.width(uc); - else - return metrics_.width(qc); - } else { - QString const s = toqstr(docstring(1, c)); - QString const us = s.toUpper(); - if (s != us) - return smallcaps_metrics_.width(us); - else - return metrics_.width(s); - } -} - - int GuiFontMetrics::width(docstring const & s) const { size_t ls = s.size(); @@ -145,10 +117,7 @@ int GuiFontMetrics::width(docstring const & s) const /** if isSurrogateBase(s[i]) { docstring c = s[i]; - if (smallcaps_shape_) - w += metrics_.width(toqstr(c + s[i + 1])); - else - w += smallcaps_metrics_.width(toqstr(c + s[i + 1])); + w += metrics_.width(toqstr(c + s[i + 1])); ++i; } else @@ -230,9 +199,6 @@ GuiFontMetrics::AscendDescend const GuiFontMetrics::fillMetricsCache( int GuiFontMetrics::width(char_type c) const { - if (smallcaps_shape_) - return smallcapsWidth(c); - int value = width_cache_.value(c, outOfLimitMetric); if (value != outOfLimitMetric) return value; @@ -250,7 +216,7 @@ int GuiFontMetrics::width(char_type c) const int GuiFontMetrics::ascent(char_type c) const { - static AscendDescend const outOfLimitAD = + static AscendDescend const outOfLimitAD = {outOfLimitMetric, outOfLimitMetric}; AscendDescend value = metrics_cache_.value(c, outOfLimitAD); if (value.ascent != outOfLimitMetric) @@ -263,7 +229,7 @@ int GuiFontMetrics::ascent(char_type c) const int GuiFontMetrics::descent(char_type c) const { - static AscendDescend const outOfLimitAD = + static AscendDescend const outOfLimitAD = {outOfLimitMetric, outOfLimitMetric}; AscendDescend value = metrics_cache_.value(c, outOfLimitAD); if (value.descent != outOfLimitMetric) diff --git a/src/frontends/qt4/GuiFontMetrics.h b/src/frontends/qt4/GuiFontMetrics.h index 5da137e..be36dbf 100644 --- a/src/frontends/qt4/GuiFontMetrics.h +++ b/src/frontends/qt4/GuiFontMetrics.h @@ -26,7 +26,6 @@ class GuiFontMetrics : public FontMetrics { public: GuiFontMetrics(QFont const & font); - GuiFontMetrics(QFont const & font, QFont const & smallcaps_font); virtual ~GuiFontMetrics() {} @@ -54,13 +53,8 @@ public: int width(QString const & str) const; private: - int smallcapsWidth(char_type c) const; - /// Metrics on the font QFontMetrics metrics_; - QFontMetrics smallcaps_metrics_; - - bool smallcaps_shape_; /// Cache of char widths mutable QHash<char_type, int> width_cache_; diff --git a/src/frontends/qt4/GuiPainter.cpp b/src/frontends/qt4/GuiPainter.cpp index 40cd37e..ca63966 100644 --- a/src/frontends/qt4/GuiPainter.cpp +++ b/src/frontends/qt4/GuiPainter.cpp @@ -276,33 +276,6 @@ int GuiPainter::text(int x, int y, char_type c, FontInfo const & f) } -int GuiPainter::smallCapsText(int x, int y, - QString const & s, FontInfo const & f) -{ - FontInfo smallfont(f); - smallfont.decSize().decSize().setShape(UP_SHAPE); - - QFont const & qfont = getFont(f); - QFont const & qsmallfont = getFont(smallfont); - - setQPainterPen(computeColor(f.realColor())); - int textwidth = 0; - size_t const ls = s.length(); - for (unsigned int i = 0; i < ls; ++i) { - QChar const c = s[i].toUpper(); - if (c != s.at(i)) { - setFont(qsmallfont); - } else { - setFont(qfont); - } - if (isDrawingEnabled()) - drawText(x + textwidth, y, c); - textwidth += fontMetrics().width(c); - } - return textwidth; -} - - int GuiPainter::text(int x, int y, docstring const & s, FontInfo const & f) { @@ -334,12 +307,6 @@ int GuiPainter::text(int x, int y, docstring const & s, int textwidth; - if (f.realShape() == SMALLCAPS_SHAPE) { - textwidth = smallCapsText(x, y, str, f); - textDecoration(f, x, y, textwidth); - return textwidth; - } - // Here we use the font width cache instead of // textwidth = fontMetrics().width(str); // because the above is awfully expensive on MacOSX diff --git a/src/frontends/qt4/GuiPainter.h b/src/frontends/qt4/GuiPainter.h index 2d2cf3f..a4768c3 100644 --- a/src/frontends/qt4/GuiPainter.h +++ b/src/frontends/qt4/GuiPainter.h @@ -144,13 +144,6 @@ private: /// draw a bevelled button border void buttonFrame(int x, int y, int w, int h); - /// draw small caps text - /** - \return width of the drawn text. - */ - int smallCapsText(int x, int y, - QString const & str, FontInfo const & f); - /// set pen parameters void setQPainterPen(QColor const & col, line_style ls = line_solid, float lw = thin_line); commit 5368645e70347d0d9b12ab549f5f2857e3abe24f Author: Juergen Spitzmueller <sp...@lyx.org> Date: Wed May 7 08:09:04 2014 +0200 Simplification diff --git a/src/insets/InsetListingsParams.cpp b/src/insets/InsetListingsParams.cpp index 572a806..a24d43f 100644 --- a/src/insets/InsetListingsParams.cpp +++ b/src/insets/InsetListingsParams.cpp @@ -890,8 +890,7 @@ bool InsetListingsParams::isFloat() const string InsetListingsParams::getParamValue(string const & param) const { - // is this parameter defined? - string par = (hasParam(param)) ? getValue(param) : string(); + string par = getValue(param); if (prefixIs(par, "{") && suffixIs(par, "}")) return par.substr(1, par.size() - 2); else commit ef05f7cca9ed6a5c5a8ddab579c4fe5947cd10ae Author: Juergen Spitzmueller <sp...@lyx.org> Date: Tue May 6 20:22:25 2014 +0200 Store InsetListingsParams in a vector of pairs, not a map, since order of insertion matters. Fixes: #8144, #5203. diff --git a/src/insets/InsetListingsParams.cpp b/src/insets/InsetListingsParams.cpp index 62c1dbe..572a806 100644 --- a/src/insets/InsetListingsParams.cpp +++ b/src/insets/InsetListingsParams.cpp @@ -726,11 +726,11 @@ void InsetListingsParams::read(Lexer & lex) string InsetListingsParams::params(string const & sep) const { string par; - for (map<string, string>::const_iterator it = params_.begin(); - it != params_.end(); ++it) { + keyValuePair::const_iterator it = params_.begin(); + for (; it != params_.end(); ++it) { if (!par.empty()) par += sep; - // key=value,key=value1 is stored in params_ as key=value,key_=value1. + // key=value,key=value1 is stored in params_ as key=value,key_=value1. if (it->second.empty()) par += rtrim(it->first, "_"); else @@ -740,6 +740,28 @@ string InsetListingsParams::params(string const & sep) const } +bool InsetListingsParams::hasParam(string const & key) const +{ + keyValuePair::const_iterator it = params_.begin(); + for (; it != params_.end(); ++it) { + if (it->first == key) + return true; + } + return false; +} + + +string InsetListingsParams::getValue(string const & key) const +{ + keyValuePair::const_iterator it = params_.begin(); + for (; it != params_.end(); ++it) { + if (it->first == key) + return it->second; + } + return string(); +} + + void InsetListingsParams::addParam(string const & key, string const & value, bool replace) { @@ -748,19 +770,19 @@ void InsetListingsParams::addParam(string const & key, // duplicate parameters! string keyname = key; - if (!replace && params_.find(key) != params_.end()) + if (!replace && hasParam(key)) // key=value,key=value1 is allowed in listings // use key_, key__, key___ etc to avoid name conflict - while (params_.find(keyname += '_') != params_.end()) { } + while (hasParam(keyname += '_')) { } // check onoff flag // onoff parameter with value false if (!par_validator) par_validator = new ParValidator; if (par_validator->onoff(key) && (value == "false" || value == "{false}")) - params_[keyname] = string(); + params_.push_back(make_pair(keyname, string())); // if the parameter is surrounded with {}, good else if (prefixIs(value, "{") && suffixIs(value, "}")) - params_[keyname] = value; + params_.push_back(make_pair(keyname, value)); // otherwise, check if {} is needed. Add {} to all values with // non-ascii/number characters, just to be safe else { @@ -771,9 +793,9 @@ void InsetListingsParams::addParam(string const & key, break; } if (has_special_char) - params_[keyname] = "{" + value + "}"; + params_.push_back(make_pair(keyname, "{" + value + "}")); else - params_[keyname] = value; + params_.push_back(make_pair(keyname, value)); } } @@ -862,15 +884,14 @@ void InsetListingsParams::fromEncodedString(string const & in) bool InsetListingsParams::isFloat() const { - return params_.find("float") != params_.end(); + return hasParam("float"); } string InsetListingsParams::getParamValue(string const & param) const { // is this parameter defined? - map<string, string>::const_iterator it = params_.find(param); - string par = (it == params_.end()) ? string() : it->second; + string par = (hasParam(param)) ? getValue(param) : string(); if (prefixIs(par, "{") && suffixIs(par, "}")) return par.substr(1, par.size() - 2); else @@ -883,9 +904,11 @@ docstring InsetListingsParams::validate() const docstring msg; if (!par_validator) par_validator = new ParValidator; - for (map<string, string>::const_iterator it = params_.begin(); - it != params_.end(); ++it) { - msg = par_validator->validate(it->first, it->second); + // return msg for first key=value pair which is incomplete or has an error + keyValuePair::const_iterator it = params_.begin(); + for (; it != params_.end(); ++it) { + // key trimmed + msg = par_validator->validate(rtrim(it->first, "_"), it->second); if (!msg.empty()) return msg; } diff --git a/src/insets/InsetListingsParams.h b/src/insets/InsetListingsParams.h index 6c2d3f2..c956643 100644 --- a/src/insets/InsetListingsParams.h +++ b/src/insets/InsetListingsParams.h @@ -83,8 +83,15 @@ private: /// inline or normal listings bool inline_; + /// Do we have a param with the given \c key? + bool hasParam(std::string const & key) const; + /// return the value for the given \c key, if avaible, else empty string + std::string getValue(std::string const & key) const; + /// key-value pairs of the parameters - std::map<std::string, std::string> params_; + // Use a vector of pairs in order to maintain the order of insertion. + typedef std::vector<std::pair<std::string, std::string> > keyValuePair; + keyValuePair params_; /// collapsable status InsetCollapsable::CollapseStatus status_; commit e43e4456eac72295f228b4819caf81e07af84052 Author: Juergen Spitzmueller <sp...@lyx.org> Date: Tue May 6 20:17:03 2014 +0200 Fix typos in InsetListingsParams validator diff --git a/src/insets/InsetListingsParams.cpp b/src/insets/InsetListingsParams.cpp index fa488c0..62c1dbe 100644 --- a/src/insets/InsetListingsParams.cpp +++ b/src/insets/InsetListingsParams.cpp @@ -500,11 +500,9 @@ ParValidator::ParValidator() ListingsParam("", false, ALL, "", empty_hint); all_params_["escapeinside"] = ListingsParam("", false, ALL, "", empty_hint); - all_params_["escepeinside"] = + all_params_["escapebegin"] = ListingsParam("", false, ALL, "", empty_hint); - all_params_["escepebegin"] = - ListingsParam("", false, ALL, "", empty_hint); - all_params_["escepeend"] = + all_params_["escapeend"] = ListingsParam("", false, ALL, "", empty_hint); all_params_["fancyvrb"] = ListingsParam("", false, TRUEFALSE, "", empty_hint); commit fdd5a1bd5f474a9ad1c02c32f4d660f7d29aa40f Author: Kornel Benko <kor...@lyx.org> Date: Tue May 6 17:24:00 2014 +0200 make build: Versioning of lyx.svg (missed in previous commit) diff --git a/src/frontends/qt4/CMakeLists.txt b/src/frontends/qt4/CMakeLists.txt index 16d8b51..f0675e2 100644 --- a/src/frontends/qt4/CMakeLists.txt +++ b/src/frontends/qt4/CMakeLists.txt @@ -30,6 +30,7 @@ add_custom_command( -DIMAGES_DIR=${TOP_SRC_DIR}/lib/images -DRESOURCE_NAME=${resource_name} -DMAPPED_DIR=${TOP_SRC_DIR}/lib/ + -DSUFFIX=${LYX_INSTALL_SUFFIX} -P ${TOP_SCRIPT_PATH}/LyXCreateImagesResource.cmake ) commit aa7dbdef37232543c7b4955e219d18ba222bb116 Author: Kornel Benko <kor...@lyx.org> Date: Tue May 6 17:21:13 2014 +0200 Cmake build: Add also reference to versioned lyx.svg to the resources file diff --git a/development/cmake/scripts/LyXCreateImagesResource.cmake b/development/cmake/scripts/LyXCreateImagesResource.cmake index f360d1c..ead1e4a 100644 --- a/development/cmake/scripts/LyXCreateImagesResource.cmake +++ b/development/cmake/scripts/LyXCreateImagesResource.cmake @@ -65,6 +65,11 @@ foreach (_current_FILE ${images}) file(APPEND ${RESOURCE_NAME} " <file alias=\"${_file_name}\">${_abs_FILE}</file>\n") endforeach (_current_FILE) +# copy lyx.svg too (and use versioning) +get_filename_component(_abs_FILE "${IMAGES_DIR}/lyx.svg" ABSOLUTE) +string(REGEX REPLACE "${MAPPED_DIR}" "" _file_name ${_abs_FILE}) +file(APPEND ${RESOURCE_NAME} " <file alias=\"lyx${SUFFIX}\">${_abs_FILE}</file>\n") + file(APPEND ${RESOURCE_NAME} "</qresource>\n") file(APPEND ${RESOURCE_NAME} "</RCC>\n") commit ac9a2fa9f8eea4afc9d5afee48328b900838aa34 Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Tue May 6 14:29:42 2014 +0200 Turn an error message into a Debug::LOCALE warning diff --git a/src/support/Messages.cpp b/src/support/Messages.cpp index ef6bb2d..fd5d228 100644 --- a/src/support/Messages.cpp +++ b/src/support/Messages.cpp @@ -250,7 +250,7 @@ bool Messages::readMoFile() string const code = realCode(lang_); if (code.empty()) { - LYXERR0("Cannot find translation for language " << lang_); + LYXERR(Debug::LOCALE, "Cannot find translation for language " << lang_); return false; } commit 3cbd343a55780dc646833bc3a1d3373909e950ca Author: Jean-Marc Lasgouttes <lasgout...@lyx.org> Date: Mon Apr 21 16:10:49 2014 +0200 Cleanup the code for boost configuration diff --git a/config/common.am b/config/common.am index 6f7e310..cabc35a 100644 --- a/config/common.am +++ b/config/common.am @@ -28,14 +28,4 @@ endif SUFFIXES = .gch -if USE_INCLUDED_BOOST -BOOST_INCLUDES = -I$(top_srcdir)/boost -BOOST_LIBS = $(top_builddir)/boost/liblyxboost.a -else -BOOST_INCLUDES = -BOOST_REGEX = -lboost_regex$(BOOST_MT) -BOOST_SIGNALS = -lboost_signals$(BOOST_MT) -BOOST_LIBS = $(BOOST_REGEX) $(BOOST_SIGNALS) -endif - LIBS = diff --git a/config/lyxinclude.m4 b/config/lyxinclude.m4 index 61ea48d..ac0b642 100644 --- a/config/lyxinclude.m4 +++ b/config/lyxinclude.m4 @@ -311,28 +311,39 @@ AC_DEFUN([LYX_USE_INCLUDED_BOOST],[ [lyx_cv_with_included_boost=yes]) AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes) AC_MSG_RESULT([$lyx_cv_with_included_boost]) - if test x$lyx_cv_with_included_boost != xyes ; then - AC_LANG_PUSH(C++) - save_LIBS=$LIBS - - LIBS="$save_LIBS -lboost_signals -lm" - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <boost/signal.hpp>], [boost::signal<void ()> s;])], [lyx_boost_plain=yes], []) - LIBS="$save_LIBS -lboost_signals-mt -lm $LIBTHREAD" - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <boost/signal.hpp>], [boost::signal<void ()> s;])], [lyx_boost_mt=yes], []) - - LIBS=$save_LIBS - AC_LANG_POP(C++) - - if test x$lyx_boost_mt = xyes ; then - BOOST_MT="-mt" - else - BOOST_MT="" - if test x$lyx_boost_plain != xyes ; then - AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)]) - fi - fi - AC_SUBST(BOOST_MT) + if test x$lyx_cv_with_included_boost = xyes ; then + BOOST_INCLUDES='-I$(top_srcdir)/boost' + BOOST_LIBS='$(top_builddir)/boost/liblyxboost.a' + else + AC_LANG_PUSH(C++) + save_LIBS=$LIBS + + AC_MSG_CHECKING([for multithreaded boost libraries]) + LIBS="$save_LIBS -lboost_signals-mt -lm $LIBTHREAD" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <boost/signal.hpp>], + [boost::signal<void ()> s;])], + [AC_MSG_RESULT([yes]) + BOOST_MT="-mt"], + [AC_MSG_RESULT([no]) + AC_MSG_CHECKING([for plain boost libraries]) + LIBS="$save_LIBS -lboost_signals -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include <boost/signal.hpp>], + [boost::signal<void ()> s;])], + [AC_MSG_RESULT([yes]) + BOOST_MT=""], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)]) + ]) + ]) + LIBS=$save_LIBS + AC_LANG_POP(C++) + BOOST_INCLUDES= + BOOST_LIBS="-lboost_regex${BOOST_MT} -lboost_signals${BOOST_MT}" fi + AC_SUBST(BOOST_INCLUDES) + AC_SUBST(BOOST_LIBS) ]) ----------------------------------------------------------------------- Summary of changes: 00README_STR_METRICS_BRANCH | 17 +- CMakeLists.txt | 1 + README.localization | 8 +- boost/boost/any.hpp | 144 +- boost/boost/assert.hpp | 24 +- boost/boost/config.hpp | 17 +- boost/boost/config/auto_link.hpp | 8 +- boost/boost/config/compiler/borland.hpp | 12 +- boost/boost/config/compiler/clang.hpp | 42 +- boost/boost/config/compiler/codegear.hpp | 12 +- boost/boost/config/compiler/common_edg.hpp | 27 +- boost/boost/config/compiler/cray.hpp | 6 +- boost/boost/config/compiler/digitalmars.hpp | 26 +- boost/boost/config/compiler/gcc.hpp | 137 +- boost/boost/config/compiler/gcc_xml.hpp | 16 +- boost/boost/config/compiler/hp_acc.hpp | 22 +- boost/boost/config/compiler/intel.hpp | 83 +- boost/boost/config/compiler/metrowerks.hpp | 24 +- boost/boost/config/compiler/mpw.hpp | 12 +- boost/boost/config/compiler/nvcc.hpp | 12 - boost/boost/config/compiler/pathscale.hpp | 9 +- boost/boost/config/compiler/pgi.hpp | 7 + boost/boost/config/compiler/sunpro_cc.hpp | 24 +- boost/boost/config/compiler/vacpp.hpp | 33 +- boost/boost/config/compiler/visualc.hpp | 154 +- boost/boost/config/platform/vxworks.hpp | 368 +- boost/boost/config/platform/win32.hpp | 4 +- boost/boost/config/select_compiler_config.hpp | 18 +- boost/boost/config/stdlib/dinkumware.hpp | 10 +- boost/boost/config/stdlib/libstdcpp3.hpp | 3 +- boost/boost/config/suffix.hpp | 165 +- boost/boost/container/container_fwd.hpp | 19 +- boost/boost/cstdint.hpp | 219 +- boost/boost/detail/endian.hpp | 73 +- boost/boost/detail/interlocked.hpp | 72 +- boost/boost/detail/is_function_ref_tester.hpp | 3 +- boost/boost/detail/limits.hpp | 449 -- boost/boost/exception/exception.hpp | 2 +- boost/boost/functional/hash/detail/hash_float.hpp | 42 +- boost/boost/functional/hash/hash.hpp | 11 + boost/boost/integer_traits.hpp | 2 +- boost/boost/lexical_cast.hpp | 312 +- boost/boost/limits.hpp | 2 +- boost/boost/math/policies/policy.hpp | 10 + .../math/special_functions/detail/round_fwd.hpp | 21 +- boost/boost/math/special_functions/fpclassify.hpp | 98 +- boost/boost/math/special_functions/math_fwd.hpp | 278 +- boost/boost/math/special_functions/sign.hpp | 21 +- boost/boost/math/tools/config.hpp | 47 +- boost/boost/math/tools/promotion.hpp | 27 +- boost/boost/mpl/assert.hpp | 76 +- boost/boost/noncopyable.hpp | 18 +- boost/boost/predef/architecture.h | 30 + boost/boost/predef/architecture/alpha.h | 60 + boost/boost/predef/architecture/arm.h | 58 + boost/boost/predef/architecture/blackfin.h | 47 + boost/boost/predef/architecture/convex.h | 67 + boost/boost/predef/architecture/ia64.h | 49 + boost/boost/predef/architecture/m68k.h | 83 + boost/boost/predef/architecture/mips.h | 74 + boost/boost/predef/architecture/parisc.h | 65 + boost/boost/predef/architecture/ppc.h | 73 + boost/boost/predef/architecture/pyramid.h | 43 + boost/boost/predef/architecture/rs6k.h | 56 + boost/boost/predef/architecture/sparc.h | 55 + boost/boost/predef/architecture/superh.h | 68 + boost/boost/predef/architecture/sys370.h | 44 + boost/boost/predef/architecture/sys390.h | 44 + boost/boost/predef/architecture/x86.h | 38 + boost/boost/predef/architecture/x86/32.h | 87 + boost/boost/predef/architecture/x86/64.h | 50 + boost/boost/predef/architecture/z.h | 43 + boost/boost/predef/detail/_cassert.h | 17 + boost/boost/predef/detail/endian_compat.h | 26 + boost/boost/predef/detail/os_detected.h | 10 + boost/boost/predef/detail/test.h | 17 + boost/boost/predef/library/c/_prefix.h | 13 + boost/boost/predef/library/c/gnu.h | 62 + boost/boost/predef/make.h | 87 + boost/boost/predef/os/bsd.h | 95 + boost/boost/predef/os/bsd/bsdi.h | 48 + boost/boost/predef/os/bsd/dragonfly.h | 50 + boost/boost/predef/os/bsd/free.h | 60 + boost/boost/predef/os/bsd/net.h | 84 + boost/boost/predef/os/bsd/open.h | 171 + boost/boost/predef/os/macos.h | 58 + boost/boost/predef/os/windows.h | 51 + boost/boost/predef/other/endian.h | 205 + boost/boost/predef/version_number.h | 54 + boost/boost/preprocessor/tuple/rem.hpp | 1 + boost/boost/range/concepts.hpp | 8 +- boost/boost/range/detail/extract_optional_type.hpp | 2 +- boost/boost/range/iterator_range_core.hpp | 5 +- boost/boost/regex/icu.hpp | 8 +- boost/boost/regex/pending/static_mutex.hpp | 15 +- boost/boost/regex/v4/basic_regex_creator.hpp | 19 +- boost/boost/regex/v4/basic_regex_parser.hpp | 84 +- boost/boost/regex/v4/perl_matcher_common.hpp | 6 + .../boost/regex/v4/perl_matcher_non_recursive.hpp | 24 +- boost/boost/regex/v4/perl_matcher_recursive.hpp | 16 +- boost/boost/regex/v4/regex_format.hpp | 9 +- boost/boost/regex/v4/regex_split.hpp | 2 +- boost/boost/regex/v4/regex_traits_defaults.hpp | 34 +- boost/boost/signal.hpp | 8 + .../smart_ptr/detail/allocate_array_helper.hpp | 14 +- boost/boost/smart_ptr/detail/array_deleter.hpp | 4 +- boost/boost/smart_ptr/detail/make_array_helper.hpp | 14 +- boost/boost/smart_ptr/detail/shared_count.hpp | 8 +- boost/boost/smart_ptr/detail/yield_k.hpp | 1 - boost/boost/smart_ptr/make_shared_object.hpp | 4 + boost/boost/smart_ptr/shared_ptr.hpp | 4 +- boost/boost/static_assert.hpp | 85 +- boost/boost/throw_exception.hpp | 7 +- boost/boost/token_functions.hpp | 32 +- boost/boost/type_traits.hpp | 5 + boost/boost/type_traits/common_type.hpp | 3 +- .../type_traits/detail/has_binary_operator.hpp | 2 +- .../boost/type_traits/has_trivial_move_assign.hpp | 57 + .../type_traits/has_trivial_move_constructor.hpp | 57 + boost/boost/type_traits/intrinsics.hpp | 13 + boost/boost/type_traits/is_copy_constructible.hpp | 122 + boost/boost/type_traits/is_integral.hpp | 6 + .../type_traits/is_nothrow_move_assignable.hpp | 84 + .../type_traits/is_nothrow_move_constructible.hpp | 84 + boost/boost/type_traits/is_pod.hpp | 4 +- boost/boost/utility/addressof.hpp | 4 +- boost/boost/utility/base_from_member.hpp | 73 +- boost/boost/utility/declval.hpp | 41 +- boost/boost/version.hpp | 4 +- boost/libs/regex/src/w32_regex_traits.cpp | 12 +- config/common.am | 10 - config/lyxinclude.m4 | 53 +- configure.ac | 1 + .../Win32/packaging/installer/include/init.nsh | 15 +- development/autotests/revertedTests | 270 +- development/cmake/modules/FindCXX11Compiler.cmake | 2 +- .../cmake/scripts/LyXCreateImagesResource.cmake | 5 + lib/CREDITS | 6 + lib/configure.py | 2 +- lib/doc/fr/Math.lyx | 443 +- lib/doc/fr/UserGuide.lyx | 796 +-- lib/generate_contributions.py | 10 +- lib/layouts/logicalmkup.module | 2 +- lib/lyx2lyx/LyX.py | 2 +- lib/lyx2lyx/lyx_2_1.py | 242 +- lib/scripts/layout2layout.py | 54 +- po/it.gmo | Bin 452719 -> 453513 bytes po/it.po | 7966 ++++++++++++-------- po/zh_CN.po | 93 +- src/LyXRC.cpp | 5 +- src/LyXRC.h | 3 +- src/Text.h | 6 +- src/frontends/Clipboard.h | 3 + src/frontends/qt4/CMakeLists.txt | 1 + src/frontends/qt4/GuiClipboard.cpp | 6 + src/frontends/qt4/GuiClipboard.h | 1 + src/frontends/qt4/GuiFontLoader.cpp | 26 +- src/frontends/qt4/GuiFontMetrics.cpp | 59 +- src/frontends/qt4/GuiFontMetrics.h | 6 - src/frontends/qt4/GuiLog.cpp | 4 +- src/frontends/qt4/GuiPainter.cpp | 35 - src/frontends/qt4/GuiPainter.h | 7 - src/frontends/qt4/GuiSelection.cpp | 2 +- src/frontends/qt4/ui/ViewSourceUi.ui | 4 +- src/insets/InsetListingsParams.cpp | 88 +- src/insets/InsetListingsParams.h | 9 +- src/output_xhtml.h | 2 +- src/rowpainter.cpp | 3 - src/support/CMakeLists.txt | 2 +- src/support/Messages.cpp | 2 +- src/support/strfwd.h | 2 +- src/tex2lyx/Parser.h | 2 +- 172 files changed, 10512 insertions(+), 6212 deletions(-) delete mode 100644 boost/boost/detail/limits.hpp create mode 100644 boost/boost/predef/architecture.h create mode 100644 boost/boost/predef/architecture/alpha.h create mode 100644 boost/boost/predef/architecture/arm.h create mode 100644 boost/boost/predef/architecture/blackfin.h create mode 100644 boost/boost/predef/architecture/convex.h create mode 100644 boost/boost/predef/architecture/ia64.h create mode 100644 boost/boost/predef/architecture/m68k.h create mode 100644 boost/boost/predef/architecture/mips.h create mode 100644 boost/boost/predef/architecture/parisc.h create mode 100644 boost/boost/predef/architecture/ppc.h create mode 100644 boost/boost/predef/architecture/pyramid.h create mode 100644 boost/boost/predef/architecture/rs6k.h create mode 100644 boost/boost/predef/architecture/sparc.h create mode 100644 boost/boost/predef/architecture/superh.h create mode 100644 boost/boost/predef/architecture/sys370.h create mode 100644 boost/boost/predef/architecture/sys390.h create mode 100644 boost/boost/predef/architecture/x86.h create mode 100644 boost/boost/predef/architecture/x86/32.h create mode 100644 boost/boost/predef/architecture/x86/64.h create mode 100644 boost/boost/predef/architecture/z.h create mode 100644 boost/boost/predef/detail/_cassert.h create mode 100644 boost/boost/predef/detail/endian_compat.h create mode 100644 boost/boost/predef/detail/os_detected.h create mode 100644 boost/boost/predef/detail/test.h create mode 100644 boost/boost/predef/library/c/_prefix.h create mode 100644 boost/boost/predef/library/c/gnu.h create mode 100644 boost/boost/predef/make.h create mode 100644 boost/boost/predef/os/bsd.h create mode 100644 boost/boost/predef/os/bsd/bsdi.h create mode 100644 boost/boost/predef/os/bsd/dragonfly.h create mode 100644 boost/boost/predef/os/bsd/free.h create mode 100644 boost/boost/predef/os/bsd/net.h create mode 100644 boost/boost/predef/os/bsd/open.h create mode 100644 boost/boost/predef/os/macos.h create mode 100644 boost/boost/predef/os/windows.h create mode 100644 boost/boost/predef/other/endian.h create mode 100644 boost/boost/predef/version_number.h create mode 100644 boost/boost/type_traits/has_trivial_move_assign.hpp create mode 100644 boost/boost/type_traits/has_trivial_move_constructor.hpp create mode 100644 boost/boost/type_traits/is_copy_constructible.hpp create mode 100644 boost/boost/type_traits/is_nothrow_move_assignable.hpp create mode 100644 boost/boost/type_traits/is_nothrow_move_constructible.hpp hooks/post-receive -- Repository for new features