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

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

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


Subject: Re: [docbook-apps] how to add a style attribute inside a P element? (Kindle insanity!)


Hi Robert,
The mechanism in the stylesheet that lets you customize class attributes can also be 
used to add other attributes such as style or width.  Most element templates include 
something like this:

<xsl:apply-templates select="." mode="class.attribute">

If not, then it has this:

<xsl:call-template name="common.html.attributes">

which in turn applies templates in mode="class.attribute".  The default template in 
that mode is in html/html.xsl:

<xsl:template match="*" mode="class.attribute">
  <xsl:param name="class" select="local-name(.)"/>
  <!-- permit customization of class attributes -->
  <!-- Use element name by default -->
  <xsl:attribute name="class">
    <xsl:apply-templates select="." mode="class.value">
      <xsl:with-param name="class" select="$class"/>
    </xsl:apply-templates>
  </xsl:attribute>
</xsl:template>

As you can see, that template generates an attribute whose name is "class" and whose 
value is determined using mode="class.value", which is the mode I usually advise 
people to customize when they need to change the class value for an element.

But you could expand this template to include additional <xsl:attribute> elements to 
generate additional attributes, such as style or width.  Since this is a mode, you can 
write separate templates for each element that needs to generate different extra 
attributes, using the match attribute on the template to select a specific XPath 
pattern.  How you determine the values from your content is up to you.  As Nic 
suggests, role attribute could be used.

Bob Stayton
Sagehill Enterprises
bobs@sagehill.net


----- Original Message ----- 
From: "Nic Gibson" <nicg@corbas.net>
To: "Robert Nagle" <idiotprogrammer@gmail.com>
Cc: <docbook-apps@lists.oasis-open.org>
Sent: Wednesday, August 03, 2011 9:28 AM
Subject: Re: [docbook-apps] how to add a style attribute inside a P element? (Kindle 
insanity!)


Hi Robert

I've been doing some of the same things you are doing here. I'm not convinced that are 
right about the Kindle indenting (I'm looking at some titles I worked on and we've 
used css classes for the indent and it's working just fine).

For the width, I postprocess. I'm working on a set of scripts for a client at the 
moment that takes an EPUB and does some mappings for the Kindle. I may be able to make 
them available to you (the client is often happy for code written for them to be put 
into the public domain).

There is no reason why you couldn't do both the things you are discussing here using a 
customisation though. You could use a template that operates on role attributes 
perhaps.

nic

On 3 Aug 2011, at 12:47, Robert Nagle wrote:

> To add to my remarks:
>
> one common Kindle formatting example is to output
>
> to <p width=75"> or  <p width=-20">
>
> so it would be nice if we could have a general way to add an attribute
> like "width" in some cases.
>
> (I don't know if it would validate as XHTML though).
>
> rj
>
> On Wed, Aug 3, 2011 at 6:36 AM, Robert Nagle <idiotprogrammer@gmail.com> wrote:
>> I'm outputting a lot of epub and frequently I need to massage the
>> output so that the epub can be converted into the Kindle format.
>>
>> One inherent problem with kindlegen is that it strips out most CSS
>> code and instead adds some formatting attributes inside individual
>> elements.
>>
>> One example. You cannot turn off indenting in Kindle unless you
>> hardcode something like <p style="text-indent:0">
>>
>> So I do post-processing, I would have to do a global search and replace:
>>
>>    Change <p class="no-indent"> to <p style="text-indent:0"> in all instances.
>>    Change <div class="caption"><p> to <div.caption><p
>> style="text-indent:0"> in all instances.
>>    Change <p class="pullquote"> to <p style="text-indent:0"> in all instances.
>>
>> I wouldn't even know how to get started to do this in customization layer.
>>
>> I've seen this discussion
>> http://markmail.org/search/?q=class.attribute&q=list%3Aorg.oasis-open.lists.docbook-apps#query:class.attribute%20list%3Aorg.oasis-open.lists.docbook-apps%20from%3A%22Bob%20Stayton%22+page:1+mid:7jfjygrqiz5pc7bs+state:results
>> where css.decoration is mentioned as well as custom class values
>> http://www.sagehill.net/docbookxsl/HtmlCustomEx.html#CustomClassValues
>>
>> I think the section on "custom class values" seems relevant, but I
>> can't follow the example.
>>
>> YOu would need to add a custom attribute to these elements (style) as
>> well as values (text-indent:0).
>>
>> Do you have an idea about how to attack this problem? Thanks.
>>
>> --
>> Robert Nagle
>> 6121 Winsome Ln #56C, Houston TX 77057-5581
>> (H) 713 893 3424/ (W) 832-251-7522 Carbon Neutral Since Jan 2010
>> http://www.robertnagle.info
>>
>
>
>
> -- 
> Robert Nagle
> 6121 Winsome Ln #56C, Houston TX 77057-5581
> (H) 713 893 3424/ (W) 832-251-7522 Carbon Neutral Since Jan 2010
> http://www.robertnagle.info
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
> For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org
>

Nic Gibson
Corbas Consulting
Digital Publishing Consultancy and Training
http://www.corbas.co.uk, +44 (0)7718 906817



---------------------------------------------------------------------
To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org





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