OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [docbook] Select chunk content from user.head.content template


Well, no, that logic seems backward to me. If the first child section is a chunk, then $is.chunk = 1 is true, so .//indexterm is used and selects all descendant indexterms, including those in the section chunks. Did that work for you?

Bob Stayton
Sagehill Enterprises
bobs@sagehill.net

--------------------------------------------------
From: "Olsen, Morten Engelhardt" <Morten_engelhardt.Olsen@atmel.com>
Sent: Wednesday, March 20, 2013 1:53 AM
To: "Bob Stayton" <bobs@sagehill.net>; <docbook@lists.oasis-open.org>
Subject: RE: [docbook] Select chunk content from user.head.content template

Thanks Bob, I never though of using the chunk template :P

The for-each selector ended up as

<xsl:for-each select=".//indexterm[$is.chunk= 1]
|(indexterm|*[not(self::section or self::book)]//indexterm)[$is.chunk = 0]">

same as yours, but excluding book nodes and reversed the is.chunk selector exclusions. Does this seem logical by you?

:: Morten Engelhardt Olsen
________________________________________
From: Bob Stayton [bobs@sagehill.net]
Sent: Tuesday, March 19, 2013 21:21
To: Olsen, Morten Engelhardt; docbook@lists.oasis-open.org
Subject: Re: [docbook] Select chunk content from user.head.content template

Hi Morten,
There is a utility template named "chunk" that can be used to test if a
given node is a chunk element.  You could use it to check the first child
section:

<xsl:variable name="chunk.children">
 <xsl:call-template name="chunk">
   <xsl:with-param name="node" select="section[1]"/>
 </xsl:call-template>
</xsl:variable>

The $chunk.children will have a value of 1 if that section is a chunk, or 0
otherwise.  Then you can use that in the select statement:

<xsl:for-each select=".//indexterm[$chunk.children = 0] |
                    (indexterm
|*[not(self::section)]//indexterm)[$chunk.children = 1]">

The select statement combines two parts that are mutually exclusive.
The first part selects all the indexterms, but qualifies them with a boolean
expression to exclude all of them if $chunk.children = 1.
The second part selects indexterms that are either immediate children of the current section, or a descendant of any child element that is not a section.
This part is qualified by the opposite boolean expression, so only one or
the other part is used.

I didn't test this, so let me know if it doesn't work for you. There might
be a glitch that I'm not seeing.

Bob Stayton
Sagehill Enterprises
bobs@sagehill.net

--------------------------------------------------
From: "Olsen, Morten Engelhardt" <Morten_engelhardt.Olsen@atmel.com>
Sent: Tuesday, March 19, 2013 11:14 AM
To: <docbook@lists.oasis-open.org>
Subject: [docbook] Select chunk content from user.head.content template

As you may or may not know, I have started on cleaning our internal
Microsoft Help Viewer 1.0 transformation up to a point where it is
releasable to the public. However, in this effort I have come across some
issues.

Some background;
The Microsoft HV1 format is the replacement for chm and hlp files. It is
based off xhtml with a set of header tags an some special magic. The set
of html and other content are zipped into a zip volume with the mshc
extension (Microsoft Help Collection or similar ☺). This file (called a
package) is accompanied by a manifest file with the extension msha. This
file can point to multiple packages, and this collection of packages is
called a book.

Now to my first found issue;
The header for a html file needs to contain a set of special meta tags.
This is what the help system uses to generate positional/relational
information, indexing and content description. Some of these tags needs to
contain information of the current chunk (e.g a set of <meta
name="Microsoft.Help.F1" content="myTopic" /> for all F1 content in the
current chunk). Currently we use indexterms with IDs to mark content for
F1 resolution, and the following template is called from
“user.head.content”:

<xsl:template name="mshelp3.help.f1">
     <xsl:for-each select="self::*//indexterm">
           <xsl:if test="@id">
                 <meta xmlns="http://www.w3.org/1999/xhtml";
name="Microsoft.Help.F1">
                       <xsl:attribute name="content">
                            <xsl:value-of select="@id" />
                       </xsl:attribute>
                 </meta>
           </xsl:if>
     </xsl:for-each>
</xsl:template>

However, the “self::*//indexterm” matches all indexterms below self, but
with a chunk depth of e.g.4, the content of self may be chunked into
separate files. So how can I select the content of only the current chunk
from “user.head.content”? The current situation is that F1 ids are flowing
up in the chunking tree and usually hits on a higher level than were the
actual section exists.


Morten Engelhardt Olsen
Software Engineer / Tools Group / Atmel Corporation
Tel: (+47) 930 94 593

The information contained in this email message may be privileged,
confidential and/or protected from unauthorized disclosure. If you are not
the intended recipient, any dissemination, distribution or copying is
strictly prohibited. Please immediately notify the sender by reply if you
received this email in error. Thank you for your cooperation.





[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]