#include "Dimension.h"
#include "FuncRequest.h"
#include "FuncStatus.h"
+#include "Language.h"
#include "LaTeXFeatures.h"
#include "Length.h"
#include "Lexer.h"
#include "MetricsInfo.h"
#include "OutputParams.h"
+#include "output_xhtml.h"
#include "support/debug.h"
#include "support/docstream.h"
InsetSpace::InsetSpace(InsetSpaceParams const & params)
- : params_(params)
+ : Inset(0), params_(params)
{}
}
-Length InsetSpace::length() const
+GlueLength InsetSpace::length() const
{
return params_.length;
}
message = _("Horizontal Fill (Down Brace)");
break;
case InsetSpaceParams::CUSTOM:
+ // FIXME unicode
message = support::bformat(_("Horizontal Space (%1$s)"),
- params_.length.asDocstring());
+ from_ascii(params_.length.asString()));
break;
case InsetSpaceParams::CUSTOM_PROTECTED:
+ // FIXME unicode
message = support::bformat(_("Protected Horizontal Space (%1$s)"),
- params_.length.asDocstring());
+ from_ascii(params_.length.asString()));
break;
}
return message;
case InsetSpaceParams::CUSTOM:
case InsetSpaceParams::CUSTOM_PROTECTED: {
int const w =
- params_.length.inPixels(mi.base.textwidth,
+ params_.length.len().inPixels(mi.base.textwidth,
fm.width(char_type('M')));
int const minw = (w < 0) ? 3 * arrow_size : 4;
dim.wid = max(minw, abs(w));
{
Dimension const dim = dimension(*pi.base.bv);
- if (isStretchableSpace() || params_.length.value() < 0) {
+ if (isStretchableSpace() || params_.length.len().value() < 0) {
int const asc = theFontMetrics(pi.base.font).ascent('M');
int const desc = theFontMetrics(pi.base.font).descent('M');
// Pixel height divisible by 2 for prettier fill graphics:
break;
}
- if (!length.empty())
+ if (!length.len().empty())
os << "\n\\length " << length.asString();
}
os << (runparams.free_spacing ? " " : "\\ ");
break;
case InsetSpaceParams::PROTECTED:
- os << (runparams.free_spacing ? ' ' : '~');
+ if (runparams.local_font &&
+ runparams.local_font->language()->lang() == "polutonikogreek")
+ // in babel's polutonikogreek, ~ is active
+ os << (runparams.free_spacing ? " " : "\\nobreakspace{}");
+ else
+ os << (runparams.free_spacing ? ' ' : '~');
break;
case InsetSpaceParams::THIN:
os << (runparams.free_spacing ? " " : "\\,");
}
-void InsetSpace::xhtml(odocstream & os, OutputParams const &) const
+docstring InsetSpace::xhtml(XHTMLStream & xs, OutputParams const &) const
{
+ string output;
switch (params_.kind) {
case InsetSpaceParams::NORMAL:
- os << " ";
+ output = " ";
break;
case InsetSpaceParams::ENSKIP:
case InsetSpaceParams::ENSPACE:
- os << " ";
+ output =" ";
break;
case InsetSpaceParams::QQUAD:
- os << " ";
+ output =" ";
case InsetSpaceParams::THICK:
case InsetSpaceParams::QUAD:
- os << " ";
+ output =" ";
break;
case InsetSpaceParams::THIN:
- os << " ";
+ output =" ";
break;
case InsetSpaceParams::PROTECTED:
case InsetSpaceParams::MEDIUM:
case InsetSpaceParams::NEGTHIN:
case InsetSpaceParams::NEGMEDIUM:
case InsetSpaceParams::NEGTHICK:
- os << " ";
+ output =" ";
break;
case InsetSpaceParams::HFILL:
case InsetSpaceParams::HFILL_PROTECTED:
case InsetSpaceParams::RIGHTARROWFILL:
case InsetSpaceParams::UPBRACEFILL:
case InsetSpaceParams::DOWNBRACEFILL:
- // FIXME Can we do anything with those in HTML?
- os << '\n';
+ // FIXME XHTML
+ // Can we do anything with those in HTML?
break;
case InsetSpaceParams::CUSTOM:
case InsetSpaceParams::CUSTOM_PROTECTED:
- // FIXME Probably we could do some sort of blank span?
- os << '\n';
+ // FIXME XHTML
+ // Probably we could do some sort of blank span?
+ break;
}
+ // don't escape the entities!
+ xs << XHTMLStream::NextRaw() << from_ascii(output);
+ return docstring();
}