From 1427b6fe316e257ce40512872c44cd438a51c498 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Uwe=20St=C3=B6hr?= Date: Tue, 25 Nov 2014 00:50:39 +0100 Subject: [PATCH] tex2lyx: support for glue lengths in InsetSpace --- src/tex2lyx/TODO.txt | 1 - .../test/box-color-size-space-align.lyx.lyx | 17 +++++++--- .../test/box-color-size-space-align.tex | 10 +++--- src/tex2lyx/text.cpp | 31 ++++++++++++++++--- 4 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/tex2lyx/TODO.txt b/src/tex2lyx/TODO.txt index 2196789cd2..eb599bc45d 100644 --- a/src/tex2lyx/TODO.txt +++ b/src/tex2lyx/TODO.txt @@ -36,7 +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 -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 c8bef4ea23..5b41fab521 100644 --- a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx +++ b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx @@ -1694,14 +1694,19 @@ in the middle. Lines can have a downbrace fill \end_inset -in the middle. Lines can have absolute space +in the middle. Lines can have an absolute space \begin_inset space \hspace{} \length 2cm \end_inset - in the middle. Lines can have relative space + 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 @@ -2011,12 +2016,16 @@ in the middle. Lines can have a vfill \begin_inset VSpace vfill* \end_inset - in the middle. Lines can have vertical absolute space + in the middle. Lines can have a vertical absolute space \begin_inset VSpace 2cm \end_inset - in the middle. Lines can have vertical relative space + 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 009fcc08db..7bff4bd4ab 100644 --- a/src/tex2lyx/test/box-color-size-space-align.tex +++ b/src/tex2lyx/test/box-color-size-space-align.tex @@ -357,8 +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 absolute space \hspace{2cm} in the middle. -Lines can have relative space \hspace{0.12\textwidth} 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: @@ -422,8 +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 absolute space \vspace{2cm} in the middle. -Lines can have vertical relative space \vspace{0.09\columnwidth} 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 36efcae31f..ed4fd0df27 100644 --- a/src/tex2lyx/text.cpp +++ b/src/tex2lyx/text.cpp @@ -4408,7 +4408,27 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, } } - 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" + 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 "); @@ -4420,10 +4440,11 @@ 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 "); @@ -4431,6 +4452,8 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, os << unit; if (known_unit && !known_vspace) os << translate_len(length); + if (is_gluelength) + os << gluelength; if (starred) os << '*'; end_inset(os); -- 2.39.2