From cdeb542fc0b7d89d49c0099e9ff81082a0114043 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Uwe=20St=C3=B6hr?= Date: Thu, 4 Dec 2014 00:48:27 +0100 Subject: [PATCH] tex2lyx: backport support for relative sizes and glue lengths --- src/tex2lyx/TODO.txt | 2 - .../test/box-color-size-space-align.lyx.lyx | 22 ++++++++- .../test/box-color-size-space-align.tex | 8 +++- src/tex2lyx/text.cpp | 48 +++++++++++++++---- status.21x | 6 ++- 5 files changed, 71 insertions(+), 15 deletions(-) diff --git a/src/tex2lyx/TODO.txt b/src/tex2lyx/TODO.txt index f7118e11e2..eb599bc45d 100644 --- a/src/tex2lyx/TODO.txt +++ b/src/tex2lyx/TODO.txt @@ -36,8 +36,6 @@ Format LaTeX feature LyX feature 358 custom makeindex command \index_command 363 horizontal longtable alignment InsetTabular 364 branch file name suffix \filename_suffix -367 relative lengths for h and v space InsetSpace, InsetVSpace -368 glue lengths InsetSpace 371 automatic mhchem loading \use_mhchem 375 \includeonly \{begin,end}_includeonly 376 update .aux of unincluded children \maintain_unincluded_children diff --git a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx index c09701a262..5645b5b9c5 100644 --- a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx +++ b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx @@ -1694,9 +1694,19 @@ in the middle. Lines can have a downbrace fill \end_inset -in the middle. Lines can have space +in the middle. Lines can have an absolute space \begin_inset space \hspace{} \length 2cm +\end_inset + + in the middle. Lines can have a relative space +\begin_inset space \hspace{} +\length 12text% +\end_inset + + in the middle. Lines can have a glue-length space +\begin_inset space \hspace{} +\length 2cm+2mm-1mm \end_inset in the middle. Lines can have protected space @@ -2006,8 +2016,16 @@ in the middle. Lines can have a vfill \begin_inset VSpace vfill* \end_inset - in the middle. Lines can have vertical space + in the middle. Lines can have a vertical absolute space \begin_inset VSpace 2cm +\end_inset + + in the middle. Lines can have a vertical relative space +\begin_inset VSpace 9col% +\end_inset + + in the middle. Lines can have a vertical glue-length space +\begin_inset VSpace 2cm-2bp+1cc \end_inset in the middle. Lines can have protected vertical space diff --git a/src/tex2lyx/test/box-color-size-space-align.tex b/src/tex2lyx/test/box-color-size-space-align.tex index e0428fdf79..7bff4bd4ab 100644 --- a/src/tex2lyx/test/box-color-size-space-align.tex +++ b/src/tex2lyx/test/box-color-size-space-align.tex @@ -357,7 +357,9 @@ Lines can have a left arrow fill \leftarrowfill in the middle. Lines can have a right arrow fill \rightarrowfill in the middle. Lines can have a upbrace fill \upbracefill in the middle. Lines can have a downbrace fill \downbracefill in the middle. -Lines can have space \hspace{2cm} in the middle. +Lines can have an absolute space \hspace{2cm} in the middle. +Lines can have a relative space \hspace{0.12\textwidth} in the middle. +Lines can have a glue-length space \hspace{2cm plus 2mm minus 1mm} in the middle. Lines can have protected space \hspace*{2cm} in the middle. We also handle defined spaces: @@ -421,7 +423,9 @@ interword: $a\ b$ Lines can have a vfill \vfill in the middle. Lines can have a vfill \vspace{\fill} in the middle. Lines can have a protected vfill \vspace*{\fill} in the middle. -Lines can have vertical space \vspace{2cm} in the middle. +Lines can have a vertical absolute space \vspace{2cm} in the middle. +Lines can have a vertical relative space \vspace{0.09\columnwidth} in the middle. +Lines can have a vertical glue-length space \vspace{2cm minus 2bp plus 1cc} in the middle. Lines can have protected vertical space \vspace*{2cm} in the middle. We also handle skips: diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp index fceeb928e5..5657d95b61 100644 --- a/src/tex2lyx/text.cpp +++ b/src/tex2lyx/text.cpp @@ -4406,13 +4406,41 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, case Length::MU: known_unit = true; break; - default: + default: { + //unitFromString(unit) fails for relative units like Length::PCW + // therefore handle them separately + if (unit == "\\paperwidth" || unit == "\\columnwidth" + || unit == "\\textwidth" || unit == "\\linewidth" + || unit == "\\textheight" || unit == "\\paperheight") + known_unit = true; break; + } } } } - if (t.cs()[0] == 'h' && (known_unit || known_hspace)) { + // 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, "+"); + } + + if (t.cs()[0] == 'h' && (known_unit || known_hspace || is_gluelength)) { // Literal horizontal length or known variable context.check_layout(os); begin_inset(os, "space "); @@ -4424,16 +4452,20 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, os << unit; os << "}"; if (known_unit && !known_hspace) - os << "\n\\length " - << translate_len(length); + os << "\n\\length " << translate_len(length); + if (is_gluelength) + os << "\n\\length " << gluelength; end_inset(os); - } else if (known_unit || known_vspace) { + } else if (known_unit || known_vspace || is_gluelength) { // Literal vertical length or known variable context.check_layout(os); begin_inset(os, "VSpace "); - if (known_unit) - os << value; - os << unit; + if (known_vspace) + os << unit; + if (known_unit && !known_vspace) + os << translate_len(length); + if (is_gluelength) + os << gluelength; if (starred) os << '*'; end_inset(os); diff --git a/status.21x b/status.21x index 5ae673d3eb..d227a41188 100644 --- a/status.21x +++ b/status.21x @@ -49,7 +49,11 @@ What's new - Support for the Libertine fonts. -- Support for relative lengths in the paragraph separation setting. +- Support for relative lengths in the paragraph separation setting. + +- Support for relative lengths in horizontal and vertical spaces. + +- Support for glue length in horizontal and vertical spaces. * USER INTERFACE -- 2.39.5