commit 2ceeb9e0b34a02ca7c43758646d22445aef7752b
Author: Juergen Spitzmueller <[email protected]>
Date: Sun Jul 14 15:08:01 2019 +0200
Handle remaining TeX fonts wrt MoreOptions
Closes #11615
---
lib/latexfonts | 13 ++++
lib/lyx2lyx/lyx_2_4.py | 144 ++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 151 insertions(+), 6 deletions(-)
diff --git a/lib/latexfonts b/lib/latexfonts
index e017977..10b9886 100644
--- a/lib/latexfonts
+++ b/lib/latexfonts
@@ -116,6 +116,7 @@ Font ccfonts
GuiName "Concrete Roman"
Family rm
Package ccfonts
+ MoreOptions 1
EndFont
Font chancery
@@ -136,6 +137,7 @@ Font cochineal
OsfOption "proportional,osf"
Package cochineal
AltFonts crimson
+ MoreOptions 1
EndFont
AltFont crimson
@@ -223,6 +225,7 @@ Font garamondx
Package garamondx
Requires garamondx-fonts
AltFonts ugm
+ MoreOptions 1
EndFont
AltFont ugm
@@ -239,6 +242,7 @@ Font libertine
Package libertineRoman
CompleteFont libertine-full
AltFonts libertine-type1,libertine-2012,libertine-legacy
+ MoreOptions 1
EndFont
AltFont libertine-full
@@ -246,6 +250,7 @@ AltFont libertine-full
Family rm
Package libertine
Requires libertineRoman
+ MoreOptions 1
EndFont
AltFont libertine-type1
@@ -276,6 +281,7 @@ Font lmodern
Family rm
Package lmodern
NoMathFont lmr
+ MoreOptions 1
EndFont
AltFont lmr
@@ -458,6 +464,7 @@ Font palatino
AltFonts mathpple,palatino-sty
NoMathFont ppl
Requires psnfss
+ MoreOptions 1
EndFont
AltFont mathpple
@@ -507,6 +514,7 @@ Font times
AltFonts mathptm,times-sty
NoMathFont ptm
Requires psnfss
+ MoreOptions 1
EndFont
AltFont mathptm
@@ -569,6 +577,7 @@ Font utopia
AltFonts utopia-sty
OT1Font utopia-sty
NoMathFont futs
+ MoreOptions 1
EndFont
AltFont utopia-sty
@@ -595,6 +604,7 @@ Font xcharter
Family rm
Package XCharter
OsfOption osf
+ MoreOptions 1
EndFont
#
@@ -622,6 +632,7 @@ Font biolinum
ScaleOption scaled=$$val
Package biolinum
AltFonts biolinum-type1,biolinum-2012
+ MoreOptions 1
EndFont
AltFont biolinum-type1
@@ -631,6 +642,7 @@ AltFont biolinum-type1
ScaleOption scaled=$$val
Package biolinum-type1
Requires libertineMono-type1
+ MoreOptions 1
EndFont
AltFont biolinum-2012
@@ -639,6 +651,7 @@ AltFont biolinum-2012
OsfOption lining
OsfDefault 1
Package biolinum-type1
+ MoreOptions 1
EndFont
Font cmbr
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index ad045ed..e0f38ed 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -492,12 +492,25 @@ def revert_paratype(document):
i2 = find_token(document.header, "\\font_sans \"default\"", 0)
i3 = find_token(document.header, "\\font_typewriter \"default\"", 0)
j = find_token(document.header, "\\font_sans \"PTSans-TLF\"", 0)
- sfval = get_value(document.header, "\\font_sf_scale", 0)
- # cutoff " 100"
- sfval = sfval[:-4]
+
+ sf_scale = 100.0
+ sfval = find_token(document.header, "\\font_sf_scale", 0)
+ if sfval == -1:
+ document.warning("Malformed LyX document: Missing
\\font_sf_scale.")
+ else:
+ sfscale = document.header[sfval].split()
+ val = sfscale[1]
+ sfscale[1] = "100"
+ document.header[sfval] = " ".join(sfscale)
+ try:
+ # float() can throw
+ sf_scale = float(val)
+ except:
+ document.warning("Invalid font_sf_scale value: " + val)
+
sfoption = ""
- if sfval != "100":
- sfoption = "scaled=" + format(float(sfval) / 100, '.2f')
+ if sf_scale != "100.0":
+ sfoption = "scaled=" + str(sf_scale / 100.0)
k = find_token(document.header, "\\font_typewriter \"PTMono-TLF\"", 0)
ttval = get_value(document.header, "\\font_tt_scale", 0)
# cutoff " 100"
@@ -2708,6 +2721,125 @@ def revert_osf(document):
document.header[i] = "\\font_osf true"
+def revert_texfontopts(document):
+ " Revert native TeX font definitions (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.")
+ return
+ if str2bool(get_value(document.header, "\\use_non_tex_fonts", i)):
+ return
+
+ rmfonts = ["ccfonts", "cochineal", "utopia", "garamondx", "libertine",
"lmodern", "palatino", "times", "xcharter" ]
+
+ # First the sf (biolinum only)
+ regexp = re.compile(r'(\\font_sans_opts)')
+ x = find_re(document.header, regexp, 0)
+ if x != -1:
+ # We need to use this regex since split() does not handle quote
protection
+ sfopts = re.findall(r'[^"\s]\S*|".+?"', document.header[x])
+ opts = sfopts[1].strip('"')
+ i = find_token(document.header, "\\font_sans", 0)
+ if i == -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[i])
+ sans = sffont[1].strip('"')
+ if sans == "biolinum":
+ sf_scale = 100.0
+ sffont[1] = '"default"'
+ document.header[i] = " ".join(sffont)
+ osf = False
+ j = find_token(document.header, "\\font_sans_osf true", 0)
+ if j != -1:
+ osf = True
+ k = find_token(document.header, "\\font_sf_scale", 0)
+ if k == -1:
+ document.warning("Malformed LyX document: Missing
\\font_sf_scale.")
+ else:
+ sfscale = document.header[k].split()
+ val = sfscale[1]
+ sfscale[1] = "100"
+ document.header[k] = " ".join(sfscale)
+ try:
+ # float() can throw
+ sf_scale = float(val)
+ except:
+ document.warning("Invalid font_sf_scale value: " + val)
+ preamble = "\\usepackage["
+ if osf:
+ document.header[j] = "\\font_sans_osf false"
+ preamble += "osf,"
+ if sf_scale != 100.0:
+ preamble += 'scaled=' + str(sf_scale / 100.0) + ','
+ preamble += opts
+ preamble += "]{biolinum}"
+ add_to_preamble(document, [preamble])
+ del document.header[x]
+
+ regexp = re.compile(r'(\\font_roman_opts)')
+ x = find_re(document.header, regexp, 0)
+ if x == -1:
+ return
+
+ # We need to use this regex since split() does not handle quote protection
+ romanopts = re.findall(r'[^"\s]\S*|".+?"', document.header[x])
+ opts = romanopts[1].strip('"')
+
+ i = find_token(document.header, "\\font_roman", 0)
+ if i == -1:
+ document.warning("Malformed LyX document: Missing \\font_roman.")
+ return
+ else:
+ # We need to use this regex since split() does not handle quote
protection
+ romanfont = re.findall(r'[^"\s]\S*|".+?"', document.header[i])
+ roman = romanfont[1].strip('"')
+ if not roman in rmfonts:
+ return
+ romanfont[1] = '"default"'
+ document.header[i] = " ".join(romanfont)
+ package = roman
+ if roman == "utopia":
+ package = "fourier"
+ elif roman == "palatino":
+ package = "mathpazo"
+ elif roman == "times":
+ package = "mathptmx"
+ elif roman == "xcharter":
+ package = "XCharter"
+ osf = ""
+ j = find_token(document.header, "\\font_roman_osf true", 0)
+ if j != -1:
+ if roman == "cochineal":
+ osf = "proportional,osf,"
+ elif roman == "utopia":
+ osf = "oldstyle,"
+ elif roman == "garamondx":
+ osf = "osfI,"
+ elif roman == "libertine":
+ osf = "osf,"
+ elif roman == "palatino":
+ osf = "osf,"
+ elif roman == "xcharter":
+ osf = "osf,"
+ document.header[j] = "\\font_roman_osf false"
+ k = find_token(document.header, "\\font_sc true", 0)
+ if k != -1:
+ if roman == "utopia":
+ osf += "expert,"
+ if roman == "palatino" and osf == "":
+ osf = "sc,"
+ document.header[k] = "\\font_sc false"
+ preamble = "\\usepackage["
+ preamble += osf
+ preamble += opts
+ preamble += "]{" + package + "}"
+ add_to_preamble(document, [preamble])
+ del document.header[x]
+
+
##
# Conversion hub
#
@@ -2753,7 +2885,7 @@ convert = [
[581, [convert_osf]]
]
-revert = [[580, [revert_osf]],
+revert = [[580, [revert_texfontopts,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]],