File indexing completed on 2025-01-12 10:34:27

0001 /*
0002  * This file is part of Office 2007 Filters for Calligra
0003  *
0004  * SPDX-FileCopyrightText: 2009 Nokia Corporation and /or its subsidiary(-ies).
0005  * Contact: Suresh Chande suresh.chande@nokia.com
0006  *
0007  * SPDX-FileCopyrightText: 2011-2012 Matus Uzak (matus.uzak@gmail.com).
0008  *
0009  * SPDX-License-Identifier: LGPL-2.1-only
0010  *
0011  */
0012 
0013 // This is not a normal header, *don't* add include guards to it.
0014 // This will cause the compiler to get wrong offsets and to corrupt
0015 // the stack.
0016 
0017 protected:
0018 
0019 #include "MsooXmlDrawingMLShared.h"
0020 
0021 //! When dealing with colors there's no way to know what type of
0022 //! attribute we are setting. While MSOOXML doesn't need to know the
0023 //! context in which a color is used, ODF does need to know this.
0024 enum ColorType {
0025     BackgroundColor,
0026     OutlineColor,
0027     TextColor,
0028     GradientColor
0029 };
0030 
0031 enum blipFillCaller {
0032     blipFill_lockedCanvas = 'a',
0033     blipFill_spPr = 'a',
0034     blipFill_pic = 'p', //dml in pptx; for dml in docx use 'pic'
0035     blipFill_rPr = 'p', //dml
0036     blipFill_bgPr = 'a', // pptx
0037     blipFill_grpSpPr = 'a'
0038 };
0039 
0040 enum cNvPrCaller {
0041     cNvPr_nvSpPr,
0042     cNvPr_nvPicPr,
0043     cNvPr_nvCxnSpPr
0044 };
0045 
0046 enum txBodyCaller {
0047     DrawingML_txBody_tc,
0048     DrawingML_txBody_txSp,
0049     DrawingML_txBody_sp
0050 };
0051 
0052 enum spacingType {
0053     spacingMarginTop,
0054     spacingLines,
0055     spacingMarginBottom
0056 };
0057 
0058 struct GroupProp {
0059     qint64 svgXOld;
0060     qint64 svgYOld;
0061     qreal svgWidthOld;
0062     qreal svgHeightOld;
0063     qreal svgXChOld;
0064     qreal svgYChOld;
0065     qreal svgWidthChOld;
0066     qreal svgHeightChOld;
0067 };
0068 
0069 void initDrawingML();
0070 
0071 /**
0072  * @return true in case a custom or supported predefined shape is
0073  * being processed and false in case of a text-box and rectangle.
0074  */
0075 bool isCustomShape();
0076 
0077 /**
0078  * @return true in case an unsupported shape is being processed.
0079  */
0080 bool unsupportedPredefinedShape();
0081 
0082 /**
0083  * TODO:
0084  */
0085 void preReadSp();
0086 
0087 /**
0088  * Write the parent el. in {draw:line, draw:custom-shape, draw:frame}
0089  * to the body writer and create a graphic style for a shape.
0090  */
0091 void generateFrameSp();
0092 
0093 /**
0094  * Write the draw:enhanced-geometry element to the body writer in case
0095  * of a draw:custom-shape.
0096  */
0097 void writeEnhancedGeometry();
0098 
0099 // ----------------------------------------
0100 // MSOOXML_CURRENT_NS "dgm"
0101 // ----------------------------------------
0102 KoFilter::ConversionStatus read_relIds();
0103 
0104 // ----------------------------------------
0105 // MSOOXML_CURRENT_NS "c"
0106 // ----------------------------------------
0107 KoFilter::ConversionStatus read_chart();
0108 
0109 // ----------------------------------------
0110 // MSOOXML_CURRENT_NS "lc"
0111 // ----------------------------------------
0112 KoFilter::ConversionStatus read_lockedCanvas();
0113 
0114 // ----------------------------------------
0115 // MSOOXML_CURRENT_NS == DRAWINGML_PIC_NS
0116 // ----------------------------------------
0117 // The following elements can have a namespace in {a,pic,p,xdr}.
0118 KoFilter::ConversionStatus read_cNvPicPr(); //done
0119 KoFilter::ConversionStatus read_cNvPr(cNvPrCaller caller); //done
0120 KoFilter::ConversionStatus read_nvPicPr(); //done
0121 KoFilter::ConversionStatus read_pic(); //done
0122 KoFilter::ConversionStatus read_nvSpPr(); //done
0123 KoFilter::ConversionStatus read_grpSp(); //done
0124 KoFilter::ConversionStatus read_grpSpPr(); //done
0125 KoFilter::ConversionStatus read_nvCxnSpPr(); //done
0126 KoFilter::ConversionStatus read_cNvSpPr(); //done
0127 KoFilter::ConversionStatus read_cxnSp(); //done
0128 KoFilter::ConversionStatus read_sp(); //done
0129 KoFilter::ConversionStatus read_spPr(); //done
0130 KoFilter::ConversionStatus read_style(); //done
0131 
0132 // ----------------------------------------
0133 // MSOOXML_CURRENT_NS "a"
0134 // ----------------------------------------
0135 KoFilter::ConversionStatus read_lnRef();
0136 KoFilter::ConversionStatus read_masterClrMapping();
0137 KoFilter::ConversionStatus read_overrideClrMapping();
0138 KoFilter::ConversionStatus read_DrawingML_p();
0139 KoFilter::ConversionStatus read_DrawingML_r();
0140 KoFilter::ConversionStatus read_DrawingML_br();
0141 KoFilter::ConversionStatus read_endParaRPr();
0142 KoFilter::ConversionStatus read_DrawingML_rPr();
0143 KoFilter::ConversionStatus read_DrawingML_pPr();
0144 KoFilter::ConversionStatus read_hlinkClick();
0145 KoFilter::ConversionStatus read_custGeom();
0146 KoFilter::ConversionStatus read_xfrm();
0147 KoFilter::ConversionStatus read_off();
0148 KoFilter::ConversionStatus read_chOff();
0149 KoFilter::ConversionStatus read_ext();
0150 KoFilter::ConversionStatus read_chExt();
0151 KoFilter::ConversionStatus read_blip();
0152 KoFilter::ConversionStatus read_stretch();
0153 KoFilter::ConversionStatus read_biLevel();
0154 KoFilter::ConversionStatus read_grayscl();
0155 KoFilter::ConversionStatus read_lum();
0156 KoFilter::ConversionStatus read_duotone();
0157 KoFilter::ConversionStatus read_tile();
0158 KoFilter::ConversionStatus read_srcRect();
0159 KoFilter::ConversionStatus read_fillRect();
0160 KoFilter::ConversionStatus read_graphic();
0161 KoFilter::ConversionStatus read_graphicData();
0162 KoFilter::ConversionStatus read_blipFill(blipFillCaller caller);
0163 KoFilter::ConversionStatus read_txSp();
0164 
0165 //! Convert attributes of Text Run Properties to ODF equivalents.
0166 void handleRprAttributes(const QXmlStreamAttributes& attrs);
0167 
0168 // ----------------------------------------
0169 // MSOOXML_CURRENT_NS == DRAWINGML_NS
0170 // ----------------------------------------
0171 // The following elements can have a namespace in {a,wp}.
0172 KoFilter::ConversionStatus read_lstStyle();
0173 KoFilter::ConversionStatus read_latin();
0174 KoFilter::ConversionStatus read_DrawingML_highlight();
0175 KoFilter::ConversionStatus read_gradFill();
0176 KoFilter::ConversionStatus read_gradFillRpr();
0177 KoFilter::ConversionStatus read_lin();
0178 KoFilter::ConversionStatus read_gsLst();
0179 KoFilter::ConversionStatus read_gs();
0180 KoFilter::ConversionStatus read_noFill();
0181 KoFilter::ConversionStatus read_prstGeom();
0182 KoFilter::ConversionStatus read_avLst();
0183 KoFilter::ConversionStatus read_gd();
0184 KoFilter::ConversionStatus read_effectLst();
0185 KoFilter::ConversionStatus read_outerShdw();
0186 KoFilter::ConversionStatus lvlHelper(const QString& level);
0187 KoFilter::ConversionStatus read_lvl1pPr();
0188 KoFilter::ConversionStatus read_lvl2pPr();
0189 KoFilter::ConversionStatus read_lvl3pPr();
0190 KoFilter::ConversionStatus read_lvl4pPr();
0191 KoFilter::ConversionStatus read_lvl5pPr();
0192 KoFilter::ConversionStatus read_lvl6pPr();
0193 KoFilter::ConversionStatus read_lvl7pPr();
0194 KoFilter::ConversionStatus read_lvl8pPr();
0195 KoFilter::ConversionStatus read_lvl9pPr();
0196 KoFilter::ConversionStatus read_buBlip();
0197 KoFilter::ConversionStatus read_buChar();
0198 KoFilter::ConversionStatus read_buClr();
0199 KoFilter::ConversionStatus read_buClrTx();
0200 KoFilter::ConversionStatus read_buSzPct();
0201 KoFilter::ConversionStatus read_buSzPts();
0202 KoFilter::ConversionStatus read_buFont();
0203 KoFilter::ConversionStatus read_buNone();
0204 KoFilter::ConversionStatus read_buAutoNum();
0205 KoFilter::ConversionStatus read_fld();
0206 KoFilter::ConversionStatus read_spcBef();
0207 KoFilter::ConversionStatus read_spcAft();
0208 KoFilter::ConversionStatus read_lnSpc();
0209 KoFilter::ConversionStatus read_spcPts();
0210 KoFilter::ConversionStatus read_spcPct();
0211 KoFilter::ConversionStatus read_defRPr();
0212 KoFilter::ConversionStatus read_bodyPr();
0213 KoFilter::ConversionStatus read_normAutofit();
0214 KoFilter::ConversionStatus read_spAutoFit();
0215 
0216 //! Inherit default body properties
0217 void inheritDefaultBodyProperties();
0218 
0219 void algnToODF(const char *odfEl, const QString& emuValue);
0220 
0221 //! Sets the fo:margin-* attribute of graphic-properties for read_anchor().
0222 void distToODF(const char *odfEl, const QString& emuValue);
0223 
0224 // ----------------------------------------
0225 // MSOOXML_CURRENT_NS == (DRAWINGML_NS || DRAWINGML_TXBODY_NS)
0226 // ----------------------------------------
0227 
0228 KoFilter::ConversionStatus read_DrawingML_txBody(txBodyCaller caller);
0229 
0230 // ----------------------------------------
0231 
0232 MSOOXML::Utils::autoFitStatus m_normAutofit; // Whether text should be fitted to fit the shape
0233 
0234 bool m_isLockedCanvas;
0235 
0236 KoGenStyle m_referredFont;
0237 
0238 int m_gradPosition;
0239 QString m_gradAngle;
0240 bool m_xfrm_read;
0241 bool m_insideTable;
0242 qreal m_maxParaFontPt; // Largest font size used in the paragraph
0243 qreal m_minParaFontPt; // minimum font size used in the paragraph
0244 read_p_args m_read_DrawingML_p_args;
0245 
0246 bool m_contentAvLstExists; // whether avLst exists
0247 QMap<QString, QString> m_avModifiers;
0248 
0249 QString m_customPath;
0250 QString m_customEquations;
0251 QString m_textareas;
0252 
0253 QString m_contentType; // read in prstGeom
0254 
0255 spacingType m_currentSpacingType; // determines how spcPct and spcPts should behave
0256 
0257 QString m_shapeTextPosition;
0258 QString m_shapeTextTopOff;
0259 QString m_shapeTextBottomOff;
0260 QString m_shapeTextLeftOff;
0261 QString m_shapeTextRightOff;
0262 
0263 bool m_listStylePropertiesAltered;
0264 QString m_prevListStyleName;
0265 
0266 int m_prevListLevel; //! set by drawingML_ppr
0267 int m_currentListLevel; //! set by drawingML_ppr
0268 
0269 // Map of level keys and xml:id values of text:list elements to continue
0270 // automatic numbering.
0271 QMap<quint16, QString> m_lvlXmlIdMap;
0272 
0273 // true - continue numbered list, false - restart numbering
0274 QMap<quint16, bool> m_continueListNumbering;
0275 
0276 //! set by read_drawing() to indicate if we have encountered
0277 //! drawing/anchor, used by read_pic()
0278 bool m_drawing_anchor;
0279 
0280 //! set by read_drawing() to indicate if we have encountered
0281 //! drawing/inline, used by read_pic()
0282 bool m_drawing_inline;
0283 
0284 // Shape properties
0285 qint64 m_svgX; //!< set by read_off()
0286 qint64 m_svgY; //!< set by read_off()
0287 int m_svgWidth; //! set by read_ext()
0288 int m_svgHeight; //! set by read_ext()
0289 int m_svgChX; //!< set by read_chOff()
0290 int m_svgChY; //!< set by read_chOff()
0291 int m_svgChWidth; //! set by read_chExt()
0292 int m_svgChHeight; //! set by read_chExt()
0293 
0294 bool m_inGrpSpPr; //Whether we are in group shape, affects transformations
0295 bool m_flipH; //! set by read_xfrm()
0296 bool m_flipV; //! set by read_xfrm()
0297 
0298 int m_rot; //! set by read_xfrm()
0299 
0300 QVector<GroupProp> m_svgProp; //! value of the parent
0301 
0302 QString m_xlinkHref; //!< set by read_blip()
0303 bool m_ignoreLinkHref; //!< to ignore picture with a style which has picture fill
0304 QString m_cNvPrId; //!< set by read_cNvPr()
0305 QString m_cNvPrName; //!< set by read_cNvPr()
0306 QString m_cNvPrDescr; //!< set by read_cNvPr()
0307 
0308 bool m_hyperLink;
0309 QString m_hyperLinkTarget;
0310 
0311 QString m_recentDestName; // recent image
0312