mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
Add support for glue length in parskip (#12867)
This commit is contained in:
parent
e1cb15ee5d
commit
d2db74f9ee
@ -7,6 +7,14 @@ changes happened in particular if possible. A good example would be
|
|||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
2024-06-01 Jürgen Spitzmüller <spitz@lyx.org>
|
||||||
|
* Format incremented to 622: Allow glue length (skip) in parskip setting.
|
||||||
|
|
||||||
|
2024-05-13 Jürgen Spitzmüller <spitz@lyx.org>
|
||||||
|
* Format incremented to 621: Escape some special chars (#, %, \) in URL
|
||||||
|
with hyperref. Previous to this change, the user had to escape this
|
||||||
|
themselves.
|
||||||
|
|
||||||
2023-09-29 Jürgen Spitzmüller <spitz@lyx.org>
|
2023-09-29 Jürgen Spitzmüller <spitz@lyx.org>
|
||||||
* Format incremented to 620: Add InsetBox "default" framecolor ("foreground"
|
* Format incremented to 620: Add InsetBox "default" framecolor ("foreground"
|
||||||
rather than "black" in GUI). This aligns better with dark mode.
|
rather than "black" in GUI). This aligns better with dark mode.
|
||||||
|
@ -26,10 +26,10 @@ from datetime import (datetime, date, time)
|
|||||||
|
|
||||||
# Uncomment only what you need to import, please.
|
# Uncomment only what you need to import, please.
|
||||||
|
|
||||||
from parser_tools import (find_end_of_inset, find_end_of_layout, find_token, find_re)
|
from parser_tools import (find_end_of_inset, find_end_of_layout, find_token, find_re, get_value)
|
||||||
# count_pars_in_inset, del_complete_lines, del_token, find_end_of,
|
# count_pars_in_inset, del_complete_lines, del_token, find_end_of,
|
||||||
# find_token_backwards, find_token_exact, get_bool_value,
|
# find_token_backwards, find_token_exact, get_bool_value,
|
||||||
# get_containing_inset, get_containing_layout, get_option_value, get_value,
|
# get_containing_inset, get_containing_layout, get_option_value,
|
||||||
# get_quoted_value, is_in_inset,
|
# get_quoted_value, is_in_inset,
|
||||||
# del_value,
|
# del_value,
|
||||||
# find_complete_lines,
|
# find_complete_lines,
|
||||||
@ -37,9 +37,10 @@ from parser_tools import (find_end_of_inset, find_end_of_layout, find_token, fin
|
|||||||
# set_bool_value
|
# set_bool_value
|
||||||
# find_tokens, check_token
|
# find_tokens, check_token
|
||||||
|
|
||||||
#from lyx2lyx_tools import (put_cmd_in_ert, add_to_preamble, insert_to_preamble, lyx2latex,
|
from lyx2lyx_tools import (add_to_preamble, latex_length)
|
||||||
# revert_language, revert_flex_inset, str2bool)
|
# put_cmd_in_ert, insert_to_preamble, lyx2latex,
|
||||||
# revert_font_attrs, latex_length
|
# revert_language, revert_flex_inset, str2bool,
|
||||||
|
# revert_font_attrs,
|
||||||
# get_ert, lyx2verbatim, length_in_bp, convert_info_insets
|
# get_ert, lyx2verbatim, length_in_bp, convert_info_insets
|
||||||
# revert_flex_inset, hex2ratio
|
# revert_flex_inset, hex2ratio
|
||||||
|
|
||||||
@ -167,17 +168,44 @@ def revert_url_escapes2(document):
|
|||||||
document.body[bs] = "\\backslash\\backslash"
|
document.body[bs] = "\\backslash\\backslash"
|
||||||
i = bs + 1
|
i = bs + 1
|
||||||
|
|
||||||
|
|
||||||
|
def revert_glue_parskip(document):
|
||||||
|
"""Revert parskip with glue length to user preamble."""
|
||||||
|
|
||||||
|
i = find_token(document.header, "\\paragraph_separation skip", 0)
|
||||||
|
if i == -1:
|
||||||
|
return
|
||||||
|
|
||||||
|
j = find_token(document.header, "\\defskip", 0)
|
||||||
|
if j == -1:
|
||||||
|
document.warning("Malformed LyX document! Missing \\defskip.")
|
||||||
|
return
|
||||||
|
|
||||||
|
val = get_value(document.header, "\\defskip", j)
|
||||||
|
|
||||||
|
if val.find("+") == -1 and val.find("-", 1) == -1:
|
||||||
|
# not a glue length
|
||||||
|
return
|
||||||
|
|
||||||
|
add_to_preamble(document, ["\\usepackage[skip={" + latex_length(val)[1] + "}]{parskip}"])
|
||||||
|
|
||||||
|
document.header[i] = "\\paragraph_separation indent"
|
||||||
|
document.header[j] = "\\paragraph_indentation default"
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Conversion hub
|
# Conversion hub
|
||||||
#
|
#
|
||||||
|
|
||||||
supported_versions = ["2.5.0", "2.5"]
|
supported_versions = ["2.5.0", "2.5"]
|
||||||
convert = [
|
convert = [
|
||||||
[621, [convert_url_escapes, convert_url_escapes2]]
|
[621, [convert_url_escapes, convert_url_escapes2]],
|
||||||
|
[622, []]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
revert = [[620, [revert_url_escapes2, revert_url_escapes]]
|
revert = [[621, [revert_glue_parskip]],
|
||||||
|
[620, [revert_url_escapes2, revert_url_escapes]]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -2189,8 +2189,13 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
|
|||||||
} else {
|
} else {
|
||||||
// load parskip package with required options
|
// load parskip package with required options
|
||||||
string psopts;
|
string psopts;
|
||||||
if (!psopt.empty())
|
if (!psopt.empty()) {
|
||||||
psopts = "skip=" + psopt;
|
if (contains(psopt, ' '))
|
||||||
|
// glue length has spaces: embrace
|
||||||
|
psopts = "skip={" + psopt + "}";
|
||||||
|
else
|
||||||
|
psopts = "skip=" + psopt;
|
||||||
|
}
|
||||||
string const xpsopts = getPackageOptions("parskip");
|
string const xpsopts = getPackageOptions("parskip");
|
||||||
if (!xpsopts.empty()) {
|
if (!xpsopts.empty()) {
|
||||||
if (!psopts.empty())
|
if (!psopts.empty())
|
||||||
|
@ -892,8 +892,10 @@ GuiDocument::GuiDocument(GuiView & lv)
|
|||||||
textLayoutModule->lspacingLE));
|
textLayoutModule->lspacingLE));
|
||||||
textLayoutModule->indentLE->setValidator(new LengthValidator(
|
textLayoutModule->indentLE->setValidator(new LengthValidator(
|
||||||
textLayoutModule->indentLE, false));
|
textLayoutModule->indentLE, false));
|
||||||
textLayoutModule->skipLE->setValidator(new LengthValidator(
|
// parskip accepts glue length
|
||||||
textLayoutModule->skipLE, false));
|
LengthValidator * skipLEValidator = new LengthValidator(textLayoutModule->skipLE, false);
|
||||||
|
skipLEValidator->setBottom(GlueLength());
|
||||||
|
textLayoutModule->skipLE->setValidator(skipLEValidator);
|
||||||
|
|
||||||
textLayoutModule->indentCO->addItem(qt_("Default"), toqstr("default"));
|
textLayoutModule->indentCO->addItem(qt_("Default"), toqstr("default"));
|
||||||
textLayoutModule->indentCO->addItem(qt_("Custom"), toqstr("custom"));
|
textLayoutModule->indentCO->addItem(qt_("Custom"), toqstr("custom"));
|
||||||
|
@ -1745,8 +1745,13 @@ void Preamble::handle_package(Parser &p, string const & name,
|
|||||||
h_defskip = "bigskip";
|
h_defskip = "bigskip";
|
||||||
else if (opts == "skip=\\baselineskip")
|
else if (opts == "skip=\\baselineskip")
|
||||||
h_defskip = "fullline";
|
h_defskip = "fullline";
|
||||||
else
|
else {
|
||||||
h_defskip = "opts";
|
// get value, unbraced
|
||||||
|
string length = rtrim(ltrim(token(opts, '=', 1), "{"), "}");
|
||||||
|
// transform glue length if we have one
|
||||||
|
is_glue_length(length);
|
||||||
|
h_defskip = length;
|
||||||
|
}
|
||||||
h_paragraph_separation = "skip";
|
h_paragraph_separation = "skip";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ extern std::string rgbcolor2code(std::string const & name);
|
|||||||
|
|
||||||
/// in text.cpp
|
/// in text.cpp
|
||||||
std::string translate_len(std::string const &);
|
std::string translate_len(std::string const &);
|
||||||
|
bool is_glue_length(std::string & length);
|
||||||
|
|
||||||
void parse_text(Parser & p, std::ostream & os, unsigned flags, bool outer,
|
void parse_text(Parser & p, std::ostream & os, unsigned flags, bool outer,
|
||||||
Context & context, std::string const & rdelim = "",
|
Context & context, std::string const & rdelim = "",
|
||||||
|
@ -608,6 +608,32 @@ string translate_len(string const & length)
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_glue_length(string & length)
|
||||||
|
{
|
||||||
|
// check for glue lengths
|
||||||
|
bool is_gluelength = false;
|
||||||
|
string gluelength = length;
|
||||||
|
string::size_type i = length.find(" minus");
|
||||||
|
if (i == string::npos) {
|
||||||
|
i = length.find(" plus");
|
||||||
|
if (i != string::npos)
|
||||||
|
is_gluelength = true;
|
||||||
|
} else
|
||||||
|
is_gluelength = true;
|
||||||
|
// if yes transform "9xx minus 8yy plus 7zz"
|
||||||
|
// to "9xx-8yy+7zz"
|
||||||
|
if (is_gluelength) {
|
||||||
|
i = gluelength.find(" minus");
|
||||||
|
if (i != string::npos)
|
||||||
|
gluelength.replace(i, 7, "-");
|
||||||
|
i = gluelength.find(" plus");
|
||||||
|
if (i != string::npos)
|
||||||
|
gluelength.replace(i, 6, "+");
|
||||||
|
length = gluelength;
|
||||||
|
}
|
||||||
|
return is_gluelength;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
@ -6039,25 +6065,8 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check for glue lengths
|
// check for glue lengths
|
||||||
bool is_gluelength = false;
|
|
||||||
string gluelength = length;
|
string gluelength = length;
|
||||||
string::size_type i = length.find(" minus");
|
bool is_gluelength = is_glue_length(gluelength);
|
||||||
if (i == string::npos) {
|
|
||||||
i = length.find(" plus");
|
|
||||||
if (i != string::npos)
|
|
||||||
is_gluelength = true;
|
|
||||||
} else
|
|
||||||
is_gluelength = true;
|
|
||||||
// if yes transform "9xx minus 8yy plus 7zz"
|
|
||||||
// to "9xx-8yy+7zz"
|
|
||||||
if (is_gluelength) {
|
|
||||||
i = gluelength.find(" minus");
|
|
||||||
if (i != string::npos)
|
|
||||||
gluelength.replace(i, 7, "-");
|
|
||||||
i = gluelength.find(" plus");
|
|
||||||
if (i != string::npos)
|
|
||||||
gluelength.replace(i, 6, "+");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (t.cs()[0] == 'h' && (known_unit || known_hspace || is_gluelength)) {
|
if (t.cs()[0] == 'h' && (known_unit || known_hspace || is_gluelength)) {
|
||||||
// Literal horizontal length or known variable
|
// Literal horizontal length or known variable
|
||||||
|
@ -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 621 // spitz: handle #% in frame urls
|
#define LYX_FORMAT_LYX 622 // spitz: support glue length in parskip
|
||||||
#define LYX_FORMAT_TEX2LYX 621
|
#define LYX_FORMAT_TEX2LYX 622
|
||||||
|
|
||||||
#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