lib/isodoc/iho/iho.specification.xsl in metanorma-iho-0.9.6 vs lib/isodoc/iho/iho.specification.xsl in metanorma-iho-0.9.7

- old
+ new

@@ -7112,23 +7112,60 @@ <xsl:call-template name="termsource"/> </xsl:template> <xsl:template match="*[local-name() = 'image']"> + <xsl:param name="indent">0</xsl:param> <xsl:variable name="isAdded" select="../@added"/> <xsl:variable name="isDeleted" select="../@deleted"/> <xsl:choose> - <xsl:when test="ancestor::*[local-name() = 'title'] or not(parent::*[local-name() = 'figure']) or parent::*[local-name() = 'p']"> + <xsl:when test="ancestor::*[local-name() = 'title'] or not(parent::*[local-name() = 'figure']) or parent::*[local-name() = 'p']"> <!-- inline image ( 'image:path' in adoc, with one colon after image) --> <fo:inline padding-left="1mm" padding-right="1mm"> <xsl:if test="not(parent::*[local-name() = 'figure']) or parent::*[local-name() = 'p']"> <xsl:attribute name="padding-left">0mm</xsl:attribute> <xsl:attribute name="padding-right">0mm</xsl:attribute> </xsl:if> <xsl:variable name="src"> <xsl:call-template name="image_src"/> </xsl:variable> - <fo:external-graphic src="{$src}" fox:alt-text="Image {@alt}" vertical-align="middle"/> + + <xsl:variable name="scale"> + <xsl:call-template name="getImageScale"> + <xsl:with-param name="indent" select="$indent"/> + </xsl:call-template> + </xsl:variable> + + <!-- debug scale='<xsl:value-of select="$scale"/>', indent='<xsl:value-of select="$indent"/>' --> + + <!-- <fo:external-graphic src="{$src}" fox:alt-text="Image {@alt}" vertical-align="middle"/> --> + <fo:external-graphic src="{$src}" fox:alt-text="Image {@alt}" vertical-align="middle"> + + <xsl:variable name="width"> + <xsl:call-template name="setImageWidth"/> + </xsl:variable> + <xsl:if test="$width != ''"> + <xsl:attribute name="width"><xsl:value-of select="$width"/></xsl:attribute> + </xsl:if> + <xsl:variable name="height"> + <xsl:call-template name="setImageHeight"/> + </xsl:variable> + <xsl:if test="$height != ''"> + <xsl:attribute name="height"><xsl:value-of select="$height"/></xsl:attribute> + </xsl:if> + + <xsl:if test="$width = '' and $height = ''"> + <xsl:if test="number($scale) &lt; 100"> + <xsl:attribute name="content-width"><xsl:value-of select="number($scale)"/>%</xsl:attribute> + <!-- <xsl:attribute name="content-width">scale-to-fit</xsl:attribute> + <xsl:attribute name="content-height">100%</xsl:attribute> + <xsl:attribute name="width">100%</xsl:attribute> + <xsl:attribute name="scaling">uniform</xsl:attribute> --> + </xsl:if> + </xsl:if> + + </fo:external-graphic> + </fo:inline> </xsl:when> <xsl:otherwise> <fo:block xsl:use-attribute-sets="image-style"> @@ -7145,54 +7182,46 @@ <xsl:attribute name="width">100%</xsl:attribute> <xsl:attribute name="content-height">100%</xsl:attribute> <xsl:attribute name="content-width">scale-down-to-fit</xsl:attribute> <xsl:attribute name="scaling">uniform</xsl:attribute> - <xsl:apply-templates select="." mode="cross_image"/> + <xsl:apply-templates select="." mode="cross_image"/> </fo:instream-foreign-object> </xsl:when> <xsl:otherwise> + <!-- <fo:block>debug block image: + <xsl:variable name="scale"> + <xsl:call-template name="getImageScale"> + <xsl:with-param name="indent" select="$indent"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="concat('scale=', $scale,', indent=', $indent)"/> + </fo:block> --> <fo:external-graphic src="{$src}" fox:alt-text="Image {@alt}" xsl:use-attribute-sets="image-graphic-style"> <xsl:if test="not(@mimetype = 'image/svg+xml') and (../*[local-name() = 'name'] or parent::*[local-name() = 'figure'][@unnumbered = 'true']) and not(ancestor::*[local-name() = 'table'])"> - <xsl:if test="@width != '' and @width != 'auto' and @width != 'text-width' and @width != 'full-page-width' and @width != 'narrow'"> - <xsl:attribute name="width"> - <xsl:value-of select="@width"/> - </xsl:attribute> - </xsl:if> + <xsl:call-template name="setImageWidthHeight"/> - <xsl:if test="@height != '' and @height != 'auto'"> - <xsl:attribute name="height"> - <xsl:value-of select="@height"/> - </xsl:attribute> - </xsl:if> - <xsl:choose> <xsl:when test="@width != '' and @width != 'auto' and @height != '' and @height != 'auto'"> <xsl:attribute name="scaling">non-uniform</xsl:attribute> </xsl:when> <xsl:otherwise> - <xsl:variable name="img_src"> - <xsl:choose> - <xsl:when test="not(starts-with(@src, 'data:'))"><xsl:value-of select="concat($basepath, @src)"/></xsl:when> - <xsl:otherwise><xsl:value-of select="@src"/></xsl:otherwise> - </xsl:choose> + <xsl:variable name="scale"> + <xsl:call-template name="getImageScale"> + <xsl:with-param name="indent" select="$indent"/> + </xsl:call-template> </xsl:variable> - <xsl:variable name="image_width_effective"> - - <xsl:value-of select="$width_effective"/> - + <xsl:variable name="scaleRatio"> + 1 </xsl:variable> - <xsl:variable name="scale" select="java:org.metanorma.fop.Util.getImageScale($img_src, $image_width_effective, $height_effective)"/> <xsl:if test="number($scale) &lt; 100"> - - <xsl:attribute name="content-width"><xsl:value-of select="$scale"/>%</xsl:attribute> - + <xsl:attribute name="content-width"><xsl:value-of select="number($scale) * number($scaleRatio)"/>%</xsl:attribute> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:if> @@ -7204,10 +7233,66 @@ </fo:block> </xsl:otherwise> </xsl:choose> </xsl:template> + <xsl:template name="setImageWidth"> + <xsl:if test="@width != '' and @width != 'auto' and @width != 'text-width' and @width != 'full-page-width' and @width != 'narrow'"> + <xsl:value-of select="@width"/> + </xsl:if> + </xsl:template> + <xsl:template name="setImageHeight"> + <xsl:if test="@height != '' and @height != 'auto'"> + <xsl:value-of select="@height"/> + </xsl:if> + </xsl:template> + <xsl:template name="setImageWidthHeight"> + <xsl:variable name="width"> + <xsl:call-template name="setImageWidth"/> + </xsl:variable> + <xsl:if test="$width != ''"> + <xsl:attribute name="width"> + <xsl:value-of select="$width"/> + </xsl:attribute> + </xsl:if> + <xsl:variable name="height"> + <xsl:call-template name="setImageHeight"/> + </xsl:variable> + <xsl:if test="$height != ''"> + <xsl:attribute name="height"> + <xsl:value-of select="$height"/> + </xsl:attribute> + </xsl:if> + </xsl:template> + + <xsl:template name="getImageScale"> + <xsl:param name="indent"/> + <xsl:variable name="indent_left"> + <xsl:choose> + <xsl:when test="$indent != ''"><xsl:value-of select="$indent"/></xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="img_src"> + <xsl:choose> + <xsl:when test="not(starts-with(@src, 'data:'))"><xsl:value-of select="concat($basepath, @src)"/></xsl:when> + <xsl:otherwise><xsl:value-of select="@src"/></xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="image_width_effective"> + + <xsl:value-of select="$width_effective - number($indent_left)"/> + + </xsl:variable> + <!-- <xsl:message>width_effective=<xsl:value-of select="$width_effective"/></xsl:message> + <xsl:message>indent_left=<xsl:value-of select="$indent_left"/></xsl:message> + <xsl:message>image_width_effective=<xsl:value-of select="$image_width_effective"/> for <xsl:value-of select="ancestor::ogc:p[1]/@id"/></xsl:message> --> + <xsl:variable name="scale" select="java:org.metanorma.fop.Util.getImageScale($img_src, $image_width_effective, $height_effective)"/> + <xsl:value-of select="$scale"/> + </xsl:template> + <xsl:template name="image_src"> <xsl:choose> <xsl:when test="@mimetype = 'image/svg+xml' and $images/images/image[@id = current()/@id]"> <xsl:value-of select="$images/images/image[@id = current()/@id]/@src"/> </xsl:when> @@ -9879,10 +9964,11 @@ </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="*[local-name() = 'ul'] | *[local-name() = 'ol']"> + <xsl:param name="indent">0</xsl:param> <xsl:choose> <xsl:when test="parent::*[local-name() = 'note'] or parent::*[local-name() = 'termnote']"> <fo:block-container role="SKIP"> <xsl:attribute name="margin-left"> <xsl:choose> @@ -9893,19 +9979,23 @@ <xsl:call-template name="refine_list_container_style"/> <fo:block-container margin-left="0mm" role="SKIP"> <fo:block> - <xsl:apply-templates select="." mode="list"/> + <xsl:apply-templates select="." mode="list"> + <xsl:with-param name="indent" select="$indent"/> + </xsl:apply-templates> </fo:block> </fo:block-container> </fo:block-container> </xsl:when> <xsl:otherwise> <fo:block role="SKIP"> - <xsl:apply-templates select="." mode="list"/> + <xsl:apply-templates select="." mode="list"> + <xsl:with-param name="indent" select="$indent"/> + </xsl:apply-templates> </fo:block> </xsl:otherwise> </xsl:choose> </xsl:template> @@ -9986,10 +10076,17 @@ </fo:block> </xsl:if> </xsl:template> <xsl:template match="*[local-name()='li']"> + <xsl:param name="indent">0</xsl:param> + <!-- <fo:list-item xsl:use-attribute-sets="list-item-style"> + <fo:list-item-label end-indent="label-end()"><fo:block>x</fo:block></fo:list-item-label> + <fo:list-item-body start-indent="body-start()" xsl:use-attribute-sets="list-item-body-style"> + <fo:block>debug li indent=<xsl:value-of select="$indent"/></fo:block> + </fo:list-item-body> + </fo:list-item> --> <fo:list-item xsl:use-attribute-sets="list-item-style"> <xsl:copy-of select="@id"/> <xsl:call-template name="refine_list-item-style"/> @@ -10010,10 +10107,12 @@ <fo:list-item-body start-indent="body-start()" xsl:use-attribute-sets="list-item-body-style"> <fo:block role="SKIP"> <xsl:call-template name="refine_list-item-body-style"/> - <xsl:apply-templates/> + <xsl:apply-templates> + <xsl:with-param name="indent" select="$indent"/> + </xsl:apply-templates> <!-- <xsl:apply-templates select="node()[not(local-name() = 'note')]" /> <xsl:for-each select="./bsi:note"> <xsl:call-template name="note"/> \ No newline at end of file