This patch fixes bug 2786: tex2lyx does not know any of the spaces supported by InsetSpace except ~. The attached LyX file shows that the roundtrip LyX->LaTeX->LyX->LaTeX is perfect.
This goes in tonight unless somebody objects. Jean-Marc, also for 1.4.3? Georg
insetspace-test.lyx
Description: application/lyx
Index: src/tex2lyx/text.C =================================================================== --- src/tex2lyx/text.C (Revision 14830) +++ src/tex2lyx/text.C (Arbeitskopie) @@ -198,6 +198,15 @@ char const * const known_pdftex_graphics */ char const * const known_tex_extensions[] = {"tex", 0}; +/// spaces known by InsetSpace +char const * const known_spaces[] = { " ", "space", ",", "thinspace", "quad", +"qquad", "enspace", "enskip", "negthinspace", 0}; + +/// the same as known_spaces with .lyx names +char const * const known_coded_spaces[] = { "space{}", "space{}", +"thinspace{}", "thinspace{}", "quad{}", "qquad{}", "enspace{}", "enskip{}", +"negthinspace{}", 0}; + /// splits "x=z, y=b" into a map map<string, string> split_map(string const & s) @@ -2184,6 +2193,23 @@ void parse_text(Parser & p, ostream & os skip_braces(p); } + else if (is_known(t.cs(), known_spaces)) { + char const * const * where = is_known(t.cs(), known_spaces); + context.check_layout(os); + begin_inset(os, "InsetSpace "); + os << '\\' << known_coded_spaces[where - known_spaces] + << '\n'; + // LyX adds {} after the space, so we have to eat + // spaces here if there are any before a possible + // {} pair, but not after \\, (whitespace after \\, + // is not swallowed by LaTeX). + if (t.cs() != ",") + eat_whitespace(p, os, context, false); + // LyX does not add {} after "\\ " and "\\," + if (t.cs() != " " && t.cs() != ",") + skip_braces(p); + } + else if (t.cs() == "newpage") { context.check_layout(os); // FIXME: what about \\clearpage and \\pagebreak?