mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
InsetGraphics: use totalheight for height output
Graphics "height" is only the height above the baseline and thus not what most people will expect. Also, using height can result in a division by zero with rotation. Use totalheight now since this means "height of the figure" (independent of the baseline). The custom options field can be used if height is really desired. We handle this in conversion/reversion, respectively, so document output will not change. Hence, file format change. Fixes: #9676
This commit is contained in:
parent
f937b5eb7a
commit
4b0069860c
@ -7,6 +7,9 @@ changes happened in particular if possible. A good example would be
|
|||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
2019-08-14 Jürgen Spitzmüller <spitz@lyx.org>
|
||||||
|
* Format incremented to 589: Height now is totalheight in graphics.
|
||||||
|
|
||||||
2019-08-12 Jürgen Spitzmüller <spitz@lyx.org>
|
2019-08-12 Jürgen Spitzmüller <spitz@lyx.org>
|
||||||
* Format incremented to 588:
|
* Format incremented to 588:
|
||||||
- Support \theendnotes of endnotes package via a faked float list.
|
- Support \theendnotes of endnotes package via a faked float list.
|
||||||
|
@ -3472,6 +3472,115 @@ def revert_memoir_endnotes(document):
|
|||||||
add_to_preamble(document, ["\\makepagenote"])
|
add_to_preamble(document, ["\\makepagenote"])
|
||||||
|
|
||||||
|
|
||||||
|
def revert_totalheight(document):
|
||||||
|
" Reverts graphics height parameter from totalheight to height "
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
while (True):
|
||||||
|
i = find_token(document.body, "\\begin_inset Graphics", i)
|
||||||
|
if i == -1:
|
||||||
|
break
|
||||||
|
j = find_end_of_inset(document.body, i)
|
||||||
|
if j == -1:
|
||||||
|
document.warning("Can't find end of graphics inset at line %d!!" %(i))
|
||||||
|
i += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
rx = re.compile(r'\s*special\s*(\S+)$')
|
||||||
|
k = find_re(document.body, rx, i, j)
|
||||||
|
special = ""
|
||||||
|
oldheight = ""
|
||||||
|
if k != -1:
|
||||||
|
m = rx.match(document.body[k])
|
||||||
|
if m:
|
||||||
|
special = m.group(1)
|
||||||
|
mspecial = special.split(',')
|
||||||
|
for spc in mspecial:
|
||||||
|
if spc[:7] == "height=":
|
||||||
|
oldheight = spc.split('=')[1]
|
||||||
|
mspecial.remove(spc)
|
||||||
|
break
|
||||||
|
if len(mspecial) > 0:
|
||||||
|
special = ",".join(mspecial)
|
||||||
|
else:
|
||||||
|
special = ""
|
||||||
|
|
||||||
|
rx = re.compile(r'(\s*height\s*)(\S+)$')
|
||||||
|
kk = find_re(document.body, rx, i, j)
|
||||||
|
if kk != -1:
|
||||||
|
m = rx.match(document.body[kk])
|
||||||
|
val = ""
|
||||||
|
if m:
|
||||||
|
val = m.group(2)
|
||||||
|
if k != -1:
|
||||||
|
if special != "":
|
||||||
|
val = val + "," + special
|
||||||
|
document.body[k] = "\tspecial " + "totalheight=" + val
|
||||||
|
else:
|
||||||
|
document.body.insert(kk, "\tspecial totalheight=" + val)
|
||||||
|
if oldheight != "":
|
||||||
|
document.body[kk] = m.group(1) + oldheight
|
||||||
|
else:
|
||||||
|
del document.body[kk]
|
||||||
|
elif oldheight != "":
|
||||||
|
document.body.insert(k, "\theight " + oldheight)
|
||||||
|
i = j + 1
|
||||||
|
|
||||||
|
|
||||||
|
def convert_totalheight(document):
|
||||||
|
" Converts graphics height parameter from totalheight to height "
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
while (True):
|
||||||
|
i = find_token(document.body, "\\begin_inset Graphics", i)
|
||||||
|
if i == -1:
|
||||||
|
break
|
||||||
|
j = find_end_of_inset(document.body, i)
|
||||||
|
if j == -1:
|
||||||
|
document.warning("Can't find end of graphics inset at line %d!!" %(i))
|
||||||
|
i += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
rx = re.compile(r'\s*special\s*(\S+)$')
|
||||||
|
k = find_re(document.body, rx, i, j)
|
||||||
|
special = ""
|
||||||
|
newheight = ""
|
||||||
|
if k != -1:
|
||||||
|
m = rx.match(document.body[k])
|
||||||
|
if m:
|
||||||
|
special = m.group(1)
|
||||||
|
mspecial = special.split(',')
|
||||||
|
for spc in mspecial:
|
||||||
|
if spc[:12] == "totalheight=":
|
||||||
|
newheight = spc.split('=')[1]
|
||||||
|
mspecial.remove(spc)
|
||||||
|
break
|
||||||
|
if len(mspecial) > 0:
|
||||||
|
special = ",".join(mspecial)
|
||||||
|
else:
|
||||||
|
special = ""
|
||||||
|
|
||||||
|
rx = re.compile(r'(\s*height\s*)(\S+)$')
|
||||||
|
kk = find_re(document.body, rx, i, j)
|
||||||
|
if kk != -1:
|
||||||
|
m = rx.match(document.body[kk])
|
||||||
|
val = ""
|
||||||
|
if m:
|
||||||
|
val = m.group(2)
|
||||||
|
if k != -1:
|
||||||
|
if special != "":
|
||||||
|
val = val + "," + special
|
||||||
|
document.body[k] = "\tspecial " + "height=" + val
|
||||||
|
else:
|
||||||
|
document.body.insert(kk + 1, "\tspecial height=" + val)
|
||||||
|
if newheight != "":
|
||||||
|
document.body[kk] = m.group(1) + newheight
|
||||||
|
else:
|
||||||
|
del document.body[kk]
|
||||||
|
elif newheight != "":
|
||||||
|
document.body.insert(k, "\theight " + newheight)
|
||||||
|
i = j + 1
|
||||||
|
|
||||||
##
|
##
|
||||||
# Conversion hub
|
# Conversion hub
|
||||||
#
|
#
|
||||||
@ -3521,10 +3630,12 @@ convert = [
|
|||||||
[585, [convert_pagesizes]],
|
[585, [convert_pagesizes]],
|
||||||
[586, []],
|
[586, []],
|
||||||
[587, [convert_pagesizenames]],
|
[587, [convert_pagesizenames]],
|
||||||
[588, []]
|
[588, []],
|
||||||
|
[589, [convert_totalheight]]
|
||||||
]
|
]
|
||||||
|
|
||||||
revert = [[587, [revert_memoir_endnotes,revert_enotez,revert_theendnotes]],
|
revert = [[588, [revert_totalheight]],
|
||||||
|
[587, [revert_memoir_endnotes,revert_enotez,revert_theendnotes]],
|
||||||
[586, [revert_pagesizenames]],
|
[586, [revert_pagesizenames]],
|
||||||
[585, [revert_dupqualicites]],
|
[585, [revert_dupqualicites]],
|
||||||
[584, [revert_pagesizes,revert_komafontsizes]],
|
[584, [revert_pagesizes,revert_komafontsizes]],
|
||||||
|
@ -399,7 +399,7 @@ string InsetGraphics::createLatexOptions(bool const ps) const
|
|||||||
if (!params().width.zero())
|
if (!params().width.zero())
|
||||||
size << "width=" << params().width.asLatexString() << ',';
|
size << "width=" << params().width.asLatexString() << ',';
|
||||||
if (!params().height.zero())
|
if (!params().height.zero())
|
||||||
size << "height=" << params().height.asLatexString() << ',';
|
size << "totalheight=" << params().height.asLatexString() << ',';
|
||||||
if (params().keepAspectRatio)
|
if (params().keepAspectRatio)
|
||||||
size << "keepaspectratio,";
|
size << "keepaspectratio,";
|
||||||
}
|
}
|
||||||
|
@ -3733,9 +3733,9 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
|
|||||||
if (opts.find("width") != opts.end())
|
if (opts.find("width") != opts.end())
|
||||||
os << "\twidth "
|
os << "\twidth "
|
||||||
<< translate_len(opts["width"]) << '\n';
|
<< translate_len(opts["width"]) << '\n';
|
||||||
if (opts.find("height") != opts.end())
|
if (opts.find("totalheight") != opts.end())
|
||||||
os << "\theight "
|
os << "\theight "
|
||||||
<< translate_len(opts["height"]) << '\n';
|
<< translate_len(opts["totalheight"]) << '\n';
|
||||||
if (opts.find("scale") != opts.end()) {
|
if (opts.find("scale") != opts.end()) {
|
||||||
istringstream iss(opts["scale"]);
|
istringstream iss(opts["scale"]);
|
||||||
double val;
|
double val;
|
||||||
@ -3751,7 +3751,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
|
|||||||
vector<string>::const_iterator s =
|
vector<string>::const_iterator s =
|
||||||
find(keys.begin(), keys.end(), "width");
|
find(keys.begin(), keys.end(), "width");
|
||||||
if (s == keys.end())
|
if (s == keys.end())
|
||||||
s = find(keys.begin(), keys.end(), "height");
|
s = find(keys.begin(), keys.end(), "totalheight");
|
||||||
if (s == keys.end())
|
if (s == keys.end())
|
||||||
s = find(keys.begin(), keys.end(), "scale");
|
s = find(keys.begin(), keys.end(), "scale");
|
||||||
if (s != keys.end() && distance(s, a) > 0)
|
if (s != keys.end() && distance(s, a) > 0)
|
||||||
@ -3812,8 +3812,8 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
|
|||||||
special << "trim,";
|
special << "trim,";
|
||||||
if (opts.find("viewport") != opts.end())
|
if (opts.find("viewport") != opts.end())
|
||||||
special << "viewport=" << opts["viewport"] << ',';
|
special << "viewport=" << opts["viewport"] << ',';
|
||||||
if (opts.find("totalheight") != opts.end())
|
if (opts.find("height") != opts.end())
|
||||||
special << "totalheight=" << opts["totalheight"] << ',';
|
special << "height=" << opts["height"] << ',';
|
||||||
if (opts.find("type") != opts.end())
|
if (opts.find("type") != opts.end())
|
||||||
special << "type=" << opts["type"] << ',';
|
special << "type=" << opts["type"] << ',';
|
||||||
if (opts.find("ext") != opts.end())
|
if (opts.find("ext") != opts.end())
|
||||||
|
@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
|
|||||||
|
|
||||||
// Do not remove the comment below, so we get merge conflict in
|
// Do not remove the comment below, so we get merge conflict in
|
||||||
// independent branches. Instead add your own.
|
// independent branches. Instead add your own.
|
||||||
#define LYX_FORMAT_LYX 588 // spitz: support \theendnotes
|
#define LYX_FORMAT_LYX 589 // spitz: height > totalheight
|
||||||
#define LYX_FORMAT_TEX2LYX 588
|
#define LYX_FORMAT_TEX2LYX 589
|
||||||
|
|
||||||
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
|
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
|
Loading…
Reference in New Issue
Block a user