+ RefChanger<MetricsBase> rc = make_save(*this);
+ ColorCode oldcolor = font.color();
+ string const oldname = fontname;
+ fontname = name;
+ if (isMathFont(name) || isMathFont(oldname))
+ font = sane_font;
+ augmentFont(font, name);
+ font.setSize(rc->old.font.size());
+ font.setStyle(rc->old.font.style());
+ if (name == "emph") {
+ font.setColor(oldcolor);
+ if (rc->old.font.shape() != UP_SHAPE)
+ font.setShape(UP_SHAPE);
+ else
+ font.setShape(ITALIC_SHAPE);
+ } else if (name != "lyxtex"
+ && ((isTextFont(oldname) && oldcolor != Color_foreground)
+ || (isMathFont(oldname) && oldcolor != Color_math)))
+ font.setColor(oldcolor);
+#if __cplusplus >= 201402L
+ return rc;
+#else
+ /** In theory, this is not needed with C++11, and modern compilers
+ * will complain in C++11 mode, but gcc 4.9 requires this. */
+ return std::move(rc);
+#endif