# encoding: utf-8 """Initializes lxml parser, particularly the custom element classes. Also makes available a handful of functions that wrap its typical uses. """ from __future__ import absolute_import, division, print_function, unicode_literals import os from lxml import etree from .ns import NamespacePrefixedTag # configure etree XML parser ------------------------------- element_class_lookup = etree.ElementNamespaceClassLookup() oxml_parser = etree.XMLParser(remove_blank_text=True, resolve_entities=False) oxml_parser.set_element_class_lookup(element_class_lookup) def parse_from_template(template_name): """ Return an element loaded from the XML in the template file identified by *template_name*. """ thisdir = os.path.split(__file__)[0] filename = os.path.join(thisdir, "..", "templates", "%s.xml" % template_name) with open(filename, "rb") as f: xml = f.read() return parse_xml(xml) def parse_xml(xml): """ Return root lxml element obtained by parsing XML character string in *xml*, which can be either a Python 2.x string or unicode. """ root_element = etree.fromstring(xml, oxml_parser) return root_element def register_element_cls(nsptagname, cls): """ Register *cls* to be constructed when the oxml parser encounters an element having name *nsptag_name*. *nsptag_name* is a string of the form ``nspfx:tagroot``, e.g. ``'w:document'``. """ nsptag = NamespacePrefixedTag(nsptagname) namespace = element_class_lookup.get_namespace(nsptag.nsuri) namespace[nsptag.local_part] = cls from .action import CT_Hyperlink # noqa: E402 register_element_cls("a:hlinkClick", CT_Hyperlink) register_element_cls("a:hlinkHover", CT_Hyperlink) from .chart.axis import ( # noqa: E402 CT_AxisUnit, CT_CatAx, CT_ChartLines, CT_Crosses, CT_DateAx, CT_LblOffset, CT_Scaling, CT_TickLblPos, CT_TickMark, CT_ValAx, ) register_element_cls("c:catAx", CT_CatAx) register_element_cls("c:crosses", CT_Crosses) register_element_cls("c:dateAx", CT_DateAx) register_element_cls("c:lblOffset", CT_LblOffset) register_element_cls("c:majorGridlines", CT_ChartLines) register_element_cls("c:majorTickMark", CT_TickMark) register_element_cls("c:majorUnit", CT_AxisUnit) register_element_cls("c:minorTickMark", CT_TickMark) register_element_cls("c:minorUnit", CT_AxisUnit) register_element_cls("c:scaling", CT_Scaling) register_element_cls("c:tickLblPos", CT_TickLblPos) register_element_cls("c:valAx", CT_ValAx) from .chart.chart import ( # noqa: E402 CT_Chart, CT_ChartSpace, CT_ExternalData, CT_PlotArea, CT_Style, ) register_element_cls("c:chart", CT_Chart) register_element_cls("c:chartSpace", CT_ChartSpace) register_element_cls("c:externalData", CT_ExternalData) register_element_cls("c:plotArea", CT_PlotArea) register_element_cls("c:style", CT_Style) from .chart.datalabel import CT_DLbl, CT_DLblPos, CT_DLbls # noqa: E402 register_element_cls("c:dLbl", CT_DLbl) register_element_cls("c:dLblPos", CT_DLblPos) register_element_cls("c:dLbls", CT_DLbls) from .chart.legend import CT_Legend, CT_LegendPos # noqa: E402 register_element_cls("c:legend", CT_Legend) register_element_cls("c:legendPos", CT_LegendPos) from .chart.marker import CT_Marker, CT_MarkerSize, CT_MarkerStyle # noqa: E402 register_element_cls("c:marker", CT_Marker) register_element_cls("c:size", CT_MarkerSize) register_element_cls("c:symbol", CT_MarkerStyle) from .chart.plot import ( # noqa: E402 CT_Area3DChart, CT_AreaChart, CT_BarChart, CT_BarDir, CT_BubbleChart, CT_BubbleScale, CT_DoughnutChart, CT_GapAmount, CT_Grouping, CT_LineChart, CT_Overlap, CT_PieChart, CT_RadarChart, CT_ScatterChart, ) register_element_cls("c:area3DChart", CT_Area3DChart) register_element_cls("c:areaChart", CT_AreaChart) register_element_cls("c:barChart", CT_BarChart) register_element_cls("c:barDir", CT_BarDir) register_element_cls("c:bubbleChart", CT_BubbleChart) register_element_cls("c:bubbleScale", CT_BubbleScale) register_element_cls("c:doughnutChart", CT_DoughnutChart) register_element_cls("c:gapWidth", CT_GapAmount) register_element_cls("c:grouping", CT_Grouping) register_element_cls("c:lineChart", CT_LineChart) register_element_cls("c:overlap", CT_Overlap) register_element_cls("c:pieChart", CT_PieChart) register_element_cls("c:radarChart", CT_RadarChart) register_element_cls("c:scatterChart", CT_ScatterChart) from .chart.series import ( # noqa: E402 CT_AxDataSource, CT_DPt, CT_Lvl, CT_NumDataSource, CT_SeriesComposite, CT_StrVal_NumVal_Composite, ) register_element_cls("c:bubbleSize", CT_NumDataSource) register_element_cls("c:cat", CT_AxDataSource) register_element_cls("c:dPt", CT_DPt) register_element_cls("c:lvl", CT_Lvl) register_element_cls("c:pt", CT_StrVal_NumVal_Composite) register_element_cls("c:ser", CT_SeriesComposite) register_element_cls("c:val", CT_NumDataSource) register_element_cls("c:xVal", CT_NumDataSource) register_element_cls("c:yVal", CT_NumDataSource) from .chart.shared import ( # noqa: E402 CT_Boolean, CT_Boolean_Explicit, CT_Double, CT_Layout, CT_LayoutMode, CT_ManualLayout, CT_NumFmt, CT_Title, CT_Tx, CT_UnsignedInt, ) register_element_cls("c:autoTitleDeleted", CT_Boolean_Explicit) register_element_cls("c:autoUpdate", CT_Boolean) register_element_cls("c:bubble3D", CT_Boolean) register_element_cls("c:crossAx", CT_UnsignedInt) register_element_cls("c:crossesAt", CT_Double) register_element_cls("c:date1904", CT_Boolean) register_element_cls("c:delete", CT_Boolean) register_element_cls("c:idx", CT_UnsignedInt) register_element_cls("c:invertIfNegative", CT_Boolean_Explicit) register_element_cls("c:layout", CT_Layout) register_element_cls("c:manualLayout", CT_ManualLayout) register_element_cls("c:max", CT_Double) register_element_cls("c:min", CT_Double) register_element_cls("c:numFmt", CT_NumFmt) register_element_cls("c:order", CT_UnsignedInt) register_element_cls("c:overlay", CT_Boolean_Explicit) register_element_cls("c:ptCount", CT_UnsignedInt) register_element_cls("c:showCatName", CT_Boolean_Explicit) register_element_cls("c:showLegendKey", CT_Boolean_Explicit) register_element_cls("c:showPercent", CT_Boolean_Explicit) register_element_cls("c:showSerName", CT_Boolean_Explicit) register_element_cls("c:showVal", CT_Boolean_Explicit) register_element_cls("c:smooth", CT_Boolean) register_element_cls("c:title", CT_Title) register_element_cls("c:tx", CT_Tx) register_element_cls("c:varyColors", CT_Boolean) register_element_cls("c:x", CT_Double) register_element_cls("c:xMode", CT_LayoutMode) from .coreprops import CT_CoreProperties # noqa: E402 register_element_cls("cp:coreProperties", CT_CoreProperties) from .dml.color import ( # noqa: E402 CT_Color, CT_HslColor, CT_Percentage, CT_PresetColor, CT_SchemeColor, CT_ScRgbColor, CT_SRgbColor, CT_SystemColor, ) register_element_cls("a:bgClr", CT_Color) register_element_cls("a:fgClr", CT_Color) register_element_cls("a:hslClr", CT_HslColor) register_element_cls("a:lumMod", CT_Percentage) register_element_cls("a:lumOff", CT_Percentage) register_element_cls("a:prstClr", CT_PresetColor) register_element_cls("a:schemeClr", CT_SchemeColor) register_element_cls("a:scrgbClr", CT_ScRgbColor) register_element_cls("a:srgbClr", CT_SRgbColor) register_element_cls("a:sysClr", CT_SystemColor) from .dml.fill import ( # noqa: E402 CT_Blip, CT_BlipFillProperties, CT_GradientFillProperties, CT_GradientStop, CT_GradientStopList, CT_GroupFillProperties, CT_LinearShadeProperties, CT_NoFillProperties, CT_PatternFillProperties, CT_RelativeRect, CT_SolidColorFillProperties, ) register_element_cls("a:blip", CT_Blip) register_element_cls("a:blipFill", CT_BlipFillProperties) register_element_cls("a:gradFill", CT_GradientFillProperties) register_element_cls("a:grpFill", CT_GroupFillProperties) register_element_cls("a:gs", CT_GradientStop) register_element_cls("a:gsLst", CT_GradientStopList) register_element_cls("a:lin", CT_LinearShadeProperties) register_element_cls("a:noFill", CT_NoFillProperties) register_element_cls("a:pattFill", CT_PatternFillProperties) register_element_cls("a:solidFill", CT_SolidColorFillProperties) register_element_cls("a:srcRect", CT_RelativeRect) from .dml.line import CT_PresetLineDashProperties # noqa: E402 register_element_cls("a:prstDash", CT_PresetLineDashProperties) from .presentation import ( # noqa: E402 CT_Presentation, CT_SlideId, CT_SlideIdList, CT_SlideMasterIdList, CT_SlideMasterIdListEntry, CT_SlideSize, ) register_element_cls("p:presentation", CT_Presentation) register_element_cls("p:sldId", CT_SlideId) register_element_cls("p:sldIdLst", CT_SlideIdList) register_element_cls("p:sldMasterId", CT_SlideMasterIdListEntry) register_element_cls("p:sldMasterIdLst", CT_SlideMasterIdList) register_element_cls("p:sldSz", CT_SlideSize) from .shapes.autoshape import ( # noqa: E402 CT_AdjPoint2D, CT_CustomGeometry2D, CT_GeomGuide, CT_GeomGuideList, CT_NonVisualDrawingShapeProps, CT_Path2D, CT_Path2DClose, CT_Path2DLineTo, CT_Path2DList, CT_Path2DMoveTo, CT_PresetGeometry2D, CT_Shape, CT_ShapeNonVisual, ) register_element_cls("a:avLst", CT_GeomGuideList) register_element_cls("a:custGeom", CT_CustomGeometry2D) register_element_cls("a:gd", CT_GeomGuide) register_element_cls("a:close", CT_Path2DClose) register_element_cls("a:lnTo", CT_Path2DLineTo) register_element_cls("a:moveTo", CT_Path2DMoveTo) register_element_cls("a:path", CT_Path2D) register_element_cls("a:pathLst", CT_Path2DList) register_element_cls("a:prstGeom", CT_PresetGeometry2D) register_element_cls("a:pt", CT_AdjPoint2D) register_element_cls("p:cNvSpPr", CT_NonVisualDrawingShapeProps) register_element_cls("p:nvSpPr", CT_ShapeNonVisual) register_element_cls("p:sp", CT_Shape) from .shapes.connector import ( # noqa: E402 CT_Connection, CT_Connector, CT_ConnectorNonVisual, CT_NonVisualConnectorProperties, ) register_element_cls("a:endCxn", CT_Connection) register_element_cls("a:stCxn", CT_Connection) register_element_cls("p:cNvCxnSpPr", CT_NonVisualConnectorProperties) register_element_cls("p:cxnSp", CT_Connector) register_element_cls("p:nvCxnSpPr", CT_ConnectorNonVisual) from .shapes.graphfrm import ( # noqa: E402 CT_GraphicalObject, CT_GraphicalObjectData, CT_GraphicalObjectFrame, CT_GraphicalObjectFrameNonVisual, ) register_element_cls("a:graphic", CT_GraphicalObject) register_element_cls("a:graphicData", CT_GraphicalObjectData) register_element_cls("p:graphicFrame", CT_GraphicalObjectFrame) register_element_cls("p:nvGraphicFramePr", CT_GraphicalObjectFrameNonVisual) from .shapes.groupshape import ( # noqa: E402 CT_GroupShape, CT_GroupShapeNonVisual, CT_GroupShapeProperties, ) register_element_cls("p:grpSp", CT_GroupShape) register_element_cls("p:grpSpPr", CT_GroupShapeProperties) register_element_cls("p:nvGrpSpPr", CT_GroupShapeNonVisual) register_element_cls("p:spTree", CT_GroupShape) from .shapes.picture import CT_Picture, CT_PictureNonVisual # noqa: E402 register_element_cls("p:blipFill", CT_BlipFillProperties) register_element_cls("p:nvPicPr", CT_PictureNonVisual) register_element_cls("p:pic", CT_Picture) from .shapes.shared import ( # noqa: E402 CT_ApplicationNonVisualDrawingProps, CT_LineProperties, CT_NonVisualDrawingProps, CT_Placeholder, CT_Point2D, CT_PositiveSize2D, CT_ShapeProperties, CT_Transform2D, ) register_element_cls("a:chExt", CT_PositiveSize2D) register_element_cls("a:chOff", CT_Point2D) register_element_cls("a:ext", CT_PositiveSize2D) register_element_cls("a:ln", CT_LineProperties) register_element_cls("a:off", CT_Point2D) register_element_cls("a:xfrm", CT_Transform2D) register_element_cls("c:spPr", CT_ShapeProperties) register_element_cls("p:cNvPr", CT_NonVisualDrawingProps) register_element_cls("p:nvPr", CT_ApplicationNonVisualDrawingProps) register_element_cls("p:ph", CT_Placeholder) register_element_cls("p:spPr", CT_ShapeProperties) register_element_cls("p:xfrm", CT_Transform2D) from .slide import ( # noqa: E402 CT_Background, CT_BackgroundProperties, CT_CommonSlideData, CT_NotesMaster, CT_NotesSlide, CT_Slide, CT_SlideLayout, CT_SlideLayoutIdList, CT_SlideLayoutIdListEntry, CT_SlideMaster, CT_SlideTiming, CT_TimeNodeList, CT_TLMediaNodeVideo, ) register_element_cls("p:bg", CT_Background) register_element_cls("p:bgPr", CT_BackgroundProperties) register_element_cls("p:childTnLst", CT_TimeNodeList) register_element_cls("p:cSld", CT_CommonSlideData) register_element_cls("p:notes", CT_NotesSlide) register_element_cls("p:notesMaster", CT_NotesMaster) register_element_cls("p:sld", CT_Slide) register_element_cls("p:sldLayout", CT_SlideLayout) register_element_cls("p:sldLayoutId", CT_SlideLayoutIdListEntry) register_element_cls("p:sldLayoutIdLst", CT_SlideLayoutIdList) register_element_cls("p:sldMaster", CT_SlideMaster) register_element_cls("p:timing", CT_SlideTiming) register_element_cls("p:video", CT_TLMediaNodeVideo) from .table import ( # noqa: E402 CT_Table, CT_TableCell, CT_TableCellProperties, CT_TableCol, CT_TableGrid, CT_TableProperties, CT_TableRow, ) register_element_cls("a:gridCol", CT_TableCol) register_element_cls("a:tbl", CT_Table) register_element_cls("a:tblGrid", CT_TableGrid) register_element_cls("a:tblPr", CT_TableProperties) register_element_cls("a:tc", CT_TableCell) register_element_cls("a:tcPr", CT_TableCellProperties) register_element_cls("a:tr", CT_TableRow) from .text import ( # noqa: E402 CT_RegularTextRun, CT_TextBody, CT_TextBodyProperties, CT_TextCharacterProperties, CT_TextField, CT_TextFont, CT_TextLineBreak, CT_TextNormalAutofit, CT_TextParagraph, CT_TextParagraphProperties, CT_TextSpacing, CT_TextSpacingPercent, CT_TextSpacingPoint, ) register_element_cls("a:bodyPr", CT_TextBodyProperties) register_element_cls("a:br", CT_TextLineBreak) register_element_cls("a:defRPr", CT_TextCharacterProperties) register_element_cls("a:endParaRPr", CT_TextCharacterProperties) register_element_cls("a:fld", CT_TextField) register_element_cls("a:latin", CT_TextFont) register_element_cls("a:lnSpc", CT_TextSpacing) register_element_cls("a:normAutofit", CT_TextNormalAutofit) register_element_cls("a:r", CT_RegularTextRun) register_element_cls("a:p", CT_TextParagraph) register_element_cls("a:pPr", CT_TextParagraphProperties) register_element_cls("c:rich", CT_TextBody) register_element_cls("a:rPr", CT_TextCharacterProperties) register_element_cls("a:spcAft", CT_TextSpacing) register_element_cls("a:spcBef", CT_TextSpacing) register_element_cls("a:spcPct", CT_TextSpacingPercent) register_element_cls("a:spcPts", CT_TextSpacingPoint) register_element_cls("a:txBody", CT_TextBody) register_element_cls("c:txPr", CT_TextBody) register_element_cls("p:txBody", CT_TextBody) from .theme import CT_OfficeStyleSheet # noqa: E402 register_element_cls("a:theme", CT_OfficeStyleSheet)