]> granicus.if.org Git - docbook-dsssl/commitdiff
Convert graphic widths/depths to pixels
authorNorman Walsh <ndw@nwalsh.com>
Wed, 9 Jan 2002 13:27:04 +0000 (13:27 +0000)
committerNorman Walsh <ndw@nwalsh.com>
Wed, 9 Jan 2002 13:27:04 +0000 (13:27 +0000)
xsl/html/graphics.xsl

index b9b64538ec116e584298e50f5f6a01188d0b06d4..0c2994da2d2c2274166284959e881beae8cd2625 100644 (file)
   <xsl:variable name="width">
     <xsl:choose>
       <xsl:when test="@scale"><xsl:value-of select="@scale"/>%</xsl:when>
-      <xsl:when test="@width"><xsl:value-of select="@width"/></xsl:when>
+      <xsl:when test="@width">
+        <xsl:variable name="w-magnitude">
+          <xsl:call-template name="length-magnitude">
+            <xsl:with-param name="length" select="@width"/>
+          </xsl:call-template>
+        </xsl:variable>
+        <xsl:variable name="w-units">
+          <xsl:call-template name="length-units">
+            <xsl:with-param name="length" select="@width"/>
+            <xsl:with-param name="default.units" select="'px'"/>
+          </xsl:call-template>
+        </xsl:variable>
+
+        <xsl:choose>
+          <xsl:when test="$w-units = '%'">
+            <xsl:value-of select="@width"/>
+          </xsl:when>
+          <xsl:when test="$w-units = 'cm'">
+            <xsl:value-of select="round(($w-magnitude div 2.54) * 100)"/>
+          </xsl:when>
+          <xsl:when test="$w-units = 'mm'">
+            <xsl:value-of select="round(($w-magnitude div 25.4) * 100)"/>
+          </xsl:when>
+          <xsl:when test="$w-units = 'in'">
+            <xsl:value-of select="round($w-magnitude * 100)"/>
+          </xsl:when>
+          <xsl:when test="$w-units = 'pt'">
+            <xsl:value-of select="round(($w-magnitude div 72) * 100)"/>
+          </xsl:when>
+          <xsl:when test="$w-units = 'pc'">
+            <xsl:value-of select="round(($w-magnitude div 6) * 100)"/>
+          </xsl:when>
+          <xsl:when test="$w-units = 'px'">
+            <xsl:value-of select="$w-magnitude"/>
+          </xsl:when>
+          <xsl:when test="$w-units = 'em'">
+            <xsl:message>
+              <xsl:text>Relative units (ems) are not supported on widths.  </xsl:text>
+              <xsl:text>Using 12pt/em.</xsl:text>
+            </xsl:message>
+            <xsl:value-of select="round((($w-magnitude * 12) div 72) * 100)"/>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:message>
+              <xsl:text>Unrecognized unit given for width: </xsl:text>
+              <xsl:value-of select="$w-units"/>
+              <xsl:text>. Treating as px.</xsl:text>
+              <xsl:value-of select="$w-magnitude"/>
+            </xsl:message>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:when>
       <xsl:otherwise></xsl:otherwise>
     </xsl:choose>
   </xsl:variable>
   <xsl:variable name="height">
     <xsl:choose>
       <xsl:when test="@scale"></xsl:when>
-      <xsl:when test="@depth"><xsl:value-of select="@depth"/></xsl:when>
+      <xsl:when test="@depth">
+        <xsl:variable name="d-magnitude">
+          <xsl:call-template name="length-magnitude">
+            <xsl:with-param name="length" select="@depth"/>
+          </xsl:call-template>
+        </xsl:variable>
+        <xsl:variable name="d-units">
+          <xsl:call-template name="length-units">
+            <xsl:with-param name="length" select="@depth"/>
+            <xsl:with-param name="default.units" select="'px'"/>
+          </xsl:call-template>
+        </xsl:variable>
+
+        <xsl:choose>
+          <xsl:when test="$d-units = '%'">
+            <xsl:value-of select="@depth"/>
+          </xsl:when>
+          <xsl:when test="$d-units = 'cm'">
+            <xsl:value-of select="round(($d-magnitude div 2.54) * 100)"/>
+          </xsl:when>
+          <xsl:when test="$d-units = 'mm'">
+            <xsl:value-of select="round(($d-magnitude div 25.4) * 100)"/>
+          </xsl:when>
+          <xsl:when test="$d-units = 'in'">
+            <xsl:value-of select="round($d-magnitude * 100)"/>
+          </xsl:when>
+          <xsl:when test="$d-units = 'pt'">
+            <xsl:value-of select="round(($d-magnitude div 72) * 100)"/>
+          </xsl:when>
+          <xsl:when test="$d-units = 'pc'">
+            <xsl:value-of select="round(($d-magnitude div 6) * 100)"/>
+          </xsl:when>
+          <xsl:when test="$d-units = 'px'">
+            <xsl:value-of select="$d-magnitude"/>
+          </xsl:when>
+          <xsl:when test="$d-units = 'em'">
+            <xsl:message>
+              <xsl:text>Relative units (ems) are not supported on depths.  </xsl:text>
+              <xsl:text>Using 12pt/em.</xsl:text>
+            </xsl:message>
+            <xsl:value-of select="round((($d-magnitude * 12) div 72) * 100)"/>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:message>
+              <xsl:text>Unrecognized unit given for depth: </xsl:text>
+              <xsl:value-of select="$d-units"/>
+              <xsl:text>. Treating as px.</xsl:text>
+              <xsl:value-of select="$d-magnitude"/>
+            </xsl:message>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:when>
       <xsl:otherwise></xsl:otherwise>
     </xsl:choose>
   </xsl:variable>