Thanks, Bob! This is working like a charm in both XEP and Antenna House!
Best regards,
--Scott
Bob Stayton wrote:
Well, this is more complicated than
it should be, it seems.
That customization does work for me
when I process with xep.extensions=1 and XEP 4.13. I get this in the
index:
Index
T
TEST, 1, 4
TEST2, 2
TEST3, 3
When xep.extensions=1, indexterms
are handled as a special case in the stylesheet because of the
extensions that XEP provides for collapsing duplicate page numbers and
creating ranges of pages. So there is no comparing XEP with other FO
processors when it comes to indexterms.
My customization should work in
Antenna House, but there are two bugs in the template named
info.reference which is used when handling indexterms inside info
elements. That template comes into play for non-XEP index processing,
that is, when xep.extensions = 0.
This customization of info.reference
fixes the problem in Antenna House. I added ancestor::mediaobject to
the list for the variable named target since it was missing, and I
changed the [1] predicate to [position() = last()], because when
ancestor lists are placed in parens, they are converted to document
order rather than most recent ancestor order.
<xsl:template
name="info.reference">
<!-- This is not perfect. It doesn't treat indexterm inside info
element as a range covering whole parent of info.
It also not work when there is no ID generated for parent
element. But it works in the most common cases. -->
<xsl:param name="scope" select="."/>
<xsl:param name="role" select="''"/>
<xsl:param name="type" select="''"/>
<xsl:variable name="target"
select="(ancestor::appendix|ancestor::article|ancestor::bibliography|ancestor::book|
ancestor::chapter|ancestor::glossary|ancestor::part|ancestor::preface|
ancestor::refentry|ancestor::reference|ancestor::refsect1|ancestor::refsect2|
ancestor::refsect3|ancestor::refsection|ancestor::refsynopsisdiv|
ancestor::sect1|ancestor::sect2|ancestor::sect3|ancestor::sect4|ancestor::sect5|
ancestor::section|ancestor::setindex|ancestor::set|ancestor::sidebar|ancestor::mediaobject)[&scope;]"/>
<xsl:variable name="id">
<xsl:call-template name="object.id">
<xsl:with-param name="object" select="$target[position() =
last()]"/>
</xsl:call-template>
</xsl:variable>
<fo:basic-link internal-destination="{$id}"
xsl:use-attribute-sets="index.page.number.properties">
<fo:page-number-citation ref-id="{$id}"/>
</fo:basic-link>
</xsl:template>
----- Original Message -----
Sent: Tuesday, September 30, 2008
4:07 PM
Subject: Re: [docbook-apps]
Incorrect page numbers in index for indexterms within mediaobjects?
> Thanks, Bob.
>
> Unfortunately, these are all still resulting in the same page
numbers in
> the index. I also tried with Antenna House, and have the same
result.
>
> --Scott
>
> Bob Stayton wrote:
>> Hi Scott,
>> Well, looking at the template matching mediaobject in
fo/graphics.xsl, the
>> content of its objectinfo element is not processed, so no
inline markers are
>> laid down for those indexterms. The indexterms are found
during the global
>> sweep of indexterms to build the index, but there will be no
target for
>> those index entries to link to in the body of the document.
>>
>> This customization of the mediaobject template works with
XEP. I can't get
>> PDF images to work with FOP 0.95 at all, so I can't say if it
works for
>> that. In this customization, I added a keep-together property
for the
>> container block, and I added an apply-templates to the
indexterms so their
>> markers will be included in the block container.
>>
>>
>> <xsl:template match="mediaobject|mediaobjectco">
>>
>> <xsl:variable name="olist"
select="imageobject|imageobjectco
>> |videoobject|audioobject
>> |textobject"/>
>>
>> <xsl:variable name="object.index">
>> <xsl:call-template name="select.mediaobject.index">
>> <xsl:with-param name="olist" select="$olist"/>
>> <xsl:with-param name="count" select="1"/>
>> </xsl:call-template>
>> </xsl:variable>
>>
>> <xsl:variable name="object" select="$olist[position() =
$object.index]"/>
>>
>> <xsl:variable name="align">
>> <xsl:value-of
select="$object/descendant::imagedata[@align][1]/@align"/>
>> </xsl:variable>
>>
>> <xsl:variable name="id">
>> <xsl:call-template name="object.id"/>
>> </xsl:variable>
>>
>> <fo:block id="{$id}"
keep-together.within-column="always">
>> <xsl:if test="$align != '' ">
>> <xsl:attribute name="text-align">
>> <xsl:value-of select="$align"/>
>> </xsl:attribute>
>> </xsl:if>
>>
>> <xsl:apply-templates select="objectinfo/indexterm"/>
>> <xsl:apply-templates select="$object"/>
>> <xsl:apply-templates select="caption"/>
>> </fo:block>
>> </xsl:template>
>>
>> Bob Stayton
>> Sagehill Enterprises
>> bobs@sagehill.net
>>
>>
>> ----- Original Message -----
>> From: "Scott Hudson" <scott.hudson@flatironssolutions.com>
>> To: "Bob Stayton" <bobs@sagehill.net>
>> Cc: "Hudson, Scott" <Scott.Hudson@flatironssolutions.com>; "John Brown"
>> <johnbrown105@hotmail.com>; <docbook-apps@lists.oasis-open.org>
>> Sent: Tuesday, September 30, 2008 2:44 PM
>> Subject: Re: [docbook-apps] Incorrect page numbers in index
for indexterms
>> within mediaobjects?
>>
>>
>>> Hi Bob,
>>>
>>> oddly enough, when I turn the xep.extensions on, I get
that same set of
>>> errors. If I process the file with fop1.extensions on and
xep.extensions
>>> off, the XEP produces the file and the index entries all
pointing to the
>>> title page of the chapter...
>>>
>>> If I process using FOP, I get the index as well, but the
PDFs aren't
>>> rendered on the actual pages.
>>>
>>> --Scott
>>>
>>> Bob Stayton wrote:
>>>> Hi Scott,
>>>> I tried processing your chapter, and XEP reports:
>>>>
>>>> [error] no entries for index key 'TEST'
>>>> [error] no entries for index key 'TEST2'
>>>> [error] no entries for index key 'TEST3'
>>>>
>>>> and there are no page numbers in the index. Did you
do some
>>>> customization
>>>> regarding indexterms inside objectinfo? I'm not
getting any index
>>>> markers
>>>> at all for those indexterms.
>>>>
>>>> Bob Stayton
>>>> Sagehill Enterprises
>>>> bobs@sagehill.net
>>>>
>>>>
>>>> ----- Original Message -----
>>>> From: "Scott Hudson" <scott.hudson@flatironssolutions.com>
>>>> To: "Scott Hudson" <scott.hudson@flatironssolutions.com>
>>>> Cc: "John Brown" <johnbrown105@hotmail.com>;
>>>> <docbook-apps@lists.oasis-open.org>
>>>> Sent: Tuesday, September 30, 2008 1:23 PM
>>>> Subject: [docbook-apps] Incorrect page numbers in
index for indexterms
>>>> within mediaobjects?
>>>>
>>>>
>>>>> Folks,
>>>>>
>>>>> Now that I can include external pages in my
document, I want to be able
>>>>> to
>>>>> add indexterms to them. When I generate the index,
however, the page
>>>>> numbers aren't quite right. These should each end
up on a separate page.
>>>>> Instead, I get:
>>>>> T
>>>>> TEST, 144, 144
>>>>> TEST2, 144
>>>>> TEST3, 144
>>>>>
>>>>> Here's my source:
>>>>> <chapter>
>>>>> <title>Case Study</title>
>>>>> <mediaobject>
>>>>>
>>>>>
<objectinfo><indexterm><primary>TEST</primary></indexterm></objectinfo>
>>>>> <imageobject>
>>>>> <imagedata
fileref="casestudy_001.pdf" scalefit="1"
>>>>> width="100%" contentdepth="100%" format="PDF"/>
>>>>> </imageobject>
>>>>> </mediaobject>
>>>>> <para/>
>>>>> <mediaobject>
>>>>>
>>>>>
<objectinfo><indexterm><primary>TEST2</primary></indexterm></objectinfo>
>>>>> <imageobject>
>>>>> <imagedata
fileref="casestudy_002.pdf" scalefit="1"
>>>>> width="100%" contentdepth="100%" format="PDF"/>
>>>>> </imageobject>
>>>>> </mediaobject>
>>>>> <para/>
>>>>> <mediaobject>
>>>>>
>>>>>
<objectinfo><indexterm><primary>TEST3</primary></indexterm></objectinfo>
>>>>> <imageobject>
>>>>> <imagedata
fileref="casestudy_003.pdf" scalefit="1"
>>>>> width="100%" contentdepth="100%" format="PDF"/>
>>>>> </imageobject>
>>>>> </mediaobject>
>>>>> <para/>
>>>>> <mediaobject>
>>>>>
>>>>>
<objectinfo><indexterm><primary>TEST</primary></indexterm></objectinfo>
>>>>> <imageobject>
>>>>> <imagedata
fileref="casestudy_004.pdf" scalefit="1"
>>>>> width="100%" contentdepth="100%" format="PDF"/>
>>>>> </imageobject>
>>>>> </mediaobject>
>>>>> </chapter>
>>>>>
>>>>> Ideas?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> --Scott
>>>>>
>>>>> Scott Hudson wrote:
>>>>>> Thanks, John! I had to add an additional
template to contain the
>>>>>> chapter, but otherwise works like a charm!
>>>>>>
>>>>>> <xsl:template
match="chapter[@role='external-doc']">
>>>>>> <xsl:apply-imports />
>>>>>> </xsl:template>
>>>>>>
>>>>>> <xsl:template
match="chapter[@role='external-doc']/mediaobject">
>>>>>> <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
>>>>>> font-size="0"
>>>>>> line-height="0"
break-before="page"
>>>>>> break-after="page"
start-indent="0" end-indent="0">
>>>>>> <xsl:apply-imports/>
>>>>>> </fo:block>
>>>>>> </xsl:template>
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> --Scott
>>>>>>
>>>>>>
>>>>>> John Brown wrote:
>>>>>>> Scott Hudson <scott.hudson <at>
flatironssolutions.com> writes:
>>>>>>>
>>>>>>>> John Brown and Jirka Kosek both had
good suggestions to split the
>>>>>>>> case
>>>>>>>> study into individual pages using
pdftk and then use mediaobject.
>>>>>>>>
>>>>>>>> This approach seems to work pretty
well, although the generated index
>>>>>>>> entries don't seem to point to the
same page where the image is
>>>>>>>> rendered
>>>>>>>> (pretty close, though).
>>>>>>>>
>>>>>>> Never used indexterm, so I have no idea.
>>>>>>>
>>>>>>> <! -- Docbook code snipped -->
>>>>>>>
>>>>>>>> The biggest problem I'm having now is
that the image doesn't appear
>>>>>>>> to
>>>>>>>> scale the entire width of the page.
I'm using XEP, but FOP 0.95 does
>>>>>>>> the
>>>>>>>> same (or worse).
>>>>>>>>
>>>>>>>> What am I missing? I've tried
width="100%" but that also errors. I've
>>>>>>>> also tried setting the
default.image.width param, but that doesn't
>>>>>>>> seem
>>>>>>>> to work either.
>>>>>>>>
>>>>>>>> Any ideas?
>>>>>>>>
>>>>>>>> Thanks and best regards,
>>>>>>>>
>>>>>>>> --Scott
>>>>>>> DocBook is making the image fit within the
margins. The answer is
>>>>>>> to define custom page masters with left
and right margins = 0.
>>>>>>> Maybe you will also want to suppress the
normal DocBook headers
>>>>>>> and footers with titles and page numbers.
>>>>>>>
>>>>>>> The following code allows you to write
>>>>>>> <appendix role='external-doc'>
>>>>>>> <mediaobject>
>>>>>>> ...
>>>>>>> </mediaobject>
>>>>>>> <mediaobject>
>>>>>>> ...
>>>>>>> </mediaobject>
>>>>>>> <!-- etc. -->
>>>>>>> </appendix>
>>>>>>>
>>>>>>> If your external page is the same size as
your DocBook page, it will
>>>>>>> take up the entire page.
>>>>>>>
>>>>>>> <xsl:template
name="user.pagemasters">
>>>>>>> <fo:simple-page-master
master-name="back-odd-body-only"
>>>>>>>
page-width="{$page.width}"
>>>>>>>
page-height="{$page.height}"
>>>>>>> margin-top="0"
>>>>>>>
margin-bottom="0"
>>>>>>> margin-left="0"
>>>>>>>
margin-right="0">
>>>>>>> <xsl:if test="$axf.extensions !=
0">
>>>>>>> <xsl:call-template
name="axf-page-master-properties">
>>>>>>> <xsl:with-param
>>>>>>>
name="page.master">back-odd-body-only</xsl:with-param>
>>>>>>> </xsl:call-template>
>>>>>>> </xsl:if>
>>>>>>> <fo:region-body margin-bottom="0"
>>>>>>> margin-top="0"
>>>>>>>
column-gap="{$column.gap.back}"
>>>>>>>
column-count="{$column.count.back}">
>>>>>>> </fo:region-body>
>>>>>>>
>>>>>>> </fo:simple-page-master>
>>>>>>>
>>>>>>> <fo:simple-page-master
master-name="back-even-body-only"
>>>>>>>
page-width="{$page.width}"
>>>>>>>
page-height="{$page.height}"
>>>>>>> margin-top="0"
>>>>>>>
margin-bottom="0"
>>>>>>> margin-left="0"
>>>>>>>
margin-right="0">
>>>>>>> <xsl:if test="$axf.extensions !=
0">
>>>>>>> <xsl:call-template
name="axf-page-master-properties">
>>>>>>> <xsl:with-param
>>>>>>>
name="page.master">back-even-body-only</xsl:with-param>
>>>>>>> </xsl:call-template>
>>>>>>> </xsl:if>
>>>>>>> <fo:region-body margin-bottom="0"
>>>>>>> margin-top="0"
>>>>>>>
column-gap="{$column.gap.back}"
>>>>>>>
column-count="{$column.count.back}">
>>>>>>> </fo:region-body>
>>>>>>> </fo:simple-page-master>
>>>>>>>
>>>>>>> <fo:page-sequence-master
master-name="back-body-only">
>>>>>>>
<fo:repeatable-page-master-alternatives>
>>>>>>>
<fo:conditional-page-master-reference master-reference="blank"
>>>>>>>
>>>>>>> blank-or-not-blank="blank"/>
>>>>>>>
<fo:conditional-page-master-reference
>>>>>>> master-reference="back-first"
>>>>>>>
page-position="first"/>
>>>>>>>
<fo:conditional-page-master-reference
>>>>>>> master-reference="back-odd-body-only"
>>>>>>>
odd-or-even="odd"/>
>>>>>>>
<fo:conditional-page-master-reference odd-or-even="even">
>>>>>>> <xsl:attribute
name="master-reference">
>>>>>>> <xsl:choose>
>>>>>>> <xsl:when
test="$double.sided
>>>>>>>
!=0">back-even-body-only</xsl:when>
>>>>>>>
<xsl:otherwise>back-odd-body-only</xsl:otherwise>
>>>>>>> </xsl:choose>
>>>>>>> </xsl:attribute>
>>>>>>>
</fo:conditional-page-master-reference>
>>>>>>>
</fo:repeatable-page-master-alternatives>
>>>>>>> </fo:page-sequence-master>
>>>>>>>
>>>>>>> </xsl:template>
>>>>>>>
>>>>>>> <xsl:template
name="select.user.pagemaster">
>>>>>>> <xsl:param name="element"/>
>>>>>>> <xsl:param name="pageclass"/>
>>>>>>> <xsl:param
name="default-pagemaster"/>
>>>>>>>
>>>>>>> <!-- Return my customized title page
master name if for titlepage,
>>>>>>> otherwise return the default -->
>>>>>>>
>>>>>>> <xsl:choose>
>>>>>>> <xsl:when test="@role =
'external-doc'">
>>>>>>> <xsl:value-of
select="'back-body-only'" />
>>>>>>> </xsl:when>
>>>>>>> <xsl:otherwise>
>>>>>>> <xsl:value-of
select="$default-pagemaster"/>
>>>>>>> </xsl:otherwise>
>>>>>>> </xsl:choose>
>>>>>>> </xsl:template>
>>>>>>>
>>>>>>> <xsl:template
>>>>>>>
match="d:appendix[@role='external-doc']/d:mediaobject">
>>>>>>> <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
>>>>>>> font-size="0"
>>>>>>> line-height="0" break-before="page"
>>>>>>> break-after="page"
start-indent="0" end-indent="0">
>>>>>>> <xsl:apply-imports/>
>>>>>>> </fo:block>
>>>>>>> </xsl:template>
>>>>>>>
>>>>>>> I am not sure if the back-body-even-only
and back-body-odd-only
>>>>>>> page masteres are strictly necessary.
>>>>>>>
>>>>>>> See the following thread:
>>>>>>> http://thread.gmane.org/gmane.text.docbook.apps/19707
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
>>>>>>> For
additional commands, e-mail:
>>>>>>> docbook-apps-help@lists.oasis-open.org
>>>>>>>
>>>>>>>
>>>>>>
---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
>>>>>> For additional
commands, e-mail: docbook-apps-help@lists.oasis-open.org
>>>>>>
>>>>>>
>>>>>
---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
>>>>> For additional
commands, e-mail: docbook-apps-help@lists.oasis-open.org
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
---------------------------------------------------------------------
>>> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
>>> For additional commands,
e-mail: docbook-apps-help@lists.oasis-open.org
>>>
>>>
>>>
>>
>>
>
>
>
---------------------------------------------------------------------
> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
> For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org
>
>
>
|