X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetSpace.cpp;h=2a709c4b0edf28c15fb3d070c02fe5b49a16a2b7;hb=cf6ff2cac79d09adafa63e3a1ec02dfb09f707b9;hp=4066e3954a91dd3f377838451826c74c6d8c38ae;hpb=41740ea915ee7a95206d780b6256e660cef39c6e;p=lyx.git diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp index 4066e3954a..2a709c4b0e 100644 --- a/src/insets/InsetSpace.cpp +++ b/src/insets/InsetSpace.cpp @@ -27,6 +27,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_xhtml.h" +#include "texstream.h" #include "support/debug.h" #include "support/docstream.h" @@ -200,28 +201,30 @@ int const arrow_size = 8; void InsetSpace::metrics(MetricsInfo & mi, Dimension & dim) const { if (isHfill()) { - // The metrics for this kinds are calculated externally in - // \c TextMetrics::computeRowMetrics. Those are dummy value: - dim = Dimension(10, 10, 10); + // The width for hfills is calculated externally in + // TextMetrics::computeRowMetrics. The value of 5 is the + // minimal value when the hfill is not active. + dim = Dimension(5, 10, 10); return; } frontend::FontMetrics const & fm = theFontMetrics(mi.base.font); dim.asc = fm.maxAscent(); dim.des = fm.maxDescent(); + int const em = fm.em(); switch (params_.kind) { case InsetSpaceParams::THIN: case InsetSpaceParams::NEGTHIN: - dim.wid = fm.width(char_type('M')) / 6; + dim.wid = em / 6; break; case InsetSpaceParams::MEDIUM: case InsetSpaceParams::NEGMEDIUM: - dim.wid = fm.width(char_type('M')) / 4; + dim.wid = em / 4; break; case InsetSpaceParams::THICK: case InsetSpaceParams::NEGTHICK: - dim.wid = fm.width(char_type('M')) / 2; + dim.wid = em / 2; break; case InsetSpaceParams::PROTECTED: case InsetSpaceParams::VISIBLE: @@ -229,20 +232,19 @@ void InsetSpace::metrics(MetricsInfo & mi, Dimension & dim) const dim.wid = fm.width(char_type(' ')); break; case InsetSpaceParams::QUAD: - dim.wid = fm.width(char_type('M')); + dim.wid = em; break; case InsetSpaceParams::QQUAD: - dim.wid = 2 * fm.width(char_type('M')); + dim.wid = 2 * em; break; case InsetSpaceParams::ENSPACE: case InsetSpaceParams::ENSKIP: - dim.wid = int(0.5 * fm.width(char_type('M'))); + dim.wid = int(0.5 * em); break; case InsetSpaceParams::CUSTOM: case InsetSpaceParams::CUSTOM_PROTECTED: { int const w = - params_.length.len().inPixels(mi.base.textwidth, - fm.width(char_type('M'))); + params_.length.len().inPixels(mi.base); int const minw = (w < 0) ? 3 * arrow_size : 4; dim.wid = max(minw, abs(w)); break; @@ -258,8 +260,6 @@ void InsetSpace::metrics(MetricsInfo & mi, Dimension & dim) const // shut up compiler break; } - // Cache the inset dimension. - setDimCache(mi, dim); } @@ -387,7 +387,6 @@ void InsetSpace::draw(PainterInfo & pi, int x, int y) const void InsetSpaceParams::write(ostream & os) const { - string command; switch (kind) { case InsetSpaceParams::NORMAL: os << "\\space{}"; @@ -703,24 +702,39 @@ int InsetSpace::docbook(odocstream & os, OutputParams const &) const { switch (params_.kind) { case InsetSpaceParams::NORMAL: + os << " "; + break; case InsetSpaceParams::QUAD: + os << " "; + break; case InsetSpaceParams::QQUAD: + os << "  "; + break; case InsetSpaceParams::ENSKIP: - os << " "; + os << " "; break; - // FIXME For spaces and dashes look here: - // http://oreilly.com/catalog/docbook/book2/iso-pub.html case InsetSpaceParams::PROTECTED: - // FIXME ␣ ? + os << " "; + break; case InsetSpaceParams::VISIBLE: + os << "␣"; + break; case InsetSpaceParams::ENSPACE: - // FIXME   ? + os << "⁠ ⁠"; + break; case InsetSpaceParams::THIN: + os << " "; + break; case InsetSpaceParams::MEDIUM: + os << " "; + break; case InsetSpaceParams::THICK: + os << " "; + break; case InsetSpaceParams::NEGTHIN: case InsetSpaceParams::NEGMEDIUM: case InsetSpaceParams::NEGTHICK: + // FIXME os << " "; break; case InsetSpaceParams::HFILL: @@ -817,7 +831,7 @@ docstring InsetSpace::xhtml(XHTMLStream & xs, OutputParams const &) const void InsetSpace::validate(LaTeXFeatures & features) const { if (params_.kind == InsetSpaceParams::NEGMEDIUM || - params_.kind == InsetSpaceParams::NEGTHICK) + params_.kind == InsetSpaceParams::NEGTHICK) features.require("amsmath"); } @@ -830,7 +844,7 @@ void InsetSpace::toString(odocstream & os) const } -void InsetSpace::forOutliner(docstring & os, size_t) const +void InsetSpace::forOutliner(docstring & os, size_t const, bool const) const { // There's no need to be cute here. os += " ";