#include "support/translator.h"
#include <boost/regex.hpp>
-#include "support/std_sstream.h"
+
#include <cmath> // std::abs
+#include <sstream>
using lyx::support::float_equal;
bool ResizeData::no_resize() const
{
- return float_equal(scale, 0.0, 0.05) &&
- width.zero() && height.zero();
+ return !usingScale() && width.zero() && height.zero();
+}
+
+
+bool ResizeData::usingScale() const
+{
+ return !float_equal(scale, 0.0, 0.05);
}
if (data.no_resize())
return string();
- std::ostringstream os;
- if (!float_equal(data.scale, 0.0, 0.05)) {
+ std::ostringstream os;
+ if (data.usingScale()) {
double const scl = data.scale / 100.0;
os << "\\scalebox{" << scl << "}{" << scl << "}{";
} else {
+ string width = "!";
+ string height = "!";
+ if (data.keepAspectRatio) {
+ if (data.width.inPixels(10) > data.height.inPixels(10))
+ width = data.width.asLatexString();
+ else
+ height = data.height.asLatexString();
+ } else {
+ if (!data.width.zero())
+ width = data.width.asLatexString();
+ if (!data.height.zero())
+ height = data.height.asLatexString();
+ }
+
os << "\\resizebox{"
- << (data.width.zero() ?
- "!" : data.width.asLatexString()) << "}{"
- << (data.height.zero() ?
- "!" : data.height.asLatexString()) << "}{";
+ << width << "}{"
+ << height << "}{";
}
return os.str();
}
if (data.no_rotation())
return string();
- std::ostringstream os;
- os << "\\rotatebox";
+ std::ostringstream os;
+ os << "\\rotatebox";
if (data.origin() != RotationData::DEFAULT)
os << "[origin=" << data.origin() << ']';
os << '{' << data.angle() << "}{";
- return os.str();
+ return os.str();
}
if (data.no_resize())
return string();
- std::ostringstream os;
- if (!float_equal(data.scale, 0.0, 0.05)) {
+ std::ostringstream os;
+ if (data.usingScale()) {
if (!float_equal(data.scale, 100.0, 0.05))
os << "scale=" << data.scale / 100.0 << ',';
return os.str();
string::const_iterator it = begin;
// Strip any leading commas
- // "[,,,,foo..." -> "foo..."
+ // "[,,,,foo..." -> "foo..." ("foo..." may be empty)
string output;
boost::smatch what;
- boost::regex const front("^( *[[],*)(.*)$");
+ static boost::regex const front("^( *[[],*)(.*)$");
regex_match(it, end, what, front, boost::match_partial);
if (!what[0].matched) {
lyxerr << "Unable to sanitize LaTeX \"Option\": "
- << output << '\n';
+ << input << '\n';
return string();
}
it = what[1].second;
// Replace any consecutive commas with a single one
// "foo,,,,bar" -> "foo,bar"
// with iterator now pointing to 'b'
- boost::regex const commas("([^,]*)(,,*)(.*)$");
+ static boost::regex const commas("([^,]*)(,,*)(.*)$");
for (; it != end;) {
regex_match(it, end, what, commas, boost::match_partial);
if (!what[0].matched) {
}
// Strip any trailing commas
- // "...foo,,,]" -> "...foo"
- boost::regex const back("^(.*[^,])(,*[]] *)$");
+ // "...foo,,,]" -> "...foo" ("...foo,,," may be empty)
+ static boost::regex const back("^(.*[^,])?,*[]] *$");
regex_match(output, what, back);
if (!what[0].matched) {
lyxerr << "Unable to sanitize LaTeX \"Option\": "