]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetSpace.cpp
Fix empty width support for Box inset
[lyx.git] / src / insets / InsetSpace.cpp
index d589b9750b484c5af7f9db9dd215d5ca72636bae..03c9367b9acaaca31edd5bb066ec454d93d6b2fa 100644 (file)
@@ -488,9 +488,9 @@ void InsetSpaceParams::read(Lexer & lex)
                kind = InsetSpaceParams::ENSKIP;
        else if (command == "\\negthinspace{}")
                kind = InsetSpaceParams::NEGTHIN;
-       else if (math && command == "\\negmedspace{}")
+       else if (command == "\\negmedspace{}")
                kind = InsetSpaceParams::NEGMEDIUM;
-       else if (math && command == "\\negthickspace{}")
+       else if (command == "\\negthickspace{}")
                kind = InsetSpaceParams::NEGTHICK;
        else if (command == "\\hfill{}")
                kind = InsetSpaceParams::HFILL;
@@ -621,7 +621,8 @@ void InsetSpace::latex(otexstream & os, OutputParams const & runparams) const
 }
 
 
-int InsetSpace::plaintext(odocstream & os, OutputParams const &) const
+int InsetSpace::plaintext(odocstringstream & os,
+        OutputParams const &, size_t) const
 {
        switch (params_.kind) {
        case InsetSpaceParams::HFILL:
@@ -646,6 +647,41 @@ int InsetSpace::plaintext(odocstream & os, OutputParams const &) const
        case InsetSpaceParams::DOWNBRACEFILL:
                os << "/-^-\\";
                return 5;
+       case InsetSpaceParams::VISIBLE:
+               os.put(0x2423);
+               return 1;
+       case InsetSpaceParams::ENSKIP:
+               os.put(0x2002);
+               return 1;
+       case InsetSpaceParams::ENSPACE:
+               os.put(0x2060); // WORD JOINER, makes the breakable en space unbreakable
+               os.put(0x2002);
+               os.put(0x2060); // WORD JOINER, makes the breakable en space unbreakable
+               return 3;
+       case InsetSpaceParams::QUAD:
+               os.put(0x2003);
+               return 1;
+       case InsetSpaceParams::QQUAD:
+               os.put(0x2003);
+               os.put(0x2003);
+               return 2;
+       case InsetSpaceParams::THIN:
+               os.put(0x2009);
+               return 1;
+       case InsetSpaceParams::MEDIUM:
+               os.put(0x2005);
+               return 1;
+       case InsetSpaceParams::THICK:
+               os.put(0x2004);
+               return 1;
+       case InsetSpaceParams::PROTECTED:
+       case InsetSpaceParams::CUSTOM_PROTECTED:
+               os.put(0x00a0);
+               return 1;
+       case InsetSpaceParams::NEGTHIN:
+       case InsetSpaceParams::NEGMEDIUM:
+       case InsetSpaceParams::NEGTHICK:
+               return 0;
        default:
                os << ' ';
                return 1;
@@ -680,12 +716,15 @@ int InsetSpace::docbook(odocstream & os, OutputParams const &) const
        case InsetSpaceParams::HFILL:
        case InsetSpaceParams::HFILL_PROTECTED:
                os << '\n';
+               break;
        case InsetSpaceParams::DOTFILL:
                // FIXME
                os << '\n';
+               break;
        case InsetSpaceParams::HRULEFILL:
                // FIXME
                os << '\n';
+               break;
        case InsetSpaceParams::LEFTARROWFILL:
        case InsetSpaceParams::RIGHTARROWFILL:
        case InsetSpaceParams::UPBRACEFILL:
@@ -694,6 +733,7 @@ int InsetSpace::docbook(odocstream & os, OutputParams const &) const
        case InsetSpaceParams::CUSTOM_PROTECTED:
                // FIXME
                os << '\n';
+               break;
        }
        return 0;
 }
@@ -707,20 +747,27 @@ docstring InsetSpace::xhtml(XHTMLStream & xs, OutputParams const &) const
                output = " ";
                break;
        case InsetSpaceParams::ENSKIP:
-       case InsetSpaceParams::ENSPACE:
                output ="&ensp;";
                break;
+       case InsetSpaceParams::ENSPACE:
+               output ="&#x2060;&ensp;&#x2060;";
+               break;
        case InsetSpaceParams::QQUAD:
-               output ="&emsp;";
+               output ="&emsp;&emsp;";
+               break;
        case InsetSpaceParams::THICK:
+               output ="&#x2004;";
+               break;
        case InsetSpaceParams::QUAD:
                output ="&emsp;";
                break;
+       case InsetSpaceParams::MEDIUM:
+               output ="&#x2005;";
+               break;
        case InsetSpaceParams::THIN:
                output ="&thinsp;";
                break;
        case InsetSpaceParams::PROTECTED:
-       case InsetSpaceParams::MEDIUM:
        case InsetSpaceParams::NEGTHIN:
        case InsetSpaceParams::NEGMEDIUM:
        case InsetSpaceParams::NEGTHICK:
@@ -742,9 +789,13 @@ docstring InsetSpace::xhtml(XHTMLStream & xs, OutputParams const &) const
                // Can we do anything with those in HTML?
                break;
        case InsetSpaceParams::CUSTOM:
+               // FIXME XHTML
+               // Probably we could do some sort of blank span?
+               break;
        case InsetSpaceParams::CUSTOM_PROTECTED:
                // FIXME XHTML
                // Probably we could do some sort of blank span?
+               output ="&nbsp;";
                break;
        }
        // don't escape the entities!
@@ -763,7 +814,9 @@ void InsetSpace::validate(LaTeXFeatures & features) const
 
 void InsetSpace::toString(odocstream & os) const
 {
-       plaintext(os, OutputParams(0));
+       odocstringstream ods;
+       plaintext(ods, OutputParams(0));
+       os << ods.str();
 }
 
 
@@ -787,9 +840,9 @@ bool InsetSpace::isStretchableSpace() const
 }
 
 
-docstring InsetSpace::contextMenuName() const
+string InsetSpace::contextMenuName() const
 {
-       return from_ascii("context-space");
+       return "context-space";
 }
 
 
@@ -809,7 +862,8 @@ void InsetSpace::string2params(string const & in, InsetSpaceParams & params)
                params.math = true;
        else {
                params.math = false;
-               LASSERT(name == "space", /**/);
+               // we can try to read this even if the name is wrong
+               LATTEST(name == "space");
        }
 
        // There are cases, such as when we are called via getStatus() from