Hey,

        At 1 point it was an path 1 implementation. I can't recall what kind of 
a test suite it had then but its probably still worth a look. If you have 
trouble finding the code base for that time period drop me a line and I will 
see what I can do.

G


On 30 Jul 2012, at 17:28, shath...@e-z.net wrote:

> Gareth,
> 
> Thanks for the link.  Our first priority is to get additional functionality
> with XPath 1.0 and EXSLT functions.
> 
> I am interested in pursuing the XPath2 integration after our XalanC 1.11
> product is released at the end of summer.  I see this XPath2 integration
> to become XalanC 2.0.
> 
> Sincerely,
> Steven J. Hathaway
> GSoC 2012 mentor
> 
>> Hey Samuel,
>> 
>>      A long while ago I was one of the people who wrote Pathan (an XPath2
>> implementation on top of Xerces C). Its been replaced with XQilla now
>> (http://xqilla.sourceforge.net/HomePage). I expect its worth a look for
>> function implementations. We also had a thorough test suite which could
>> still be there / be of use.
>> 
>> Cheers,
>> 
>> G
>> 
>> 
>> On 30 Jul 2012, at 03:06, Steve Hathaway wrote:
>> 
>>> Samuel - GSOC 2012
>>> 
>>> You're doing good.
>>> 
>>> It looks like you understand the basics of the XPath function class that
>>> needs to be extended
>>> and customizing the appropriate execute() methods.
>>> 
>>> Here are some comments:: Ref: file OspXpathConvertDate.cpp from zip
>>> example.
>>> 
>>> YourXPathFunction::execute(
>>> XPathExecutionContext & executionContext,
>>> XalanNode *           context,  /*may not be needed*/
>>> const XObjectPtr      arg1,
>>> const XObjectPtr      arg2,
>>> const LocatorType *   locator   /*may not be needed*/
>>> ) const
>>> {
>>> CharVectorType  theFirstArg;
>>> char *          charFirstArg;
>>> CharVectorType  theSecondArg;
>>> char *          charSecondArg;
>>> 
>>> MemoryManager * theManager = executionContext.getMemoryManager();
>>> 
>>> theFirstArg = TranscodeToLocalCodePage(arg1->str());
>>> charFirstArg = theFirstArg.begin();
>>> 
>>> theSecondArg = TranscodeToLocalCodePage(arg2->str());
>>> charSecondArg = theSecondArg.begin();
>>> 
>>> /* NOTES
>>> *
>>> * TransCodeToLocalCodePage()
>>> *   creates a new instance of CharVectorType containing
>>> *   converted transformed Unicode to the host character set
>>> (ASCII/EBCDIC...)
>>> *
>>> * The CharVectorType.begin() method returns a pointer to the
>>> * null-terminated character string.  This string is owned by the
>>> CharVectorType
>>> * class.  This CharVectorType class is a local variable with local
>>> scope.
>>> * The allocation for CharVectorType will be properly destroyed when the
>>> * execute() method returns.
>>> *
>>> * You should not access the m_data storage variable directly, but
>>> instead
>>> * use the access method begin() to ensure a proper address.
>>> *
>>> * Note also that XalanDOMString may not be what you want.  Its native
>>> * character storage is 16-bit characters (UTF-16) encoding.
>>> *
>>> * The above sample I have shown here will give you standard 'C' strings
>>> * extracted from the XPath function arguments in a safe way.
>>> *
>>> * The XalanDOMString class does know how to import data from (char *)
>>> * strings.
>>> */
>>> 
>>> char * charResult;
>>> charResult = someFunction(...) // returning a pointer to type (char *);
>>> 
>>> // The following creates a XalanDOMString and initializes it with
>>> charResult.
>>> // Declaring XalanDOMString as a local instance, it will be destroyed
>>> when
>>> // the execute method exits.
>>> 
>>> XalanDOMString theResult(charResult);
>>> 
>>> // You may need to free the memory associated with the charResult
>>> pointer
>>> // before you return.  After charResult is saved in a XalanDOMString,
>>> you
>>> // should be able to release owhership of the (char *) pointer and free
>>> the
>>> // (char *) allocation.
>>> 
>>> free(charResult);  // or program specific equivalent.
>>> 
>>> // The execution.GetXObjectFactory() creates a XObjectPtr to data owned
>>> // by the XObjectFactory.  This content is returned to the XPath
>>> // interpreter execution context.
>>> 
>>> return executionContext.getXObjectFactory().createString(theResult);
>>> 
>>> }
>>> 
>>> /*
>>> * Create an error reporter
>>> */
>>> const XalanDOMString &
>>> YourXPathFunction::getError(XalanDOMString & theResult) const
>>> {
>>> return XalanMessageLoader::getMessage(
>>>   theResult,
>>>   XalanMessages::FunctionTakesTwoArguments_1Param,
>>>   "name of you XPath Function");
>>> }
>>> 
>>> /* NOTE:
>>> * The example error reporter.
>>> * The XalanMessageLoader::getMessage(...) prepares a standard message
>>> * showing theResult, "The function '(0)' requires two arguments."
>>> * with '(0)' replaced with "name of your XPath Function");
>>> *
>>> * If you need messages that are not in the NLS library, we can create
>>> * new message templates and put them into the NLS library.
>>> *
>>> * FunctionTakesTwoArguments_1Param is an address to the NLS string:
>>> * "The function '(0)' requires two arguments."
>>> */
>>> 
>>> 
>>> Sincerely,
>>> Steven J. Hathaway
>>> 
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: xalan-dev-unsubscr...@xml.apache.org
>>> For additional commands, e-mail: xalan-dev-h...@xml.apache.org
>>> 
>>> 
>> 
>> --
>> Gareth Reakes, CTO         WE7 - Great Music, Free
>> +44-20-7117-0809                    http://www.we7.com
>> 
>> “The music business is a cruel and shallow money trench, a long plastic
>> hallway where thieves and pimps run free, and good men die like dogs.
>> There's also a negative side. “
>> - Hunter S. Thompson
>> 
>> 
>> 
>> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: xalan-dev-unsubscr...@xml.apache.org
> For additional commands, e-mail: xalan-dev-h...@xml.apache.org
> 
> 

-- 
Gareth Reakes, CTO         WE7 - Great Music, Free
+44-20-7117-0809                    http://www.we7.com

“The music business is a cruel and shallow money trench, a long plastic hallway 
where thieves and pimps run free, and good men die like dogs. There's also a 
negative side. “
- Hunter S. Thompson



Reply via email to