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