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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
235
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/xmlsuite/xquery' }"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: XQuery }"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
Object subclass:#FunctionLibrary
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:''
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'XQuery-Functions'
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
!FunctionLibrary class methodsFor:'instance creation'!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
forURI: uriString
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    ^((self allSubclasses reject:[:cls|cls isAbstract])
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
        detect:[:cls|cls namespaceURI = uriString]
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
        ifNone:[^nil]) new
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
    "
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
        XQuery::FunctionLibrary forURI: 'http://www.w3.org/2005/xpath-functions'
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    "
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
    "Created: / 01-12-2008 / 10:04:30 / Jan Vrany <vranyj1@fel.cvut.cz>"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
new
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
    ^ self basicNew initialize.
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
    "Created: / 01-12-2008 / 11:29:34 / Jan Vrany <vranyj1@fel.cvut.cz>"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
! !
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
!FunctionLibrary class methodsFor:'function library API'!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
namespaceURI
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    ^self subclassResponsibility
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
    "Created: / 01-12-2008 / 10:02:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
! !
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
!FunctionLibrary class methodsFor:'testing'!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
isAbstract
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    ^self == XQuery::FunctionLibrary
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    "Created: / 01-12-2008 / 10:04:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
! !
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
!FunctionLibrary class methodsFor:'utilities'!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
smalltalkize: localName
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
    "transforms distinct-values into disticntValues"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
    | input output minusFound|
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    input := localName readStream.
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
    output := (String new: localName size) writeStream.
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    minusFound := false.
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
    [ input atEnd ] whileFalse: [
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
        | c |
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
        c := input next.
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
        c = $- 
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
            ifTrue:
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
                [minusFound := true]
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
            ifFalse:
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
                [minusFound 
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
                    ifTrue:
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
                        [output nextPut:c asUppercase.
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
                        minusFound := false]
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
                    ifFalse:
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
                        [output nextPut:c]]].
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
    ^output contents
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    "
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
        self smalltalkize: 'doc' 
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
        self smalltalkize: 'distinct-values'  
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
    "
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    "Created: / 19-01-2009 / 20:46:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
! !
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
!FunctionLibrary methodsFor:'function library API'!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
defaultPrefix
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    ^self subclassResponsibility
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    "Created: / 29-08-2007 / 09:37:28 / janfrog"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
241
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
    95
evaluate: function inContext:context withParameters: parameters forInterpreter: interpreter
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
    96
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
    97
    ^self 
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
    98
        perform:(function smalltalkizedLocalName, 'InContext:withParameters:forInterpreter:') asSymbol
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
    99
        with: context
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
   100
        with: parameters
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
   101
        with: interpreter
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
   102
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
   103
    "Created: / 01-12-2008 / 10:18:29 / Jan Vrany <vranyj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
   104
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
   105
235
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
functionLocalNames
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    "Should return a collection of function local names"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    ^self subclassResponsibility
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    "Created: / 28-08-2007 / 23:06:40 / janfrog"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    "Modified: / 29-08-2007 / 09:29:15 / janfrog"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
functions
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
    ^self functionLocalNames collect:
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
        [:localName|
246
4b08e1deefe2 stc workaround
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 241
diff changeset
   119
        XQuery::ExternalFunction new
235
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
            setFunctionLibrary: self;
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
            setLocalName: localName;
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
            yourself]
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
    "Created: / 28-08-2007 / 23:06:40 / janfrog"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    "Modified: / 01-12-2008 / 10:15:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
namespaceURI
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    ^ self class namespaceURI
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
    "Created: / 01-12-2008 / 10:02:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
! !
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
!FunctionLibrary class methodsFor:'documentation'!
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
241
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
   136
version_SVN
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 235
diff changeset
   137
    ^ '$Id$'
235
e2a2fac1f45f Restore /trunk from r231
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
! !