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

Attachment: 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?

Reply via email to