Dear Tclers,

I am working on creating a Tcl extension to James Clark's XT XSL processor,
using TclBlend.

This seems to boil down to being able to access the Tcl interpreter via a
static public class.  The trouble is, there doesn't appear to be a
static class
that refers to the main Tcl interpreter in Java.  However, I notice in
the source
code (yes, I UTSL'd) that an Interp object is created to wrap around the pointer
to the C Tcl_Interp structure and that gets squirreled away in a
variable of the
Interp class.  I figure that all I need is a static class that returns that
object.

Perhaps an example would illustrate what I'm trying to do.

Here is a XSL stylesheet.  XT provides a mechanism to callback into a
public static
Java class by referring to that class using a namespace that refers to a
UIR prefixed
by "http://www.jclark.com/xt/java/".  In an XSL template you then invoke
a method
of that class by referring to the XML namespace.

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"
  xmlns:tcl="http://www.jclark.com/xt/java/tcl.lang.Interp"   <!--
declare tcl namespace -->
  xmlns="http://www.w3.org/TR/REC-html40"
  result-ns="">

<xsl:template match="/">
  <html>
    <xsl:if test="function-available('tcl:eval')">  <!-- use the tcl
namespace -->
      <p><xsl:value-of select='tcl:eval("clock format [clock seconds]")'/></p>
    </xsl:if>
  </html>
</xsl:template>

</xsl:stylesheet>

This doesn't work because tcl.lang.Interp is not a static class.
If there were a public static class, say tcl.lang.Interp.getInterp, that just
referred to the main interpreter then my example would be:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/XSL/Transform/1.0"
  xmlns:tcl="http://www.jclark.com/xt/java/tcl.lang.Interp.getInterp"
  xmlns="http://www.w3.org/TR/REC-html40"
  result-ns="">

<xsl:template match="/">
  <html>
    <xsl:if test="function-available('tcl:eval')">
      <p><xsl:value-of select='tcl:eval("clock format [clock seconds]")'/></p>
      <p><xsl:value-of select='tcl:eval('set a "XSL Rules")'/></p>
      <p><xsl:value-of select='tcl:getVar('a")'/></p>
    </xsl:if>
  </html>
</xsl:template>

</xsl:stylesheet>

I think that would work.

Any chance of having that public static class added to TclBlend?

Cheers,
Steve Ball

----------------------------------------------------------------
The TclJava mailing list is sponsored by WebNet Technologies.
To subscribe:    send mail to [EMAIL PROTECTED]  
                 with the word SUBSCRIBE as the subject.
To unsubscribe:  send mail to [EMAIL PROTECTED] 
                 with the word UNSUBSCRIBE as the subject.
To send to the list, send email to '[EMAIL PROTECTED]'. 
A list archive is at: http://www.findmail.com/listsaver/tcldallas/

Reply via email to