Thanks Thomas. I tried that solution, but I'm still not seeing the alt 
attribute in the output. Below is what I added to my customization (I marked 
the change from the original stylesheet--it's just 3 additional lines). 

<xsl:template match="d:imagedata"> 
<xsl:variable name="filename"> 
<xsl:call-template name="mediaobject.filename"> 
<xsl:with-param name="object" select=".."/> 
</xsl:call-template> 
</xsl:variable> 

<xsl:choose> 
<!-- Handle MathML and SVG markup in imagedata --> 
<xsl:when test="mml:*" xmlns:mml="http://www.w3.org/1998/Math/MathML";> 
<xsl:apply-templates/> 
</xsl:when> 

<xsl:when test="svg:*" xmlns:svg="http://www.w3.org/2000/svg";> 
<xsl:apply-templates/> 
</xsl:when> 

<xsl:when test="@format='linespecific'"> 
<xsl:choose> 
<xsl:when test="$use.extensions != '0' 
and $textinsert.extension != '0'"> 
<xsl:choose> 
<xsl:when test="element-available('stext:insertfile')"> 
<stext:insertfile href="{$filename}" encoding="{$textdata.default.encoding}"/> 
</xsl:when> 
<xsl:when test="element-available('xtext:insertfile')"> 
<xtext:insertfile href="{$filename}"/> 
</xsl:when> 
<xsl:otherwise> 
<xsl:message terminate="yes"> 
<xsl:text>No insertfile extension available.</xsl:text> 
</xsl:message> 
</xsl:otherwise> 
</xsl:choose> 
</xsl:when> 
<xsl:otherwise> 
<a xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad" 
href="{$filename}"/> 
</xsl:otherwise> 
</xsl:choose> 
</xsl:when> 
<xsl:otherwise> 
<xsl:variable name="longdesc.uri"> 
<xsl:call-template name="longdesc.uri"> 
<xsl:with-param name="mediaobject" 
select="ancestor::d:imageobject/parent::*"/> 
</xsl:call-template> 
</xsl:variable> 

<xsl:variable name="phrases" 
select="ancestor::d:mediaobject/d:textobject[d:phrase] 
|ancestor::d:inlinemediaobject/d:textobject[d:phrase] 
|ancestor::d:mediaobjectco/d:textobject[d:phrase]"/> 

<xsl:call-template name="process.image"> 
<xsl:with-param name="alt"> 
<xsl:choose> 
<xsl:when test="ancestor::d:mediaobject/d:alt"> 
<xsl:apply-templates select="ancestor::d:mediaobject/d:alt"/> 
</xsl:when> 
<!-- Added when statement below --> 
<xsl:when test="ancestor::d:inlinemediaobject/d:alt"> 
<xsl:apply-templates select="ancestor::d:inlinemediaobject/d:alt"/> 
</xsl:when> 
<xsl:otherwise> 
<xsl:apply-templates select="$phrases[not(@role) or @role!='tex'][1]"/> 
</xsl:otherwise> 
</xsl:choose> 
</xsl:with-param> 
<xsl:with-param name="longdesc"> 
<xsl:call-template name="write.longdesc"> 
<xsl:with-param name="mediaobject" 
select="ancestor::d:imageobject/parent::*"/> 
</xsl:call-template> 
</xsl:with-param> 
</xsl:call-template> 

<xsl:if test="$html.longdesc != 0 and $html.longdesc.link != 0 
and ancestor::d:imageobject/parent::*/d:textobject[not(d:phrase)]"> 
<xsl:call-template name="longdesc.link"> 
<xsl:with-param name="longdesc.uri" select="$longdesc.uri"/> 
</xsl:call-template> 
</xsl:if> 
</xsl:otherwise> 
</xsl:choose> 
</xsl:template> 




--- 
David Goss, M.A. 
Technical Writer, Laboratory Division 
Frontier Science & Technology Research Foundation 
4033 Maple Road 
Amherst, NY 14226 
(716) 834-0900 x7218 

----- Original Message -----

From: "Thomas Schraitle" <[email protected]> 
To: [email protected] 
Sent: Tuesday, October 29, 2013 12:20:08 PM 
Subject: Re: [docbook-apps] Alt text not appearing in inlinemediaobject 

Hi David, 

Am Dienstag, 29. Oktober 2013, 11:52:20 schrieb David Goss: 
> I have the the following docbook 5 markup: 
> <para>Click the 
> <guibutton><inlinemediaobject><alt>Execute</alt><imageobject><imagedata 
> fileref="img/ldms/ldms_button_execute.png" 
> depth="1em"/></imageobject></inlinemediaobject> button.</guibutton></para> 
> 
> It is outputting the following HTML : 
> <p>Click the <span class="guibutton"><span class="inlinemediaobject"><img 
> src="img/ldms/ldms_button_execute.png" height="13"></span></span> 
> button.</p> 
> 
> I'm not sure why the alt text is not carrying over. Am I using the alt tag 
> incorrectly or is this a bug? I'm using webhelp docbook-xsl-ns-1.78.1 . 

Your DocBook markup is perfectly correct. But it seems, there is a deficiancy 
about the handling of inlinemediaobject in the DocBook stylesheets. 

I suspect the html/graphics.xsl file in the "imagedata" template (lines 1250 - 
1331). In this template rule, the "process.image" template is called and the 
"alt" parameter is passed. However, it is not checked against an 
inlinemediaobject with a possible alt element. 

I would propose this change: 

<xsl:call-template name="process.image"> 
<xsl:with-param name="alt"> 
<xsl:choose> 
<xsl:when test="ancestor::mediaobject/alt"> 
<xsl:apply-templates select="ancestor::mediaobject/alt"/> 
</xsl:when> 
<xsl:when test="ancestor::inlinemediaobject/alt"> 
<xsl:apply-templates select="ancestor::inlinemediaobject/alt"/> 
</xsl:when> 
<xsl:otherwise> 
<xsl:apply-templates 
select="$phrases[not(@role) or @role!='tex'][1]"/> 
</xsl:otherwise> 
</xsl:choose> 
</xsl:with-param> 
<xsl:with-param name="longdesc"> 
<xsl:call-template name="write.longdesc"> 
<xsl:with-param name="mediaobject" 
select="ancestor::imageobject/parent::*"/> 
</xsl:call-template> 
</xsl:with-param> 
</xsl:call-template> 


If you would like to give it a try, do the following: 

1. Create a customization layer if you haven't done yet. If you don't know 
how, read one of the following URLs: 
http://www.sagehill.net/docbookxsl/CustomMethods.html#CustomizationLayer 
http://doccookbook.sf.net/html/en/dbc.common.dbcustomize.html 

2. Copy the "imagedata" template from the original html/graphics.xsl template 
into your customization layer. 

3. Search for the xsl:call-template line and apply the above "patch" (add the 
2nd xsl:when test). 

4. Transform your DocBook document and use your customization layer. 


> I did see this page in the XSL Guide: 
> http://www.sagehill.net/docbookxsl/AltText.html 
> But it looks to be for Docbook4. 

You can use this also in DocBook 5 as long as it is valid. 


-- 
Gruß/Regards 
Thomas Schraitle 


--------------------------------------------------------------------- 
To unsubscribe, e-mail: [email protected] 
For additional commands, e-mail: [email protected] 


Reply via email to