|
rpm-build |
324937 |
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
rpm-build |
324937 |
/*
|
|
rpm-build |
324937 |
* This file is part of the libpagemaker project.
|
|
rpm-build |
324937 |
*
|
|
rpm-build |
324937 |
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
rpm-build |
324937 |
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
rpm-build |
324937 |
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
rpm-build |
324937 |
*/
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
#include "PMDCollector.h"
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
#include <iostream>
|
|
rpm-build |
324937 |
#include <math.h>
|
|
rpm-build |
324937 |
#include <string>
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
#include "OutputShape.h"
|
|
rpm-build |
324937 |
#include "constants.h"
|
|
rpm-build |
324937 |
#include "libpagemaker_utils.h"
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
namespace libpagemaker
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
static const double EM2PT = 11.95516799999881;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
namespace
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void flushText(std::string &text, librevenge::RVNGDrawingInterface *const painter)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
if (!text.empty())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
painter->insertText(text.c_str());
|
|
rpm-build |
324937 |
text.clear();
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void writeTextSpan(const std::string &text, const std::size_t charStart, std::size_t charEnd, librevenge::RVNGDrawingInterface *const painter)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
++charEnd;
|
|
rpm-build |
324937 |
if (charEnd > text.size())
|
|
rpm-build |
324937 |
charEnd = text.size();
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
std::string currentText;
|
|
rpm-build |
324937 |
bool wasSpace = false;
|
|
rpm-build |
324937 |
for (std::size_t i = charStart; i < charEnd; ++i)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
const char c = text[i];
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
switch (c)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
case '\t' :
|
|
rpm-build |
324937 |
flushText(currentText, painter);
|
|
rpm-build |
324937 |
painter->insertTab();
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case '\r' :
|
|
rpm-build |
324937 |
flushText(currentText, painter);
|
|
rpm-build |
324937 |
painter->insertLineBreak();
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case ' ' :
|
|
rpm-build |
324937 |
if (wasSpace)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
flushText(currentText, painter);
|
|
rpm-build |
324937 |
painter->insertSpace();
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
currentText.push_back(c);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
default:
|
|
rpm-build |
324937 |
// Ignore control characters that do not have known use in PageMaker.
|
|
rpm-build |
324937 |
// Specific control characters are handled in the switch already.
|
|
rpm-build |
324937 |
if (c < 0x20)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("skipping control character %#x\n", c));
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
currentText.push_back(c);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
wasSpace = ' ' == c;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
flushText(currentText, painter);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void writeBorder(librevenge::RVNGPropertyList &props, const char *const name, const PMDStrokeProperties &stroke, const std::vector<PMDColor> &colors)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
librevenge::RVNGString border;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
border.sprintf("%fpt", stroke.m_strokeWidth / 5.0);
|
|
rpm-build |
324937 |
border.append(" ");
|
|
rpm-build |
324937 |
switch (stroke.m_strokeType)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
default:
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("unexpected stroke type %u\n", unsigned(stroke.m_strokeType)));
|
|
rpm-build |
324937 |
PMD_FALLTHROUGH;
|
|
rpm-build |
324937 |
case STROKE_NORMAL:
|
|
rpm-build |
324937 |
border.append("solid");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case STROKE_LIGHT_LIGHT:
|
|
rpm-build |
324937 |
case STROKE_DARK_LIGHT:
|
|
rpm-build |
324937 |
case STROKE_LIGHT_DARK:
|
|
rpm-build |
324937 |
case STROKE_LIGHT_DARK_LIGHT:
|
|
rpm-build |
324937 |
border.append("double");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case STROKE_DASHED:
|
|
rpm-build |
324937 |
border.append("dashed");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case STROKE_SQUARE_DOTS:
|
|
rpm-build |
324937 |
case STROKE_CIRCULAR_DOTS:
|
|
rpm-build |
324937 |
border.append("dotted");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
border.append(" ");
|
|
rpm-build |
324937 |
if (stroke.m_strokeColor < colors.size())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
const auto &color = colors[stroke.m_strokeColor];
|
|
rpm-build |
324937 |
librevenge::RVNGString colorStr;
|
|
rpm-build |
324937 |
colorStr.sprintf("#%.2x%.2x%.2x", color.m_red, color.m_green, color.m_blue);
|
|
rpm-build |
324937 |
border.append(colorStr);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
border.append("#000000");
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
props.insert(name, border);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
PMDCollector::PMDCollector() :
|
|
rpm-build |
324937 |
m_pageWidth(), m_pageHeight(), m_pages(), m_color(),m_font(),
|
|
rpm-build |
324937 |
m_doubleSided(false)
|
|
rpm-build |
324937 |
{ }
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::setDoubleSided(bool doubleSided)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
m_doubleSided = doubleSided;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
/* State-mutating functions */
|
|
rpm-build |
324937 |
void PMDCollector::setPageWidth(PMDShapeUnit pageWidth)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
m_pageWidth = pageWidth;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::setPageHeight(PMDShapeUnit pageHeight)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
m_pageHeight = pageHeight;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
unsigned PMDCollector::addPage()
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
m_pages.push_back((PMDPage()));
|
|
rpm-build |
324937 |
return m_pages.size() - 1;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::addColor(const PMDColor &color)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
m_color.push_back(color);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::addFont(const PMDFont &font)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
m_font.push_back(font);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::addShapeToPage(unsigned pageID, const std::shared_ptr<PMDLineSet> &shape)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
m_pages.at(pageID).addShape(shape);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::paintShape(const OutputShape &shape,
|
|
rpm-build |
324937 |
librevenge::RVNGDrawingInterface *painter) const
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
if (shape.shapeType() == SHAPE_TYPE_LINE || shape.shapeType() == SHAPE_TYPE_POLY || shape.shapeType() == SHAPE_TYPE_RECT)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyListVector vertices;
|
|
rpm-build |
324937 |
for (unsigned i = 0; i < shape.numPoints(); ++i)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyList vertex;
|
|
rpm-build |
324937 |
vertex.insert("svg:x", shape.getPoint(i).m_x);
|
|
rpm-build |
324937 |
vertex.insert("svg:y", shape.getPoint(i).m_y);
|
|
rpm-build |
324937 |
vertices.append(vertex);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyList points;
|
|
rpm-build |
324937 |
points.insert("svg:points", vertices);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
PMDFillProperties fillProps = shape.getFillProperties();
|
|
rpm-build |
324937 |
PMDStrokeProperties strokeProps = shape.getStrokeProperties();
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
switch (fillProps.m_fillType)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
case FILL_SOLID:
|
|
rpm-build |
324937 |
points.insert("draw:fill", "solid");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case FILL_NONE:
|
|
rpm-build |
324937 |
points.insert("draw:fill", "none");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
default:
|
|
rpm-build |
324937 |
points.insert("draw:fill", "none");
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (fillProps.m_fillColor < m_color.size())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMDColor tempFillColor = m_color[fillProps.m_fillColor];
|
|
rpm-build |
324937 |
librevenge::RVNGString tempFillColorString;
|
|
rpm-build |
324937 |
tempFillColorString.sprintf("#%.2x%.2x%.2x", tempFillColor.m_red,tempFillColor.m_green,tempFillColor.m_blue);
|
|
rpm-build |
324937 |
points.insert("draw:fill-color", tempFillColorString);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Fill Color Not Available"));
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (fillProps.m_fillColor == 0)
|
|
rpm-build |
324937 |
points.insert("draw:opacity", 0);
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
points.insert("draw:opacity", fillProps.m_fillTint);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
switch (strokeProps.m_strokeType)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
case STROKE_NORMAL:
|
|
rpm-build |
324937 |
points.insert("draw:stroke", "solid");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case STROKE_DASHED:
|
|
rpm-build |
324937 |
points.insert("draw:stroke","dash");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
default:
|
|
rpm-build |
324937 |
points.insert("draw:stroke", "solid");
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
points.insert("svg:stroke-width", (double)strokeProps.m_strokeWidth/5.0,librevenge::RVNG_POINT);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (strokeProps.m_strokeColor < m_color.size())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMDColor tempStrokeColor = m_color[strokeProps.m_strokeColor];
|
|
rpm-build |
324937 |
librevenge::RVNGString tempStrokeColorString;
|
|
rpm-build |
324937 |
tempStrokeColorString.sprintf("#%.2x%.2x%.2x", tempStrokeColor.m_red,tempStrokeColor.m_green,tempStrokeColor.m_blue);
|
|
rpm-build |
324937 |
points.insert("svg:stroke-color", tempStrokeColorString);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Stroke Color Not Available"));
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
points.insert("svg:stroke-opacity", (double)strokeProps.m_strokeTint/100.0,librevenge::RVNG_PERCENT);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (shape.getIsClosed())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
painter->drawPolygon(points);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
painter->drawPolyline(points);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else if (shape.shapeType() == SHAPE_TYPE_TEXTBOX)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyList textbox;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
textbox.insert("svg:x",shape.getPoint(0).m_x, librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
textbox.insert("svg:y",shape.getPoint(0).m_y, librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
textbox.insert("svg:width",shape.getWidth(), librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
textbox.insert("svg:height",shape.getHeight(), librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
//textbox.insert("text:anchor-type", "page");
|
|
rpm-build |
324937 |
//textbox.insert("text:anchor-page-number", 1);
|
|
rpm-build |
324937 |
//textbox.insert("style:vertical-rel", "page");
|
|
rpm-build |
324937 |
//textbox.insert("style:horizontal-rel", "page");
|
|
rpm-build |
324937 |
//textbox.insert("style:horizontal-pos", "from-left");
|
|
rpm-build |
324937 |
//textbox.insert("style:vertical-pos", "from-top");
|
|
rpm-build |
324937 |
textbox.insert("draw:stroke", "none");
|
|
rpm-build |
324937 |
textbox.insert("draw:fill", "none");
|
|
rpm-build |
324937 |
textbox.insert("librevenge:rotate", shape.getRotation() * 180 / M_PI);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
painter->startTextObject(textbox);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
uint16_t paraStart = 0;
|
|
rpm-build |
324937 |
uint16_t paraEnd = 0;
|
|
rpm-build |
324937 |
uint16_t paraLength = 0;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
std::vector<PMDParaProperties> paraProperties = shape.getParaProperties();
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
for (auto ¶Property : paraProperties)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
paraLength = paraProperty.m_length;
|
|
rpm-build |
324937 |
paraEnd = paraStart + paraLength - 1;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyList paraProps;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
switch (paraProperty.m_align)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
case 1:
|
|
rpm-build |
324937 |
paraProps.insert("fo:text-align", "right");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case 2:
|
|
rpm-build |
324937 |
paraProps.insert("fo:text-align", "center");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case 3:
|
|
rpm-build |
324937 |
paraProps.insert("fo:text-align", "justify");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case 4: // force-justify
|
|
rpm-build |
324937 |
// Strictly speaking, this is not equivalent to the real force-justify
|
|
rpm-build |
324937 |
// layout. But it is the best approximation ODF can do.
|
|
rpm-build |
324937 |
paraProps.insert("fo:text-align", "justify");
|
|
rpm-build |
324937 |
paraProps.insert("fo:text-align-last", "justify");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case 0:
|
|
rpm-build |
324937 |
default:
|
|
rpm-build |
324937 |
paraProps.insert("fo:text-align", "left");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (paraProperty.m_afterIndent != 0)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
paraProps.insert("fo:margin-bottom", (double)paraProperty.m_afterIndent/SHAPE_UNITS_PER_INCH,librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
if (paraProperty.m_beforeIndent != 0)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
paraProps.insert("fo:margin-top", (double)paraProperty.m_beforeIndent/SHAPE_UNITS_PER_INCH,librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
if (paraProperty.m_firstIndent != 0)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
paraProps.insert("fo:text-indent", (double)paraProperty.m_firstIndent/SHAPE_UNITS_PER_INCH,librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
if (paraProperty.m_leftIndent != 0)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
paraProps.insert("fo:margin-left", (double)paraProperty.m_leftIndent/SHAPE_UNITS_PER_INCH,librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
if (paraProperty.m_rightIndent != 0)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
paraProps.insert("fo:margin-right", (double)paraProperty.m_rightIndent/SHAPE_UNITS_PER_INCH,librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
paraProps.insert("fo:orphans", int16_t(paraProperty.m_orphans));
|
|
rpm-build |
324937 |
paraProps.insert("fo:widows", int16_t(paraProperty.m_widows));
|
|
rpm-build |
324937 |
paraProps.insert("fo:keep-together", paraProperty.m_keepTogether ? "always" : "auto");
|
|
rpm-build |
324937 |
paraProps.insert("fo:keep-with-next", paraProperty.m_keepWithNext > 0 ? "always" : "auto");
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
paraProps.insert("fo:hyphenate", paraProperty.m_hyphenate);
|
|
rpm-build |
324937 |
if (paraProperty.m_hyphenate)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
if (paraProperty.m_hyphensCount > 0)
|
|
rpm-build |
324937 |
paraProps.insert("fo:hyphenation-ladder-count", int16_t(paraProperty.m_hyphensCount));
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
paraProps.insert("fo:hyphenation-ladder-count", "no-limit");
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (paraProperty.m_ruleAbove)
|
|
rpm-build |
324937 |
writeBorder(paraProps, "fo:border-top", get(paraProperty.m_ruleAbove), m_color);
|
|
rpm-build |
324937 |
if (paraProperty.m_ruleBelow)
|
|
rpm-build |
324937 |
writeBorder(paraProps, "fo:border-bottom", get(paraProperty.m_ruleBelow), m_color);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
painter->openParagraph(paraProps);
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("\n\nPara Start is %d \n",paraStart));
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Para End is %d \n\n",paraEnd));
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
//charProps.insert("style:font-name", "Ubuntu");
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
std::string tempText = shape.getText();
|
|
rpm-build |
324937 |
std::vector<PMDCharProperties> charProperties = shape.getCharProperties();
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
uint16_t charStart = 0;
|
|
rpm-build |
324937 |
uint16_t charEnd = 0;
|
|
rpm-build |
324937 |
uint16_t charLength = 0;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
for (auto &charProperty : charProperties)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
charLength = charProperty.m_length;
|
|
rpm-build |
324937 |
uint16_t charEndTemp = charStart + charLength -1;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (paraStart > charStart)
|
|
rpm-build |
324937 |
charStart = paraStart;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (charEndTemp > paraEnd)
|
|
rpm-build |
324937 |
charEnd = paraEnd;
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
charEnd = charEndTemp;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (charStart <= charEnd && paraStart <= charEndTemp)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Start is %d \n",charStart));
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("End is %d \n",charEnd));
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyList charProps;
|
|
rpm-build |
324937 |
charProps.insert("fo:font-size",(double)charProperty.m_fontSize/10,librevenge::RVNG_POINT);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (charProperty.m_fontFace < m_font.size())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMDFont tempFont = m_font[charProperty.m_fontFace];
|
|
rpm-build |
324937 |
std::string tempFontString = tempFont.m_fontName;
|
|
rpm-build |
324937 |
charProps.insert("style:font-name", tempFontString.c_str());
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Font Not Available"));
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (charProperty.m_fontColor < m_color.size())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMDColor tempColor = m_color[charProperty.m_fontColor];
|
|
rpm-build |
324937 |
double charTint = (double)charProperty.m_tint/100;
|
|
rpm-build |
324937 |
double temp_bgcolor = (1 - charTint) * 255;
|
|
rpm-build |
324937 |
librevenge::RVNGString tempColorString;
|
|
rpm-build |
324937 |
tempColorString.sprintf("#%.2x%.2x%.2x",(uint16_t)(tempColor.m_red * charTint + temp_bgcolor),(uint16_t)(tempColor.m_green * charTint + temp_bgcolor),(uint16_t)(tempColor.m_blue * charTint + temp_bgcolor));
|
|
rpm-build |
324937 |
charProps.insert("fo:color", tempColorString);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Color Not Available"));
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (charProperty.m_bold)
|
|
rpm-build |
324937 |
charProps.insert("fo:font-weight", "bold");
|
|
rpm-build |
324937 |
if (charProperty.m_italic)
|
|
rpm-build |
324937 |
charProps.insert("fo:font-style", "italic");
|
|
rpm-build |
324937 |
if (charProperty.m_underline)
|
|
rpm-build |
324937 |
charProps.insert("style:text-underline-type", "single");
|
|
rpm-build |
324937 |
if (charProperty.m_outline)
|
|
rpm-build |
324937 |
charProps.insert("style:text-outline", true);
|
|
rpm-build |
324937 |
if (charProperty.m_shadow)
|
|
rpm-build |
324937 |
charProps.insert("fo:text-shadow", "1pt 1pt");
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (charProperty.m_strike)
|
|
rpm-build |
324937 |
charProps.insert("style:text-line-through-style","solid");
|
|
rpm-build |
324937 |
if (charProperty.m_super || charProperty.m_sub)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
const int32_t intPos = charProperty.m_sub ? -int32_t(charProperty.m_subPos) : int32_t(charProperty.m_superPos);
|
|
rpm-build |
324937 |
librevenge::RVNGString pos;
|
|
rpm-build |
324937 |
pos.sprintf("%.1f%% %.1f%%", intPos / 10.0, charProperty.m_superSubSize / 10.0);
|
|
rpm-build |
324937 |
charProps.insert("style:text-position", pos);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (charProperty.m_smallCaps)
|
|
rpm-build |
324937 |
charProps.insert("fo:font-variant","small-caps");
|
|
rpm-build |
324937 |
if (charProperty.m_allCaps)
|
|
rpm-build |
324937 |
charProps.insert("fo:text-transform", "uppercase");
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (charProperty.m_kerning != 0)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
charProps.insert("style:letter-kerning","true");
|
|
rpm-build |
324937 |
charProps.insert("fo:letter-spacing",((double)charProperty.m_kerning/1000)*EM2PT,librevenge::RVNG_POINT);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
painter->openSpan(charProps);
|
|
rpm-build |
324937 |
writeTextSpan(tempText, charStart, charEnd, painter);
|
|
rpm-build |
324937 |
painter->closeSpan();
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
charStart = charEnd + 1;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
painter->closeParagraph();
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
paraStart = paraEnd + 1;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
painter->endTextObject();
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else if (shape.shapeType() == SHAPE_TYPE_BITMAP)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyList props;
|
|
rpm-build |
324937 |
props.insert("svg:x", shape.getPoint(0).m_x,librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
props.insert("svg:y", shape.getPoint(0).m_y,librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
props.insert("svg:width", shape.getWidth(),librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
props.insert("svg:height", shape.getHeight(),librevenge::RVNG_INCH);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (shape.getRotation() != 0.0)
|
|
rpm-build |
324937 |
props.insert("librevenge:rotate", shape.getRotation() * 180 / M_PI, librevenge::RVNG_GENERIC);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
props.insert("librevenge:mime-type", "image/tiff");
|
|
rpm-build |
324937 |
props.insert("office:binary-data", shape.getBitmap());
|
|
rpm-build |
324937 |
painter->drawGraphicObject(props);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
double cx = shape.getPoint(0).m_x;
|
|
rpm-build |
324937 |
double cy = shape.getPoint(0).m_y;
|
|
rpm-build |
324937 |
double rx = shape.getPoint(1).m_x;
|
|
rpm-build |
324937 |
double ry = shape.getPoint(1).m_y;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
double rotation = shape.getRotation();
|
|
rpm-build |
324937 |
#ifdef DEBUG
|
|
rpm-build |
324937 |
double skew = shape.getSkew();
|
|
rpm-build |
324937 |
#endif
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("\n\nCx and Cy are %f , %f \n",cx,cy));
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Rx and Ry are %f , %f \n",rx,ry));
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Rotation is %f \n",rotation));
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Skew is %f \n",skew));
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyList propList;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (false)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
propList.insert("svg:rx",rx);
|
|
rpm-build |
324937 |
propList.insert("svg:ry",ry);
|
|
rpm-build |
324937 |
propList.insert("svg:cx",cx);
|
|
rpm-build |
324937 |
propList.insert("svg:cy",cy);
|
|
rpm-build |
324937 |
painter->drawEllipse(propList);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
double sx = cx - rx*cos(rotation);
|
|
rpm-build |
324937 |
double sy = cy - rx*sin(rotation);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
double ex = cx + rx*cos(rotation);
|
|
rpm-build |
324937 |
double ey = cy + rx*sin(rotation);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
//if ((rotation == 0 || rotation < skew) && skew != 0)
|
|
rpm-build |
324937 |
//rotation += (ry*skew/rx)/2;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyListVector vec;
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyList node;
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
node.insert("librevenge:path-action", "M");
|
|
rpm-build |
324937 |
node.insert("svg:x", sx);
|
|
rpm-build |
324937 |
node.insert("svg:y", sy);
|
|
rpm-build |
324937 |
vec.append(node);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
node.clear();
|
|
rpm-build |
324937 |
node.insert("librevenge:path-action", "A");
|
|
rpm-build |
324937 |
node.insert("svg:rx", rx);
|
|
rpm-build |
324937 |
node.insert("svg:ry", ry);
|
|
rpm-build |
324937 |
node.insert("librevenge:rotate", rotation * 180 / M_PI, librevenge::RVNG_GENERIC);
|
|
rpm-build |
324937 |
node.insert("librevenge:large-arc", false);
|
|
rpm-build |
324937 |
node.insert("librevenge:sweep", false);
|
|
rpm-build |
324937 |
node.insert("svg:x", ex);
|
|
rpm-build |
324937 |
node.insert("svg:y", ey);
|
|
rpm-build |
324937 |
vec.append(node);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
node.clear();
|
|
rpm-build |
324937 |
node.insert("librevenge:path-action", "A");
|
|
rpm-build |
324937 |
node.insert("svg:rx", rx);
|
|
rpm-build |
324937 |
node.insert("svg:ry", ry);
|
|
rpm-build |
324937 |
node.insert("librevenge:rotate", rotation * 180 / M_PI, librevenge::RVNG_GENERIC);
|
|
rpm-build |
324937 |
node.insert("librevenge:large-arc", true);
|
|
rpm-build |
324937 |
node.insert("librevenge:sweep", false);
|
|
rpm-build |
324937 |
node.insert("svg:x", sx);
|
|
rpm-build |
324937 |
node.insert("svg:y", sy);
|
|
rpm-build |
324937 |
vec.append(node);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
node.clear();
|
|
rpm-build |
324937 |
node.insert("librevenge:path-action", "Z");
|
|
rpm-build |
324937 |
vec.append(node);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
propList.insert("svg:d",vec);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
PMDFillProperties fillProps = shape.getFillProperties();
|
|
rpm-build |
324937 |
PMDStrokeProperties strokeProps = shape.getStrokeProperties();
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
switch (fillProps.m_fillType)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
case FILL_SOLID:
|
|
rpm-build |
324937 |
propList.insert("draw:fill", "solid");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case FILL_NONE:
|
|
rpm-build |
324937 |
propList.insert("draw:fill", "none");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
default:
|
|
rpm-build |
324937 |
propList.insert("draw:fill", "none");
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (fillProps.m_fillColor < m_color.size())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMDColor tempFillColor = m_color[fillProps.m_fillColor];
|
|
rpm-build |
324937 |
librevenge::RVNGString tempFillColorString;
|
|
rpm-build |
324937 |
tempFillColorString.sprintf("#%.2x%.2x%.2x", tempFillColor.m_red,tempFillColor.m_green,tempFillColor.m_blue);
|
|
rpm-build |
324937 |
propList.insert("draw:fill-color", tempFillColorString);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Fill Color Not Available"));
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (fillProps.m_fillColor == 0)
|
|
rpm-build |
324937 |
propList.insert("draw:opacity", 0);
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
propList.insert("draw:opacity", fillProps.m_fillTint);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
switch (strokeProps.m_strokeType)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
case STROKE_NORMAL:
|
|
rpm-build |
324937 |
propList.insert("draw:stroke", "solid");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
case STROKE_DASHED:
|
|
rpm-build |
324937 |
propList.insert("draw:stroke","dash");
|
|
rpm-build |
324937 |
break;
|
|
rpm-build |
324937 |
default:
|
|
rpm-build |
324937 |
propList.insert("draw:stroke", "solid");
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
propList.insert("svg:stroke-width", (double)strokeProps.m_strokeWidth/5.0,librevenge::RVNG_POINT);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if (strokeProps.m_strokeColor < m_color.size())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMDColor tempStrokeColor = m_color[strokeProps.m_strokeColor];
|
|
rpm-build |
324937 |
librevenge::RVNGString tempStrokeColorString;
|
|
rpm-build |
324937 |
tempStrokeColorString.sprintf("#%.2x%.2x%.2x", tempStrokeColor.m_red,tempStrokeColor.m_green,tempStrokeColor.m_blue);
|
|
rpm-build |
324937 |
propList.insert("svg:stroke-color", tempStrokeColorString);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PMD_DEBUG_MSG(("Stroke Color Not Available"));
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
propList.insert("svg:stroke-opacity", (double)strokeProps.m_strokeTint/100.0,librevenge::RVNG_PERCENT);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
painter->drawPath(propList);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::writePage(const PMDPage & /*page*/,
|
|
rpm-build |
324937 |
librevenge::RVNGDrawingInterface *painter,
|
|
rpm-build |
324937 |
const std::vector<std::shared_ptr<const OutputShape> > &outputShapes) const
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
librevenge::RVNGPropertyList pageProps;
|
|
rpm-build |
324937 |
if (m_pageWidth.is_initialized())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
double widthInInches = m_pageWidth.get().toInches();
|
|
rpm-build |
324937 |
pageProps.insert("svg:width", widthInInches);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
if (m_pageHeight.is_initialized())
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
double heightInInches = m_pageHeight.get().toInches();
|
|
rpm-build |
324937 |
pageProps.insert("svg:height", heightInInches);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
painter->startPage(pageProps);
|
|
rpm-build |
324937 |
for (const auto &outputShape : outputShapes)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
paintShape(*outputShape, painter);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
painter->endPage();
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::fillOutputShapesByPage_TwoSided(PageShapesList_t &pageShapes) const
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
pageShapes.assign(m_pages.size() * 2 - 1, PageShapes_t()); // the first "page" only has right side
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
double centerToEdge_x = m_pageWidth.get_value_or(0).toInches() / 2;
|
|
rpm-build |
324937 |
double centerToEdge_y = m_pageHeight.get_value_or(0).toInches() / 2;
|
|
rpm-build |
324937 |
InchPoint translateForLeftPage(centerToEdge_x * 2, centerToEdge_y);
|
|
rpm-build |
324937 |
InchPoint translateForRightPage(0, centerToEdge_y);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
for (unsigned i = 0; i < m_pages.size(); ++i)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
const bool leftPageExists = (i > 0);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
const PMDPage &page = m_pages[i];
|
|
rpm-build |
324937 |
for (unsigned j = 0; j < page.numShapes(); ++j)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
std::shared_ptr<const OutputShape> right = newOutputShape(page.getShape(j), translateForRightPage);
|
|
rpm-build |
324937 |
if (right->getBoundingBox().second.m_x >= 0)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
pageShapes[i].push_back(right);
|
|
rpm-build |
324937 |
continue;
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
if (leftPageExists)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
std::shared_ptr<const OutputShape> left = newOutputShape(page.getShape(j), translateForLeftPage);
|
|
rpm-build |
324937 |
if (left->getBoundingBox().first.m_x <= centerToEdge_x * 2)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
pageShapes[i - 1].push_back(left);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
if ((pageShapes.size() > 1) && pageShapes.back().empty()) // the last "page" only has left side
|
|
rpm-build |
324937 |
pageShapes.pop_back();
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::fillOutputShapesByPage_OneSided(PageShapesList_t &pageShapes) const
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
pageShapes.reserve(m_pages.size());
|
|
rpm-build |
324937 |
pageShapes.assign(m_pages.size(), PageShapes_t());
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
double centerToEdge_x = m_pageWidth.get().toInches() / 2;
|
|
rpm-build |
324937 |
double centerToEdge_y = m_pageHeight.get().toInches() / 2;
|
|
rpm-build |
324937 |
InchPoint translateShapes(centerToEdge_x, centerToEdge_y);
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
for (unsigned i = 0; i < m_pages.size(); ++i)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
const PMDPage &page = m_pages[i];
|
|
rpm-build |
324937 |
for (unsigned j = 0; j < page.numShapes(); ++j)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
pageShapes[i].push_back(newOutputShape(page.getShape(j), translateShapes));
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
void PMDCollector::fillOutputShapesByPage(PageShapesList_t &pageShapes) const
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
if (m_doubleSided)
|
|
rpm-build |
324937 |
fillOutputShapesByPage_TwoSided(pageShapes);
|
|
rpm-build |
324937 |
else
|
|
rpm-build |
324937 |
fillOutputShapesByPage_OneSided(pageShapes);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
/* Output functions */
|
|
rpm-build |
324937 |
void PMDCollector::draw(librevenge::RVNGDrawingInterface *painter) const
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
painter->startDocument(librevenge::RVNGPropertyList());
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
PageShapesList_t shapesByPage;
|
|
rpm-build |
324937 |
fillOutputShapesByPage(shapesByPage);
|
|
rpm-build |
324937 |
for (unsigned i = 0; i < m_pages.size(); ++i)
|
|
rpm-build |
324937 |
{
|
|
rpm-build |
324937 |
PageShapes_t shapes = shapesByPage[i];
|
|
rpm-build |
324937 |
writePage(m_pages[i], painter, shapes);
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
painter->endDocument();
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
|
|
rpm-build |
324937 |
}
|
|
rpm-build |
324937 |
/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
|