commit dcf06fdb22bf39637aa7e11e59ca281d921fcbc7
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Sun Jul 14 11:41:36 2019 +0200

    Split osf options to families
    
    Nowadays we support sf and tt fonts with osf options, so this needs to
    be selectable separately.
    
    File format change.
---
 development/FORMAT                |    4 +
 lib/lyx2lyx/lyx_2_4.py            |  105 +++++++++++++-
 src/BufferParams.cpp              |   45 +++++--
 src/BufferParams.h                |    8 +-
 src/frontends/qt4/GuiDocument.cpp |   17 ++-
 src/frontends/qt4/ui/FontUi.ui    |  293 ++++++++++++++++++++++++-------------
 src/tex2lyx/Preamble.cpp          |   44 ++++---
 src/tex2lyx/Preamble.h            |    4 +-
 src/version.h                     |    4 +-
 9 files changed, 386 insertions(+), 138 deletions(-)

diff --git a/development/FORMAT b/development/FORMAT
index 0c3bf53..b499940 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -7,6 +7,10 @@ changes happened in particular if possible. A good example 
would be
 
 -----------------------
 
+2019-07-14 Jürgen Spitzmüller <sp...@lyx.org>
+       * Format incremented to 581: split osf options to rm, sf, and tt
+        \font_osf => \font_roman_osf, \font_sans_osf, \font_typewriter_osf
+
 2019-07-11 Uwe Stöhr <uwesto...@web.de>
            Jürgen Spitzmüller <sp...@lyx.org>
        * Format incremented to 580: support for document font options
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index ca55c8e..ad045ed 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -2579,7 +2579,6 @@ def revert_notoFonts_xopts(document):
 def revert_IBMFonts_xopts(document):
     " Revert native IBM font definition (with extra options) to LaTeX "
 
-
     i = find_token(document.header, '\\use_non_tex_fonts', 0)
     if i == -1:
         document.warning("Malformed LyX document: Missing 
\\use_non_tex_fonts.")
@@ -2611,6 +2610,104 @@ def revert_AdobeFonts_xopts(document):
         add_preamble_fonts(document, fontmap)
 
 
+def convert_osf(document):
+    " Convert \\font_osf param to new format "
+
+    NonTeXFonts = False
+    i = find_token(document.header, '\\use_non_tex_fonts', 0)
+    if i == -1:
+        document.warning("Malformed LyX document: Missing 
\\use_non_tex_fonts.")
+    else:
+        NonTeXFonts = str2bool(get_value(document.header, 
"\\use_non_tex_fonts", i))
+
+    i = find_token(document.header, '\\font_osf', 0)
+    if i == -1:
+        document.warning("Malformed LyX document: Missing \\font_osf.")
+        return
+
+    osfsf = ["biolinum", "ADOBESourceSansPro", "NotoSansRegular", 
"NotoSansMedium", "NotoSansThin", "NotoSansLight", "NotoSansExtralight" ]
+    osftt = ["ADOBESourceCodePro", "NotoMonoRegular" ]
+
+    osfval = str2bool(get_value(document.header, "\\font_osf", i))
+    document.header[i] = document.header[i].replace("\\font_osf", 
"\\font_roman_osf")
+
+    if NonTeXFonts:
+        document.header.insert(i, "\\font_sans_osf false")
+        document.header.insert(i + 1, "\\font_typewriter_osf false")
+        return
+
+    if osfval:
+        x = find_token(document.header, "\\font_sans", 0)
+        if x == -1:
+            document.warning("Malformed LyX document: Missing \\font_sans.")
+        else:
+            # We need to use this regex since split() does not handle quote 
protection
+            sffont = re.findall(r'[^"\s]\S*|".+?"', document.header[x])
+            sf = sffont[1].strip('"')
+            if sf in osfsf:
+                document.header.insert(i, "\\font_sans_osf true")
+            else:
+                document.header.insert(i, "\\font_sans_osf false")
+
+        x = find_token(document.header, "\\font_typewriter", 0)
+        if x == -1:
+            document.warning("Malformed LyX document: Missing 
\\font_typewriter.")
+        else:
+            # We need to use this regex since split() does not handle quote 
protection
+            ttfont = re.findall(r'[^"\s]\S*|".+?"', document.header[x])
+            tt = ttfont[1].strip('"')
+            if tt in osftt:
+                document.header.insert(i + 1, "\\font_sans_osf true")
+            else:
+                document.header.insert(i + 1, "\\font_sans_osf false")
+
+    else:
+        document.header.insert(i, "\\font_sans_osf false")
+        document.header.insert(i + 1, "\\font_typewriter_osf false")
+
+
+def revert_osf(document):
+    " Revert \\font_*_osf params "
+
+    NonTeXFonts = False
+    i = find_token(document.header, '\\use_non_tex_fonts', 0)
+    if i == -1:
+        document.warning("Malformed LyX document: Missing 
\\use_non_tex_fonts.")
+    else:
+        NonTeXFonts = str2bool(get_value(document.header, 
"\\use_non_tex_fonts", i))
+
+    i = find_token(document.header, '\\font_roman_osf', 0)
+    if i == -1:
+        document.warning("Malformed LyX document: Missing \\font_roman_osf.")
+        return
+
+    osfval = str2bool(get_value(document.header, "\\font_roman_osf", i))
+    document.header[i] = document.header[i].replace("\\font_roman_osf", 
"\\font_osf")
+
+    i = find_token(document.header, '\\font_sans_osf', 0)
+    if i == -1:
+        document.warning("Malformed LyX document: Missing \\font_sans_osf.")
+        return
+
+    osfval = str2bool(get_value(document.header, "\\font_sans_osf", i))
+    del document.header[i]
+
+    i = find_token(document.header, '\\font_typewriter_osf', 0)
+    if i == -1:
+        document.warning("Malformed LyX document: Missing 
\\font_typewriter_osf.")
+        return
+
+    osfval |= str2bool(get_value(document.header, "\\font_typewriter_osf", i))
+    del document.header[i]
+
+    if osfval:
+        i = find_token(document.header, '\\font_osf', 0)
+        if i == -1:
+            document.warning("Malformed LyX document: Missing \\font_osf.")
+            return
+        document.header[i] = "\\font_osf true"
+
+
 ##
 # Conversion hub
 #
@@ -2652,10 +2749,12 @@ convert = [
            [577, [convert_linggloss]],
            [578, []],
            [579, []],
-           [580, []]
+           [580, []],
+           [581, [convert_osf]]
           ]
 
-revert =  [[579, [revert_minionpro, revert_plainNotoFonts_xopts, 
revert_notoFonts_xopts, revert_IBMFonts_xopts, revert_AdobeFonts_xopts, 
revert_font_opts]], # keep revert_font_opts last!
+revert =  [[580, [revert_osf]],
+           [579, [revert_minionpro, revert_plainNotoFonts_xopts, 
revert_notoFonts_xopts, revert_IBMFonts_xopts, revert_AdobeFonts_xopts, 
revert_font_opts]], # keep revert_font_opts last!
            [578, [revert_babelfont]],
            [577, [revert_drs]],
            [576, [revert_linggloss, revert_subexarg]],
diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 426bf8c..e1a279f 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -419,7 +419,9 @@ BufferParams::BufferParams()
        use_microtype = false;
        use_dash_ligatures = true;
        fonts_expert_sc = false;
-       fonts_old_figures = false;
+       fonts_roman_osf = false;
+       fonts_sans_osf = false;
+       fonts_typewriter_osf = false;
        fonts_sans_scale[0] = 100;
        fonts_sans_scale[1] = 100;
        fonts_typewriter_scale[0] = 100;
@@ -832,8 +834,12 @@ string BufferParams::readToken(Lexer & lex, string const & 
token,
                lex >> useNonTeXFonts;
        } else if (token == "\\font_sc") {
                lex >> fonts_expert_sc;
-       } else if (token == "\\font_osf") {
-               lex >> fonts_old_figures;
+       } else if (token == "\\font_roman_osf") {
+               lex >> fonts_roman_osf;
+       } else if (token == "\\font_sans_osf") {
+               lex >> fonts_sans_osf;
+       } else if (token == "\\font_typewriter_osf") {
+               lex >> fonts_typewriter_osf;
        } else if (token == "\\font_roman_opts") {
                lex >> font_roman_opts;
        } else if (token == "\\font_sf_scale") {
@@ -1257,7 +1263,9 @@ void BufferParams::writeFile(ostream & os, Buffer const * 
buf) const
           << "\n\\font_default_family " << fonts_default_family
           << "\n\\use_non_tex_fonts " << convert<string>(useNonTeXFonts)
           << "\n\\font_sc " << convert<string>(fonts_expert_sc)
-          << "\n\\font_osf " << convert<string>(fonts_old_figures);
+          << "\n\\font_roman_osf " << convert<string>(fonts_roman_osf)
+          << "\n\\font_sans_osf " << convert<string>(fonts_sans_osf)
+          << "\n\\font_typewriter_osf " << 
convert<string>(fonts_typewriter_osf);
        if (!font_roman_opts.empty())
                os << "\n\\font_roman_opts \"" << font_roman_opts << "\"";
        os << "\n\\font_sf_scale " << fonts_sans_scale[0]
@@ -3406,7 +3414,7 @@ string const BufferParams::loadFonts(LaTeXFeatures & 
features) const
                        if (!font_roman_opts.empty())
                                os << font_roman_opts << ',';
                        os << texmapping;
-                       if (fonts_old_figures)
+                       if (fonts_roman_osf)
                                os << ",Numbers=OldStyle";
                        os << "]{" << parseFontName(fontsRoman()) << "}\n";
                }
@@ -3419,6 +3427,8 @@ string const BufferParams::loadFonts(LaTeXFeatures & 
features) const
                                        os << "\\setsansfont";
                                os << "[Scale="
                                   << float(fontsSansScale()) / 100 << ',';
+                               if (fonts_sans_osf)
+                                       os << "Numbers=OldStyle,";
                                if (!font_sans_opts.empty())
                                        os << font_sans_opts << ',';
                                os << texmapping << "]{"
@@ -3428,6 +3438,8 @@ string const BufferParams::loadFonts(LaTeXFeatures & 
features) const
                                        os << "\\babelfont{sf}[";
                                else
                                        os << "\\setsansfont[";
+                               if (fonts_sans_osf)
+                                       os << "Numbers=OldStyle,";
                                if (!font_sans_opts.empty())
                                        os << font_sans_opts << ',';
                                os << texmapping << "]{"
@@ -3443,6 +3455,8 @@ string const BufferParams::loadFonts(LaTeXFeatures & 
features) const
                                        os << "\\setmonofont";
                                os << "[Scale="
                                   << float(fontsTypewriterScale()) / 100;
+                               if (fonts_typewriter_osf)
+                                       os << ",Numbers=OldStyle";
                                if (!font_typewriter_opts.empty())
                                        os << ',' << font_typewriter_opts;
                                os << "]{"
@@ -3452,8 +3466,17 @@ string const BufferParams::loadFonts(LaTeXFeatures & 
features) const
                                        os << "\\babelfont{tt}";
                                else
                                        os << "\\setmonofont";
-                               if (!font_typewriter_opts.empty())
-                                       os << '[' << font_typewriter_opts << 
']';
+                               if (!font_typewriter_opts.empty() || 
fonts_typewriter_osf) {
+                                       os << '[';
+                                       if (fonts_typewriter_osf)
+                                               os << "Numbers=OldStyle";
+                                       if (!font_typewriter_opts.empty()) {
+                                               if (fonts_typewriter_osf)
+                                                       os << ',';
+                                               os << font_typewriter_opts;
+                                       }
+                                       os << ']';
+                               }
                                os << '{' << mono << "}\n";
                        }
                }
@@ -3468,22 +3491,22 @@ string const BufferParams::loadFonts(LaTeXFeatures & 
features) const
 
        // ROMAN FONTS
        os << 
theLaTeXFonts().getLaTeXFont(from_ascii(fontsRoman())).getLaTeXCode(
-               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures,
+               dryrun, ot1, complete, fonts_expert_sc, fonts_roman_osf,
                nomath, font_roman_opts);
 
        // SANS SERIF
        os << 
theLaTeXFonts().getLaTeXFont(from_ascii(fontsSans())).getLaTeXCode(
-               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures,
+               dryrun, ot1, complete, fonts_expert_sc, fonts_sans_osf,
                nomath, font_sans_opts, fontsSansScale());
 
        // MONOSPACED/TYPEWRITER
        os << 
theLaTeXFonts().getLaTeXFont(from_ascii(fontsTypewriter())).getLaTeXCode(
-               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures,
+               dryrun, ot1, complete, fonts_expert_sc, fonts_typewriter_osf,
                nomath, font_typewriter_opts, fontsTypewriterScale());
 
        // MATH
        os << 
theLaTeXFonts().getLaTeXFont(from_ascii(fontsMath())).getLaTeXCode(
-               dryrun, ot1, complete, fonts_expert_sc, fonts_old_figures,
+               dryrun, ot1, complete, fonts_expert_sc, fonts_roman_osf,
                nomath);
 
        return os.str();
diff --git a/src/BufferParams.h b/src/BufferParams.h
index 84c91ef..cf3c266 100644
--- a/src/BufferParams.h
+++ b/src/BufferParams.h
@@ -283,8 +283,12 @@ public:
        bool useNonTeXFonts;
        /// use expert Small Caps
        bool fonts_expert_sc;
-       /// use Old Style Figures
-       bool fonts_old_figures;
+       /// use Old Style Figures (rm)
+       bool fonts_roman_osf;
+       /// use Old Style Figures (sf)
+       bool fonts_sans_osf;
+       /// use Old Style Figures (tt)
+       bool fonts_typewriter_osf;
        /// the options for the roman font
        std::string font_roman_opts;
        /// the scale factor of the sf font: [0] for TeX fonts, [1] for non-TeX 
fonts
diff --git a/src/frontends/qt4/GuiDocument.cpp 
b/src/frontends/qt4/GuiDocument.cpp
index c40736c..cceb5b1 100644
--- a/src/frontends/qt4/GuiDocument.cpp
+++ b/src/frontends/qt4/GuiDocument.cpp
@@ -1090,6 +1090,10 @@ GuiDocument::GuiDocument(GuiView & lv)
                this, SLOT(change_adaptor()));
        connect(fontModule->fontOsfCB, SIGNAL(toggled(bool)),
                this, SLOT(fontOsfToggled(bool)));
+       connect(fontModule->fontSansOsfCB, SIGNAL(clicked()),
+               this, SLOT(change_adaptor()));
+       connect(fontModule->fontTypewriterOsfCB, SIGNAL(clicked()),
+               this, SLOT(change_adaptor()));
        connect(fontModule->fontspecRomanLE, SIGNAL(textChanged(const QString 
&)),
                this, SLOT(change_adaptor()));
        connect(fontModule->fontspecSansLE, SIGNAL(textChanged(const QString 
&)),
@@ -2462,12 +2466,14 @@ void GuiDocument::updateFontOptions()
        bool scaleable = providesScale(font);
        fontModule->scaleSansSB->setEnabled(scaleable);
        fontModule->scaleSansLA->setEnabled(scaleable);
+       fontModule->fontSansOsfCB->setEnabled(providesOSF(font));
        if (tex_fonts)
                font = fontModule->fontsTypewriterCO->itemData(
                                
fontModule->fontsTypewriterCO->currentIndex()).toString();
        scaleable = providesScale(font);
        fontModule->scaleTypewriterSB->setEnabled(scaleable);
        fontModule->scaleTypewriterLA->setEnabled(scaleable);
+       fontModule->fontTypewriterOsfCB->setEnabled(providesOSF(font));
        if (tex_fonts)
                font = fontModule->fontsRomanCO->itemData(
                                
fontModule->fontsRomanCO->currentIndex()).toString();
@@ -2667,6 +2673,7 @@ void GuiDocument::sansChanged(int item)
        bool const scaleable = providesScale(font);
        fontModule->scaleSansSB->setEnabled(scaleable);
        fontModule->scaleSansLA->setEnabled(scaleable);
+       fontModule->fontSansOsfCB->setEnabled(providesOSF(font));
        updateExtraOpts();
 }
 
@@ -2680,6 +2687,7 @@ void GuiDocument::ttChanged(int item)
        bool scaleable = providesScale(font);
        fontModule->scaleTypewriterSB->setEnabled(scaleable);
        fontModule->scaleTypewriterLA->setEnabled(scaleable);
+       fontModule->fontTypewriterOsfCB->setEnabled(providesOSF(font));
        updateExtraOpts();
 }
 
@@ -3711,7 +3719,9 @@ void GuiDocument::applyView()
 
        bp_.fonts_expert_sc = fontModule->fontScCB->isChecked();
 
-       bp_.fonts_old_figures = fontModule->fontOsfCB->isChecked();
+       bp_.fonts_roman_osf = fontModule->fontOsfCB->isChecked();
+       bp_.fonts_sans_osf = fontModule->fontSansOsfCB->isChecked();
+       bp_.fonts_typewriter_osf = fontModule->fontTypewriterOsfCB->isChecked();
 
        if (nontexfonts)
                bp_.fonts_default_family = "default";
@@ -4227,7 +4237,9 @@ void GuiDocument::paramsToDialog()
        fontModule->dashesCB->setChecked(!bp_.use_dash_ligatures);
 
        fontModule->fontScCB->setChecked(bp_.fonts_expert_sc);
-       fontModule->fontOsfCB->setChecked(bp_.fonts_old_figures);
+       fontModule->fontOsfCB->setChecked(bp_.fonts_roman_osf);
+       fontModule->fontSansOsfCB->setChecked(bp_.fonts_sans_osf);
+       fontModule->fontTypewriterOsfCB->setChecked(bp_.fonts_typewriter_osf);
        fontModule->scaleSansSB->setValue(bp_.fontsSansScale());
        fontModule->font_sf_scale = bp_.fonts_sans_scale[!bp_.useNonTeXFonts];
        fontModule->scaleTypewriterSB->setValue(bp_.fontsTypewriterScale());
@@ -4931,6 +4943,7 @@ bool GuiDocument::providesOSF(QString const & font) const
                // FIXME: we should check if the fonts really
                // have OSF support. But how?
                return true;
+       LYXERR0("osf font: " << font);
        return theLaTeXFonts().getLaTeXFont(
                                qstring_to_ucs4(font)).providesOSF(ot1(),
                                                                   
completeFontset(),
diff --git a/src/frontends/qt4/ui/FontUi.ui b/src/frontends/qt4/ui/FontUi.ui
index c31627f..d2858b0 100644
--- a/src/frontends/qt4/ui/FontUi.ui
+++ b/src/frontends/qt4/ui/FontUi.ui
@@ -6,26 +6,29 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>534</width>
-    <height>632</height>
+    <width>568</width>
+    <height>557</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>FontUi</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout_2">
-   <item row="0" column="0">
-    <widget class="QCheckBox" name="osFontsCB">
-     <property name="toolTip">
-      <string>Use OpenType and TrueType fonts with the fontspec package 
(requires XeTeX or LuaTeX)</string>
+  <layout class="QGridLayout" name="gridLayout_3">
+   <item row="4" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
      </property>
-     <property name="text">
-      <string>&amp;Use non-TeX fonts (via XeTeX/LuaTeX)</string>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>126</height>
+      </size>
      </property>
-    </widget>
+    </spacer>
    </item>
-   <item row="1" column="0" colspan="2">
-    <layout class="QGridLayout" name="gridLayout">
+   <item row="1" column="0">
+    <layout class="QGridLayout" name="gridLayout_2">
      <item row="0" column="0">
       <widget class="QLabel" name="fontsDefaultLA">
        <property name="text">
@@ -112,31 +115,88 @@
       </widget>
      </item>
      <item row="2" column="1">
-      <widget class="QComboBox" name="fontsRomanCO">
-       <property name="toolTip">
-        <string>Select the roman (serif) typeface</string>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="1">
-      <layout class="QHBoxLayout" name="horizontalLayout_5">
+      <layout class="QHBoxLayout" name="horizontalLayout_8">
        <item>
-        <widget class="QLabel" name="fontspecRomanLA">
-         <property name="text">
-          <string>Options:</string>
+        <widget class="QComboBox" name="fontsRomanCO">
+         <property name="toolTip">
+          <string>Select the roman (serif) typeface</string>
          </property>
-         <property name="buddy">
-          <cstring>fontspecRomanLE</cstring>
+        </widget>
+       </item>
+       <item>
+        <spacer name="horizontalSpacer_4">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="fontScCB">
+         <property name="toolTip">
+          <string>Use a real small caps shape, if the font provides 
one</string>
+         </property>
+         <property name="text">
+          <string>Use true s&amp;mall caps</string>
          </property>
         </widget>
        </item>
+      </layout>
+     </item>
+     <item row="3" column="1">
+      <layout class="QHBoxLayout" name="horizontalLayout_9">
        <item>
-        <widget class="QLineEdit" name="fontspecRomanLE">
+        <widget class="QCheckBox" name="fontOsfCB">
          <property name="toolTip">
-          <string>Here you can insert additional options (as provided by the 
font package)</string>
+          <string>Use old style instead of lining figures</string>
+         </property>
+         <property name="text">
+          <string>Use &amp;old style figures</string>
          </property>
         </widget>
        </item>
+       <item>
+        <spacer name="horizontalSpacer_7">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Fixed</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_5">
+         <item>
+          <widget class="QLabel" name="fontspecRomanLA">
+           <property name="text">
+            <string>Options:</string>
+           </property>
+           <property name="buddy">
+            <cstring>fontspecRomanLE</cstring>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="fontspecRomanLE">
+           <property name="toolTip">
+            <string>Here you can insert additional options (as provided by the 
font package)</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
       </layout>
      </item>
      <item row="4" column="0">
@@ -197,23 +257,53 @@
       </layout>
      </item>
      <item row="5" column="1">
-      <layout class="QHBoxLayout" name="horizontalLayout_3">
+      <layout class="QHBoxLayout" name="horizontalLayout_10">
        <item>
-        <widget class="QLabel" name="fontspecSansLA">
-         <property name="text">
-          <string>Options:</string>
+        <widget class="QCheckBox" name="fontSansOsfCB">
+         <property name="toolTip">
+          <string>Use old style instead of lining figures</string>
          </property>
-         <property name="buddy">
-          <cstring>fontspecSansLE</cstring>
+         <property name="text">
+          <string>Use old st&amp;yle figures</string>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QLineEdit" name="fontspecSansLE">
-         <property name="toolTip">
-          <string>Here you can insert additional options (as provided by the 
font package)</string>
+        <spacer name="horizontalSpacer_5">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
          </property>
-        </widget>
+         <property name="sizeType">
+          <enum>QSizePolicy::Fixed</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
+         <item>
+          <widget class="QLabel" name="fontspecSansLA">
+           <property name="text">
+            <string>Options:</string>
+           </property>
+           <property name="buddy">
+            <cstring>fontspecSansLE</cstring>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="fontspecSansLE">
+           <property name="toolTip">
+            <string>Here you can insert additional options (as provided by the 
font package)</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
        </item>
       </layout>
      </item>
@@ -275,23 +365,53 @@
       </layout>
      </item>
      <item row="7" column="1">
-      <layout class="QHBoxLayout" name="horizontalLayout_4">
+      <layout class="QHBoxLayout" name="horizontalLayout_11">
        <item>
-        <widget class="QLabel" name="fontspecTypewriterLA">
-         <property name="text">
-          <string>Options:</string>
+        <widget class="QCheckBox" name="fontTypewriterOsfCB">
+         <property name="toolTip">
+          <string>Use old style instead of lining figures</string>
          </property>
-         <property name="buddy">
-          <cstring>fontspecTypewriterLE</cstring>
+         <property name="text">
+          <string>Use old style &amp;figures</string>
          </property>
         </widget>
        </item>
        <item>
-        <widget class="QLineEdit" name="fontspecTypewriterLE">
-         <property name="toolTip">
-          <string>Here you can insert additional options (as provided by the 
font package)</string>
+        <spacer name="horizontalSpacer_6">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
          </property>
-        </widget>
+         <property name="sizeType">
+          <enum>QSizePolicy::Fixed</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_4">
+         <item>
+          <widget class="QLabel" name="fontspecTypewriterLA">
+           <property name="text">
+            <string>Options:</string>
+           </property>
+           <property name="buddy">
+            <cstring>fontspecTypewriterLE</cstring>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="fontspecTypewriterLE">
+           <property name="toolTip">
+            <string>Here you can insert additional options (as provided by the 
font package)</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
        </item>
       </layout>
      </item>
@@ -329,60 +449,37 @@
        </property>
       </widget>
      </item>
-     <item row="10" column="1">
-      <widget class="QCheckBox" name="fontScCB">
-       <property name="toolTip">
-        <string>Use a real small caps shape, if the font provides one</string>
-       </property>
-       <property name="text">
-        <string>Use true s&amp;mall caps</string>
-       </property>
-      </widget>
-     </item>
-     <item row="11" column="1">
-      <widget class="QCheckBox" name="fontOsfCB">
-       <property name="toolTip">
-        <string>Use old style instead of lining figures</string>
-       </property>
-       <property name="text">
-        <string>Use &amp;old style figures</string>
-       </property>
-      </widget>
-     </item>
-     <item row="12" column="1">
-      <widget class="QCheckBox" name="microtypeCB">
-       <property name="toolTip">
-        <string>Activate extensions such as character protrusion and font 
expansion via the microtype package</string>
-       </property>
-       <property name="text">
-        <string>Enable micr&amp;o-typographic extensions</string>
-       </property>
-      </widget>
-     </item>
-     <item row="13" column="1">
-      <widget class="QCheckBox" name="dashesCB">
-       <property name="toolTip">
-        <string>By default, a line break can occur after en- and em-dashes. 
Checking this box prevents that.</string>
-       </property>
-       <property name="text">
-        <string>Disallow l&amp;ine breaks after dashes</string>
-       </property>
-      </widget>
-     </item>
     </layout>
    </item>
-   <item row="2" column="1">
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
+   <item row="2" column="0">
+    <widget class="QCheckBox" name="microtypeCB">
+     <property name="toolTip">
+      <string>Activate extensions such as character protrusion and font 
expansion via the microtype package</string>
      </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>126</height>
-      </size>
+     <property name="text">
+      <string>Enable micr&amp;o-typographic extensions</string>
      </property>
-    </spacer>
+    </widget>
+   </item>
+   <item row="0" column="0">
+    <widget class="QCheckBox" name="osFontsCB">
+     <property name="toolTip">
+      <string>Use OpenType and TrueType fonts with the fontspec package 
(requires XeTeX or LuaTeX)</string>
+     </property>
+     <property name="text">
+      <string>&amp;Use non-TeX fonts (via XeTeX/LuaTeX)</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <widget class="QCheckBox" name="dashesCB">
+     <property name="toolTip">
+      <string>By default, a line break can occur after en- and em-dashes. 
Checking this box prevents that.</string>
+     </property>
+     <property name="text">
+      <string>Disallow l&amp;ine breaks after dashes</string>
+     </property>
+    </widget>
    </item>
   </layout>
  </widget>
@@ -399,8 +496,6 @@
   <tabstop>fontsTypewriterCO</tabstop>
   <tabstop>scaleTypewriterSB</tabstop>
   <tabstop>cjkFontLE</tabstop>
-  <tabstop>fontScCB</tabstop>
-  <tabstop>fontOsfCB</tabstop>
  </tabstops>
  <includes>
   <include location="local">qt_i18n.h</include>
diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp
index 3dc53c9..c6d2c6d 100644
--- a/src/tex2lyx/Preamble.cpp
+++ b/src/tex2lyx/Preamble.cpp
@@ -529,7 +529,9 @@ Preamble::Preamble() : one_language(true), 
explicit_babel(false),
        h_font_default_family     = "default";
        h_use_non_tex_fonts       = false;
        h_font_sc                 = "false";
-       h_font_osf                = "false";
+       h_font_roman_osf          = "false";
+       h_font_sans_osf           = "false";
+       h_font_typewriter_osf     = "false";
        h_font_sf_scale[0]        = "100";
        h_font_sf_scale[1]        = "100";
        h_font_tt_scale[0]        = "100";
@@ -757,7 +759,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
        if (name == "garamondx") {
                h_font_roman[0] = "garamondx";
                if (opts == "osfI")
-                       h_font_osf = "true";
+                       h_font_roman_osf = "true";
        }
 
        if (name == "libertine") {
@@ -767,9 +769,9 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                // as well as libertineMono
                h_font_typewriter[0] = "libertine-mono";
                if (opts == "osf")
-                       h_font_osf = "true";
+                       h_font_roman_osf = "true";
                else if (opts == "lining")
-                       h_font_osf = "false";
+                       h_font_roman_osf = "false";
        }
 
        if (name == "libertineRoman" || name == "libertine-type1") {
@@ -778,20 +780,20 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                // and libertine-type1 do not automatically invoke
                // biolinum and libertineMono
                if (opts == "lining")
-                       h_font_osf = "false";
+                       h_font_roman_osf = "false";
                else if (opts == "osf")
-                       h_font_osf = "true";
+                       h_font_roman_osf = "true";
        }
 
        if (name == "MinionPro") {
                h_font_roman[0] = "minionpro";
                vector<string> allopts = getVectorFromString(opts);
                string xopts;
-               h_font_osf = "true";
+               h_font_roman_osf = "true";
                h_font_math[0] = "auto";
                for (auto const & opt : allopts) {
                        if (opt == "lf") {
-                               h_font_osf = "false";
+                               h_font_roman_osf = "false";
                                continue;
                        }
                        if (opt == "onlytext") {
@@ -816,7 +818,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                        h_font_roman[0] = "md-utopia";
                if (opts.find("expert") != string::npos) {
                        h_font_sc = "true";
-                       h_font_osf = "true";
+                       h_font_roman_osf = "true";
                }
        }
 
@@ -834,7 +836,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                // cochineal can have several options, e.g. [proportional,osf]
                string::size_type pos = opts.find("osf");
                if (pos != string::npos)
-                       h_font_osf = "true";
+                       h_font_roman_osf = "true";
        }
 
        if (name == "noto") {
@@ -864,7 +866,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                        if (opt == "nott")
                                continue;
                        if (opt == "osf") {
-                               h_font_osf = "true";
+                               h_font_roman_osf = "true";
                                continue;
                        }
                        if (!xopts.empty())
@@ -886,7 +888,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
        if (name == "XCharter") {
                h_font_roman[0] = "xcharter";
                if (opts == "osf")
-                       h_font_osf = "true";
+                       h_font_roman_osf = "true";
        }
 
        if (name == "plex-serif") {
@@ -959,7 +961,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                string xopts;
                for (auto const & opt : allopts) {
                        if (opt == "osf") {
-                               h_font_osf = "true";
+                               h_font_roman_osf = "true";
                                continue;
                        }
                        if (!xopts.empty())
@@ -985,7 +987,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                // biolinum can have several options, e.g. [osf,scaled=0.97]
                string::size_type pos = opts.find("osf");
                if (pos != string::npos)
-                       h_font_osf = "true";
+                       h_font_sans_osf = "true";
        }
 
        if (name == "PTSans") {
@@ -1057,6 +1059,10 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                                continue;
                        if (opt == "semibold")
                                continue;
+                       if (opt == "osf") {
+                               h_font_sans_osf = "true";
+                               continue;
+                       }
                        if (!xopts.empty())
                                xopts += ", ";
                        xopts += opt;
@@ -1076,7 +1082,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                                continue;
                        }
                        if (opt == "osf") {
-                               h_font_osf = "true";
+                               h_font_sans_osf = "true";
                                continue;
                        }
                        if (!xopts.empty())
@@ -1173,7 +1179,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
                                continue;
                        }
                        if (opt == "osf") {
-                               h_font_osf = "true";
+                               h_font_typewriter_osf = "true";
                                continue;
                        }
                        if (!xopts.empty())
@@ -1187,7 +1193,7 @@ void Preamble::handle_package(Parser &p, string const & 
name,
 
        // font uses old-style figure
        if (name == "eco")
-               h_font_osf = "true";
+               h_font_roman_osf = "true";
 
        // math fonts
        if (is_known(name, known_math_font_packages))
@@ -1614,7 +1620,9 @@ bool Preamble::writeLyXHeader(ostream & os, bool subdoc, 
string const & outfiled
           << "\\font_default_family " << h_font_default_family << "\n"
           << "\\use_non_tex_fonts " << (h_use_non_tex_fonts ? "true" : 
"false") << '\n'
           << "\\font_sc " << h_font_sc << "\n"
-          << "\\font_osf " << h_font_osf << "\n";
+          << "\\font_roman_osf " << h_font_roman_osf << "\n"
+          << "\\font_sans_osf " << h_font_sans_osf << "\n"
+          << "\\font_typewriter_osf " << h_font_typewriter_osf << "\n";
        if (!h_font_roman_opts.empty())
                os << "\\font_roman_opts \"" << h_font_roman_opts << "\"" << 
'\n';
        os << "\\font_sf_scale " << h_font_sf_scale[0]
diff --git a/src/tex2lyx/Preamble.h b/src/tex2lyx/Preamble.h
index 0ec2b45..6a29c45 100644
--- a/src/tex2lyx/Preamble.h
+++ b/src/tex2lyx/Preamble.h
@@ -172,7 +172,9 @@ private:
        std::string h_font_default_family;
        bool h_use_non_tex_fonts;
        std::string h_font_sc;
-       std::string h_font_osf;
+       std::string h_font_roman_osf;
+       std::string h_font_sans_osf;
+       std::string h_font_typewriter_osf;
        std::string h_font_sf_scale[2];
        std::string h_font_tt_scale[2];
        bool h_font_cjk_set;
diff --git a/src/version.h b/src/version.h
index 0d53cde..e42b7a8 100644
--- a/src/version.h
+++ b/src/version.h
@@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 580 // spitz/uwestoehr: support for fontspec options
-#define LYX_FORMAT_TEX2LYX 580
+#define LYX_FORMAT_LYX 581 // spitz: split osf to font families
+#define LYX_FORMAT_TEX2LYX 581
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER

Reply via email to