Jump to content
luap

Count cmd in a specific task for xref

Recommended Posts

I am trying to create an xref and cannot get the correct step number in the reference. I am pointing at the cmd tag because when I point at the step tag, it does not link to a page number. The below code (second set) counts all the preceding cmd tags in the whole document. Is there a way to count only the cmd tags in the current task/topic? I have tried creating variables (shown directly below), and this gets me to the correct task number in the document. From there, I could not get it to count the preceding cmd tags in the task in the CurrTask position. Any help on this is greatly appreciated. <xsl:variable name="Tasks" select="count(preceding::*[contains(@class, ' task/steps ')])" /> <xsl:variable name="CurrTask" select="$Tasks +1" /> <xsl:template match="*[contains(@class, ' task/cmd ')]" mode="retrieveReferenceTitle"><xsl:call-template name="insertVariable"> <xsl:with-param name="theVariableID" select="'Step'"/> <xsl:with-param name="theParameters"> <number> <xsl:value-of select="count(preceding::*[contains(@class, ' task/cmd ')]) + 1"/></number></xsl:with-param> </xsl:call-template> </xsl:template> Alternatively, when I point the xref at the step, and insert <fo:inline id="{@id}"/> and <xsl:call-template name="insertPageNumberCitation"/> at the end of the template, it gives me the page number of the actual xref, not the page number of the step it is pointing at. Thank you.

Share this post


Link to post
Share on other sites

DITA eh? All the element ids are stored in a key called "key_anchor". This is defined in links.xsl. Make sure your step actually has an id attribute in the MERGED XML. This sounds silly but if this is running through the DITA toolkit, strange things can happen.You want to put the <fo:inline> in your step template. task-elements.xsl

[size="1"]<xsl:template match="*[contains(@class, ' task/steps ')]/*[contains(@class, ' task/step ')]">[/size][size="1"]<fo:inline id="{@id}"/>[/size]

Then in your xref template, you should find the matching id in the key_anchor. Now you are truly pointing at the step and you get the page number or get it's count from the element "steps". Something like this:

[size="1"]<fo:inline color="blue">[/size][size="1"]<xsl:for-each select="key('key_anchor',@href)">[/size][size="1"]<!-- Found the step with the matching id -->[/size][size="1"]<fo:basic-link internal-destination="{@id}">[/size][size="1"]<!-- Or count step from steps -->[/size][size="1"]<xsl:text>See page </xsl:text><fo:page-number-citation ref-id="{$destination}"/>[/size][size="1"]</fo:basic-link>[/size][size="1"]</xsl:for-each>[/size][size="1"]</fo:inline>[/size]

Hope this helps!

Share this post


Link to post
Share on other sites

Well that posted incorrectly.Here it is again. --DITA eh? All the element ids are stored in a key called "key_anchor". This is defined in links.xsl. Make sure your step actually has an id attribute in the MERGED XML. This sounds silly but if this is running through the DITA toolkit, strange things can happen.You want to put the <fo:inline> in your step template. task-elements.xsl<xsl:template match="*[contains(@class, ' task/steps ')]/*[contains(@class, ' task/step ')]"><fo:inline id="{@id}"/>Then in your xref template, you should find the matching id in the key_anchor. Now you are truly pointing at the step and you get the page number or get it's count from the element "steps". Something like this:<fo:inline color="blue"><xsl:for-each select="key('key_anchor',@href)"><!-- Found the step with the matching id --><fo:basic-link internal-destination="{@id}"><!-- Or count step from steps --><xsl:text>See page </xsl:text><fo:page-number-citation ref-id="{$destination}"/></fo:basic-link></xsl:for-each></fo:inline>Hope this helps!

Share this post


Link to post
Share on other sites

OK one more try ...DITA eh?All the element ids are stored in a key called "key_anchor". This is defined in links.xsl.Make sure your step actually has an id attribute in the MERGED XML. This sounds silly but if this is running through the DITA toolkit, strange things can happen.You want to put the <fo:inline> in your step template. task-elements.xsl<xsl:template match="*[contains(@class, ' task/steps ')]/*[contains(@class, ' task/step ')]"><fo:inline id="{@id}"/>Then in your xref template, you should find the matching id in the key_anchor.Now you are truly pointing at the step and you get the page number or get it's count from the element "steps".Something like this:<fo:inline color="blue"><xsl:for-each select="key('key_anchor',@href)"><!-- Found the step with the matching id --><fo:basic-link internal-destination="{@id}"><!-- Or count step from steps --><xsl:text>See page </xsl:text><fo:page-number-citation ref-id="{$destination}"/></fo:basic-link></xsl:for-each></fo:inline>Hope this helps!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...