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: xsl & unix functions


Thanks for your insights!

> * Jirka Kosek <wvexn@xbfrx.pm> [2005-08-24 18:14:47 +0200]:
> Sam Steingold wrote:
>
>> 1. this works, but is not too good because this is HTML-specific.

on a second thought, this is not an issue.

>>    I want the element wrapped in <ulink> and then XSL re-applied.
>>    (to avoid infinite recursion, one would have to strip 'role="unix"'
>>    from the function element before re-application)
>
> There is one easy way how to implement this by misusing profiling
> stylesheets (this is possible because internally profiling stylesheets
> does two passes over input document). Just use profile-docbook.xsl

I have huge documents.  does this mean twice the processing time?

> instead of docbook.xsl and put something like this into customization
> layer:
>
> <xsl:template match="function[@role='unix']" mode="profile">
>    <ulink url="{$unix.top}/functions/{.}">
>      <xsl:copy-of select="."/>
>    </ulink>
> </xsl:template>

does this avoid infinite recursion?

>> 3. <filename role="unix">sys/socket.h</filename>
>>    must be rendered with a link to
>>    "$unix.top"/basedefs/syssocket.h.html
>>    i.e., I need to strip "/" from "sys/socket.h"?
>>    also, I want it to be rendered as if it were written
>>    <filename>&lt;sys/socket.h&gt;</filename>
>>    (but I do not want to have to enter the &lt;/&gt; inside <filename>)
>
> Use same trick as above:
>
> <xsl:template match="filename[@role='unix']" mode="profile">
>    <ulink url="{$unix.top}/basedefs/{string-after(., '/')}">
>      <xsl:copy>
>        <xsl:copy-of select="@*"/>
>        <xsl:text>&lt;</xsl:text>
>        <xsl:apply-templates select="node()"/>
>        <xsl:text>></xsl:text>
>      </xsl:copy>
>    </ulink>
> </xsl:template>

is there a way to write
<xsl:apply-templates>
 <xsl:text>&lt;</xsl:text>
 <xsl:copy-of select="@*"/>
 <xsl:text>&gt;</xsl:text>
</xsl:apply-templates>


more processing:

1. how to handle
<command role="unix">make
  foo</command>
   and
<command role="unix">make foo</command>

is this supposed to work?

<xsl:template match="command[@role='unix']">
 <a class="{@role}" href="{$unix.top}utilities/{substring-before(.,'\s')}.html">
  <xsl:apply-imports/>
</a></xsl:template>

(note regexp as the second argument to substring-before)

2. db_create --> ..../api_c/db_class.html
   db_env_create --> ..../api_c/env_class.html
   db_sequence_create --> ..../api_c/seq_class.html
   DB->set_bt_prefix --> ..../api_c/db_set_bt_prefix.html
   DB_ENV->set_encrypt --> ..../api_c/env_set_encrypt.html
   DB_MPOOLFILE->set_clear_len --> ..../api_c/memp_set_clear_len.html
   DB_SEQUENCE->set_cachesize --> ..../api_c/seq_set_cachesize.html
   DB_TXN->prepare --> ..../api_c/txn_prepare.html

how do I handle this?!
there are a handful (5) things like db_create above.
there are a handful (6) things like DB_ENV above.
there are dozens functions under each or DB_ENV, DB_TXN &c.
thus: I need a transformation like this:

(let ((dict (make-hash-table :test 'equal
                :initial-contents '(("db_create" . "db_class")
                                    ("db_env_create" . "env_class")
                                    ("db_sequence_create" . "seq_class")
                                    ("db_strerror" . "env_strerror")
                                    ("db_version" . "env_version")
                                    ("DB_LOGC" . "logc")
                                    ("DB_TXN" . "txn")
                                    ("DB_ENV" . "env")
                                    ("DB_SEQUENCE" . "seq")
                                    ("DB" . "db")
                                    ("DB_MPOOLFILE" . "memp")))))
   (defun function-name-to-html (fn)
     (let ((pos (search "-&gt;" fn)))
       (if pos
           (concatenate 'string (gethash (substring fn 0 pos) dict)
                        "_" (substring fn (+ pos 5)))
           (or (gethash fn dict) fn)))))

<xsl:template match="function[@role='bdb']">
 <a class="{@role}" href="{$bdb.top}api_c/{function-name-to-html(.)}.html"/>
  <xsl:apply-imports/>
</a></xsl:template>


Thanks again!

-- 
Sam Steingold (http://www.podval.org/~sds) running w2k
<http://www.savegushkatif.org> <http://www.camera.org>
<http://www.iris.org.il> <http://www.memri.org/> <http://ffii.org/>
Democrats, get out of my wallet! Republicans, get out of my bedroom!



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