@@ -47,55 +47,107 @@ declare function app:check-not-dba-user-and-not-data($node as node(), $model as
4747
4848declare
4949 %templates:default("action" , "search" )
50- %templates:default("type " , "name " )
50+ %templates:default("where " , "everywhere " )
5151function app:action (
5252 $node as node (), $model as map (*),
5353 $action as xs:string,
5454 $module as xs:string?,
55- $q as xs:string?, $type as xs:string
55+ $q as xs:string?, $where as xs:string
5656) as map (*) {
5757 switch ($action)
58- case "browse" return app:browse ($node, $module)
59- case "search" return app:search ($node, $q, $type)
58+ case "browse" return app:browse ($module)
59+ case "search" return
60+ switch ($where)
61+ case "description" return app:search-in-description ($q)
62+ case "location" return app:search-in-module-location ($q)
63+ case "signature" return app:search-in-signature ($q)
64+ case "name" return app:search-in-module-name ($q)
65+ case "everywhere" return app:search-everywhere ($q)
66+ default return app:search-everywhere ($q)
6067 default return map { "result" : () }
6168};
6269
6370declare %private
64- function app:browse ($node as node (), $ module as xs:string?) as map (*) {
71+ function app:browse ($module as xs:string?) as map (*) {
6572 let $module := $app:data[xqdoc:module /xqdoc:uri = $module]
6673 return map { "result" : $module//xqdoc:function }
6774};
6875
6976declare %private
70- function app:search (
71- $node as node (), $q as xs:string?, $type as xs:string
72- ) as map (*) {
73- let $functions :=
74- switch ( $type )
75- case "name" return
76- $app:data//xqdoc:function [ngram:contains (xqdoc:name, $q)]
77- case "signature" return
78- $app:data//xqdoc:function [ngram:contains (xqdoc:signature, $q)]
79- case "desc" return
80- $app:data//xqdoc:function [ngram:contains (xqdoc:comment /xqdoc:description, $q)]
81- default return ()
82- return
83- map { "result" : $functions }
77+ function app:search-in-module-location ($q as xs:string?) as map (*) {
78+ map {
79+ "result" : $app:data//(
80+ xqdoc:control[contains (xqdoc:location, $q)]/..//xqdoc:function
81+ )
82+ }
83+ };
84+
85+ declare %private
86+ function app:search-in-module-name ($q as xs:string?) as map (*) {
87+ map {
88+ "result" : $app:data//(
89+ xqdoc:module [contains (xqdoc:uri, $q)]/..//xqdoc:function
90+ )
91+ }
92+ };
93+
94+ declare %private
95+ function app:search-in-description ($q as xs:string?) as map (*) {
96+ map {
97+ "result" : $app:data//(
98+ xqdoc:function [ngram:contains (xqdoc:comment /xqdoc:description, $q)]
99+ |
100+ xqdoc:module [ngram:contains (xqdoc:comment /xqdoc:description, $q)]
101+ )
102+ }
103+ };
104+
105+ declare %private
106+ function app:search-in-signature ($q as xs:string?) as map (*) {
107+ map {
108+ "result" : $app:data//(
109+ xqdoc:function [ngram:contains (xqdoc:name, $q)]
110+ |
111+ xqdoc:function [ngram:contains (xqdoc:signature, $q)]
112+ )
113+ }
114+ };
115+
116+ declare %private
117+ function app:search-everywhere ($q as xs:string?) as map (*) {
118+ map {
119+ "result" : $app:data//(
120+ xqdoc:function [ngram:contains (xqdoc:name, $q)]
121+ |
122+ xqdoc:function [ngram:contains (xqdoc:signature, $q)]
123+ |
124+ xqdoc:function [ngram:contains (xqdoc:comment /xqdoc:description, $q)]
125+ |
126+ xqdoc:control[contains (xqdoc:location, $q)]/..//xqdoc:function
127+ |
128+ xqdoc:module [contains (xqdoc:uri, $q)]/..//xqdoc:function
129+ |
130+ xqdoc:module [ngram:contains (xqdoc:comment /xqdoc:description, $q)]
131+ |
132+ xqdoc:module [ngram:contains (xqdoc:name, $q)]/..//xqdoc:function
133+ )
134+ }
84135};
85136
86137declare
87138 %templates:default("details" , "false" )
88139function app:module ($node as node (), $model as map (*), $details as xs:boolean) {
89140 let $functions := $model("result" )
90- for $module in $functions/ancestor::xqdoc:xqdoc
91- let $uri := $module/xqdoc:module /xqdoc:uri/text ()
92- let $location := $module/xqdoc:control/xqdoc:location/text ()
93- let $order := (if ($location) then $location else " " || $uri)
94- let $funcsInModule := $module//xqdoc:function intersect $functions
95-
96- order by $order
97141 return
98- app:print-module ($module, $funcsInModule, $details)
142+ for $module in $functions/ancestor::xqdoc:xqdoc
143+ let $uri := $module/xqdoc:module /xqdoc:uri/text ()
144+ let $location := $module/xqdoc:control/xqdoc:location/text ()
145+ let $order := (if ($location) then $location else " " || $uri)
146+ let $funcsInModule := $module//xqdoc:function intersect $functions
147+
148+ order by $order
149+ return
150+ app:print-module ($module, $funcsInModule, $details)
99151};
100152
101153declare %private
0 commit comments