[LyX/master] tex2lyx support for parfillskip
Juergen Spitzmueller
spitz at lyx.org
Sun Aug 2 16:26:09 UTC 2026
commit 2766e7ef00461bb7f5068a25a8b11bfdcacaf6c0
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Sun Aug 2 18:25:48 2026 +0200
tex2lyx support for parfillskip
---
src/tex2lyx/Preamble.cpp | 74 +++++++++++++++++++++++++++++++++++-------------
src/tex2lyx/Preamble.h | 2 ++
2 files changed, 56 insertions(+), 20 deletions(-)
diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp
index 61dac99ac9..7ce1014e3f 100644
--- a/src/tex2lyx/Preamble.cpp
+++ b/src/tex2lyx/Preamble.cpp
@@ -971,6 +971,8 @@ Preamble::Preamble() : one_language(true), default_language("english"),
h_cite_engine_type = "default";
h_color = "#008000";
h_defskip = "medskip";
+ h_parfillskip_type = "default";
+ h_parfillskip_value = "";
h_dynamic_quotes = false;
//h_float_placement;
//h_fontcolor;
@@ -2212,27 +2214,47 @@ void Preamble::handle_package(Parser &p, string const & name,
delete_opt(options, o);
}
- else if (name == "parskip" && options.size() < 2 && (opts.empty() || prefixIs(opts, "skip="))) {
- if (opts.empty())
- h_paragraph_separation = "halfline";
- else {
- if (opts == "skip=\\smallskipamount")
- h_defskip = "smallskip";
- else if (opts == "skip=\\medskipamount")
- h_defskip = "medskip";
- else if (opts == "skip=\\bigskipamount")
- h_defskip = "bigskip";
- else if (opts == "skip=\\baselineskip")
- h_defskip = "fullline";
- else {
- // get value, unbraced
- string length = rtrim(ltrim(token(opts, '=', 1), "{"), "}");
- // transform glue length if we have one
- is_glue_length(length);
- h_defskip = length;
+ else if (name == "parskip"
+ && (opts.empty()
+ || (options.size() == 1 && (prefixIs(opts, "skip=") || (prefixIs(opts, "parfill="))))
+ || (options.size() == 2 && contains(opts, "skip=") && (contains(opts, "parfill="))))) {
+ h_paragraph_separation = "skip";
+ h_defskip = "halfline";
+ if (!opts.empty()) {
+ vector<string> ps_options = getVectorFromString(opts);
+ for (auto const & o : ps_options) {
+ if (o == "skip=\\smallskipamount")
+ h_defskip = "smallskip";
+ else if (o == "skip=\\medskipamount")
+ h_defskip = "medskip";
+ else if (o == "skip=\\bigskipamount")
+ h_defskip = "bigskip";
+ else if (o == "skip=\\baselineskip")
+ h_defskip = "fullline";
+ else if (prefixIs(o, "skip=")) {
+ // get value, unbraced
+ string length = rtrim(ltrim(token(o, '=', 1), "{"), "}");
+ // transform glue length if we have one
+ is_glue_length(length);
+ h_defskip = length;
+ }
+ if (prefixIs(o, "parfill=")) {
+ // get value, unbraced
+ string const content = rtrim(ltrim(token(o, '=', 1), "{"), "}");
+ if (content == "\\z@ plus 1fil")
+ h_parfillskip_type = "none";
+ else if (content == ".3333\\linewidth plus 1fil")
+ h_parfillskip_type = "thirdline";
+ else if (content == ".25\\linewidth plus 1fil")
+ h_parfillskip_type = "quarterline";
+ else {
+ h_parfillskip_type = "custom";
+ h_parfillskip_value = translate_len(content);
+ }
+ }
}
- h_paragraph_separation = "skip";
}
+ options.clear();
}
else if (is_known(name, known_lyx_packages) && options.empty()) {
@@ -2694,7 +2716,8 @@ bool Preamble::writeLyXHeader(ostream & os, bool subdoc, string const & outfiled
os << h_margins
<< "\\secnumdepth " << h_secnumdepth << "\n"
<< "\\tocdepth " << h_tocdepth << "\n"
- << "\\paragraph_separation " << h_paragraph_separation << "\n";
+ << "\\paragraph_separation " << h_paragraph_separation << "\n"
+ << "\\parfillskip \"" << h_parfillskip_type << "\" \"" << h_parfillskip_value << "\"\n";
if (h_paragraph_separation == "skip")
os << "\\defskip " << h_defskip << "\n";
else
@@ -3513,6 +3536,17 @@ void Preamble::parse(Parser & p, string const & forceclass,
h_defskip = "fullline";
else
h_defskip = translate_len(content);
+ } else if (name == "\\parfillskip") {
+ if (content == "\\z@ plus 1fil")
+ h_parfillskip_type = "none";
+ else if (content == ".3333\\linewidth plus 1fil")
+ h_parfillskip_type = "thirdline";
+ else if (content == ".25\\linewidth plus 1fil")
+ h_parfillskip_type = "quarterline";
+ else {
+ h_parfillskip_type = "custom";
+ h_parfillskip_value = translate_len(content);
+ }
} else if (name == "\\mathindent") {
h_mathindentation = translate_len(content);
} else
diff --git a/src/tex2lyx/Preamble.h b/src/tex2lyx/Preamble.h
index 3b3011478c..61a8a4f8b5 100644
--- a/src/tex2lyx/Preamble.h
+++ b/src/tex2lyx/Preamble.h
@@ -178,6 +178,8 @@ private:
std::map<std::string, std::string> h_custom_colors;
std::string h_color;
std::string h_defskip;
+ std::string h_parfillskip_type;
+ std::string h_parfillskip_value;
bool h_dynamic_quotes;
std::string h_float_placement;
std::string h_fontcolor;
More information about the lyx-cvs
mailing list