xquery/XQuery__FunctionLibrary.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 02 Jul 2018 08:46:01 +0200
changeset 305 bad21c4f64bf
parent 296 ea3dbc023c80
permissions -rw-r--r--
Tagged Smalltalk/X 8.0.0

"{ Package: 'stx:goodies/xmlsuite/xquery' }"

"{ NameSpace: XQuery }"

Object subclass:#FunctionLibrary
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'XQuery-Functions'
!


!FunctionLibrary class methodsFor:'instance creation'!

forURI: uriString

    ^((self allSubclasses reject:[:cls|cls isAbstract])
        detect:[:cls|cls namespaceURI = uriString]
        ifNone:[^nil]) new

    "
        XQuery::FunctionLibrary forURI: 'http://www.w3.org/2005/xpath-functions'
    "

    "Created: / 01-12-2008 / 10:04:30 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

new
    ^ self basicNew initialize.

    "Created: / 01-12-2008 / 11:29:34 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!FunctionLibrary class methodsFor:'function library API'!

namespaceURI

    ^self subclassResponsibility

    "Created: / 01-12-2008 / 10:02:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!FunctionLibrary class methodsFor:'testing'!

isAbstract

    ^self == XQuery::FunctionLibrary

    "Created: / 01-12-2008 / 10:04:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!FunctionLibrary class methodsFor:'utilities'!

smalltalkize: localName

    "transforms distinct-values into disticntValues"
    | input output minusFound|
    input := localName readStream.
    output := (String new: localName size) writeStream.
    minusFound := false.
    [ input atEnd ] whileFalse: [
        | c |
        c := input next.
        c = $- 
            ifTrue:
                [minusFound := true]
            ifFalse:
                [minusFound 
                    ifTrue:
                        [output nextPut:c asUppercase.
                        minusFound := false]
                    ifFalse:
                        [output nextPut:c]]].

    ^output contents

    "
        self smalltalkize: 'doc' 

        self smalltalkize: 'distinct-values'  
    "

    "Created: / 19-01-2009 / 20:46:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!FunctionLibrary methodsFor:'function library API'!

defaultPrefix

    ^self subclassResponsibility

    "Created: / 29-08-2007 / 09:37:28 / janfrog"
!

evaluate: function inContext:context withParameters: parameters forInterpreter: interpreter

    ^self 
        perform:(function smalltalkizedLocalName, 'InContext:withParameters:forInterpreter:') asSymbol
        with: context
        with: parameters
        with: interpreter

    "Created: / 01-12-2008 / 10:18:29 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

functionLocalNames

    "Should return a collection of function local names"
    ^self subclassResponsibility

    "Created: / 28-08-2007 / 23:06:40 / janfrog"
    "Modified: / 29-08-2007 / 09:29:15 / janfrog"
!

functions

    ^self functionLocalNames collect:
        [:localName|
        XQuery::ExternalFunction new
            setFunctionLibrary: self;
            setLocalName: localName;
            yourself]

    "Created: / 28-08-2007 / 23:06:40 / janfrog"
    "Modified: / 01-12-2008 / 10:15:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

namespaceURI
    ^ self class namespaceURI

    "Created: / 01-12-2008 / 10:02:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!FunctionLibrary class methodsFor:'documentation'!

version_SVN
    ^ '$Id$'
! !