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

Reply via email to