<xsl:template match="tei:graphic">
<!-- perform some tests on the graphic -->
<xsl:variable name="maxWidth" select="number(number($pageWidth)*100) cast as xs:integer"/>
<xsl:variable name="maxHeight" select="number(number($pageHeight)*100) cast as xs:integer"/>
<xsl:variable name="filename">
<xsl:text>media/resource</xsl:text>
<xsl:number level="any"/>
<xsl:text>.</xsl:text>
<xsl:value-of select="tokenize(@url,'\.')[last()]"/>
</xsl:variable>
<xsl:variable name="origheight">
<xsl:choose>
<xsl:when test="@teidocx:height">
<xsl:value-of select="@teidocx:height"/>
</xsl:when>
<xsl:when test="doc-available(concat($wordDirectory,'/image-size-info.xml'))">
<xsl:for-each select="document(concat($wordDirectory,'/image-size-info.xml'))">
<xsl:value-of select="(number(key('H',$filename)/height) div 72) * 9144"/>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="origwidth">
<xsl:choose>
<xsl:when test="@teidocx:width">
<xsl:value-of select="@teidocx:width"/>
</xsl:when>
<xsl:when test="doc-available(concat($wordDirectory,'/image-size-info.xml'))">
<xsl:for-each select="document(concat($wordDirectory,'/image-size-info.xml'))">
<xsl:value-of select="(number(key('W',$filename)/width) div 72) * 9144"/>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="$filename and ( ($origwidth > 0 and $origheight > 0) or (@width and @height))">
<!--
is there a number present?
not(number(substring(@width,0,string-length(@width)-1))=NAN) and
not(number(substring(@height,0,string-length(@height)-1))=NAN)">
-->
<xsl:variable name="Width">
<!-- remembering that pageWidth is already divided by 100 -->
<xsl:choose>
<xsl:when test="contains(@width,'%')">
<xsl:value-of select="number($pageWidth * number(substring-before(@width,'%'))) cast as xs:integer"/>
</xsl:when>
<xsl:when test="@width">
<xsl:value-of select="tei:convert-dim-emu(@width)"/>
</xsl:when>
<xsl:when test="@scale and $origwidth">
<xsl:value-of select="($origwidth * number(@scale)) cast as xs:integer"/>
</xsl:when>
<xsl:when test="@height and $origheight and $origwidth">
<xsl:variable name="h">
<xsl:choose>
<xsl:when test="contains(@height,'%')">
<xsl:value-of select="number($pageHeight * (number(substring-before(@height,'%')))) cast as xs:integer"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="tei:convert-dim-emu(@height)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="number(($h * $origwidth) div $origheight) cast as xs:integer"/>
</xsl:when>
<xsl:when test="$origwidth">
<xsl:value-of select="$origwidth"/>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">no way to work out image width for
<xsl:value-of select="$filename"/>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="Height">
<xsl:choose>
<xsl:when test="contains(@height,'%')">
<xsl:value-of select="number($pageHeight * (number(substring-before(@height,'%')))) cast as xs:integer"/>
</xsl:when>
<xsl:when test="@height">
<xsl:value-of select="tei:convert-dim-emu(@height)"/>
</xsl:when>
<xsl:when test="@scale and $origheight">
<xsl:value-of select="($origheight * number(@scale)) cast as xs:integer"/>
</xsl:when>
<xsl:when test="@width and $origheight and $origwidth">
<xsl:value-of select="number( ($Width * $origheight) div $origwidth) cast as xs:integer"/>
</xsl:when>
<xsl:when test="$origheight">
<xsl:value-of select="$origheight"/>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">no way to work out image height for
<xsl:value-of select="$filename"/>
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- check for sense -->
<xsl:variable name="imageWidth">
<xsl:choose>
<xsl:when test="$Width = -1">
<xsl:value-of select="$maxWidth"/>
</xsl:when>
<xsl:when test="$Width > $maxWidth">
<xsl:value-of select="$maxWidth"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$Width"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="imageHeight">
<xsl:choose>
<xsl:when test="$Height = -1">
<xsl:value-of select="$maxHeight"/>
</xsl:when>
<xsl:when test="$Height > $maxHeight">
<xsl:value-of select="$maxHeight"/>
</xsl:when>
<xsl:when test="$Width > $maxWidth">
<xsl:value-of select="($Height * ($maxWidth div $Width) ) cast as xs:integer"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$Height"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!--
<xsl:message>
========================
<xsl:for-each select="@*">
- @<xsl:value-of select="name(.)"/>: <xsl:value-of select="."/>
</xsl:for-each>
- maxWidth: <xsl:value-of select="$maxWidth"/>
- maxHeight: <xsl:value-of select="$maxHeight"/>
- Width: <xsl:value-of select="$Width"/>
- Height: <xsl:value-of select="$Height"/>
* imageWidth: <xsl:value-of select="$imageWidth"/>
* imageHeight: <xsl:value-of select="$imageHeight"/>
</xsl:message>
-->
<!-- prepare actual graphic -->
<xsl:variable name="generatedID">
<xsl:number level="any"/>
<!--
<xsl:choose>
<xsl:when test="@n">
<xsl:value-of select="@n"/>
</xsl:when>
<xsl:otherwise>
<xsl:number level="any"/>
</xsl:otherwise>
</xsl:choose>
-->
</xsl:variable>
<xsl:variable name="graphic-element">
<a:graphic>
<a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:pic>
<pic:nvPicPr>
<pic:cNvPr name="{tokenize($filename, '/')[last()]}">
<xsl:attribute name="id">
<xsl:number level="any"/>
</xsl:attribute>
</pic:cNvPr>
<pic:cNvPicPr/>
</pic:nvPicPr>
<pic:blipFill>
<a:blip>
<xsl:attribute name="r:embed">
<xsl:choose>
<xsl:when test="$isofreestanding='true'">
<xsl:text>rId</xsl:text>
<xsl:value-of select="number($generatedID) + 300"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="document(concat($wordDirectory,'/word/_rels/document.xml.rels'))//rel:Relationship[@Target=$filename]/@Id"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</a:blip>
<a:stretch>
<a:fillRect/>
</a:stretch>
</pic:blipFill>
<pic:spPr>
<a:xfrm>
<a:off x="0" y="0"/>
<a:ext cx="{$imageWidth}00" cy="{$imageHeight}00"/>
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst/>
</a:prstGeom>
<xsl:if test="$shadowGraphics='true' and parent::tei:figure">
<a:effectLst>
<a:outerShdw blurRad="50800" dist="88900" dir="2700000" algn="tl" rotWithShape="0">
<a:schemeClr val="tx1">
<a:alpha val="49000"/>
</a:schemeClr>
</a:outerShdw>
</a:effectLst>
</xsl:if>
</pic:spPr>
</pic:pic>
</a:graphicData>
</a:graphic>
</xsl:variable>
<!-- end graphic element -->
<w:r>
<w:drawing>
<!-- choose between inline and block -->
<xsl:choose>
<xsl:when test="parent::tei:figure[@place='left' or @place='centre' or @place='right' or @place='center']">
<wp:anchor simplePos="0" relativeHeight="10" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1">
<wp:simplePos x="0" y="0"/>
<wp:positionH relativeFrom="margin">
<wp:align>
<xsl:value-of select="parent::tei:figure/@place"/>
</wp:align>
</wp:positionH>
<wp:positionV relativeFrom="paragraph">
<wp:align>center</wp:align>
</wp:positionV>
<wp:extent cx="{$imageWidth}00" cy="{$imageHeight}00"/>
<xsl:if test="$shadowGraphics='true'">
<wp:effectExtent l="50800" t="25400" r="101600" b="63500"/>
</xsl:if>
<wp:wrapSquare wrapText="bothSides"/>
<wp:docPr name="{tokenize($filename, '/')[last()]}">
<xsl:attribute name="id">
<xsl:value-of select="$generatedID"/>
</xsl:attribute>
</wp:docPr>
<xsl:if test="$shadowGraphics='true'">
<wp:cNvGraphicFramePr/>
</xsl:if>
<xsl:copy-of select="$graphic-element"/>
</wp:anchor>
</xsl:when>
<xsl:otherwise>
<wp:inline distT="0" distB="0" distL="0" distR="0">
<wp:extent cx="{$imageWidth}00" cy="{$imageHeight}00"/>
<xsl:if test="$shadowGraphics='true'">
<wp:effectExtent l="50800" t="25400" r="101600" b="63500"/>
</xsl:if>
<wp:docPr name="{tokenize($filename, '/')[last()]}">
<xsl:attribute name="id">
<xsl:value-of select="$generatedID"/>
</xsl:attribute>
</wp:docPr>
<xsl:if test="$shadowGraphics='true'">
<wp:cNvGraphicFramePr/>
</xsl:if>
<xsl:copy-of select="$graphic-element"/>
</wp:inline>
</xsl:otherwise>
</xsl:choose>
</w:drawing>
</w:r>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">ERROR. no image size info for
<xsl:value-of select="$filename"/>, cannot proceed</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template> |