[add] rex build jar
This commit is contained in:
parent
2078055d05
commit
c8e4f928b1
19 changed files with 8211 additions and 5119 deletions
67
scripts/postutil.xqm
Normal file
67
scripts/postutil.xqm
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
(:~ post utils :)
|
||||
module namespace qform = 'urn:quodatum:http.form';
|
||||
|
||||
(:~ post form data in $fields to $url RR style
|
||||
@param $url http server target
|
||||
@param $fields map if key starts @ value is file path to upload
|
||||
:)
|
||||
declare function qform:post-form($fields as map(*), $url as xs:string)
|
||||
as item(){
|
||||
let $names:= map:keys($fields)
|
||||
|
||||
let $req:=<http:request method='POST'>
|
||||
<http:multipart media-type='multipart/form-data'>{
|
||||
for $name in $names
|
||||
return (
|
||||
if(starts-with($name,"@"))
|
||||
then let $file:=$fields($name)
|
||||
return <http:header name='content-disposition'
|
||||
value='form-data; name="{substring($name,2)}"; filename="{file:name($file)}"'/>
|
||||
else <http:header name='content-disposition'
|
||||
value='form-data; name="{$name}";'/>,
|
||||
<http:body media-type='application/octet-stream'/>
|
||||
)
|
||||
}</http:multipart>
|
||||
</http:request>
|
||||
let $result:= http:send-request($req=>trace("REQ"), $url,
|
||||
for $name in $names
|
||||
return if(starts-with($name,"@"))
|
||||
then unparsed-text($fields($name))=>trace("EE")
|
||||
else $fields($name)
|
||||
)
|
||||
return if($result[1]/@status eq "200")
|
||||
then $result[2]
|
||||
else error(xs:QName("qform:post-form"),$result[1]/@message)
|
||||
};
|
||||
|
||||
(:~ post json data in $fields to $url OLLAMA style
|
||||
:)
|
||||
declare function qform:post-json($fields as map(*), $url as xs:string)
|
||||
as item(){
|
||||
|
||||
let $req:=<http:request method='POST' override-media-type='text/plain'>
|
||||
<http:body media-type='application/json'/>
|
||||
</http:request>
|
||||
let $body:= serialize($fields,map{"method":"json"})
|
||||
let $result:= http:send-request($req, $url, $body)
|
||||
return if($result[1]/@status eq "200")
|
||||
then $result[2]
|
||||
else error(xs:QName("qform:post-json"),$result[1]/@message)
|
||||
};
|
||||
(:~ post json data in $fields to $url mermaid style
|
||||
:)
|
||||
declare function qform:post-text($text as xs:string, $url as xs:string)
|
||||
as item(){
|
||||
let $req:=<http:request method='POST'>
|
||||
<http:body media-type='text/plain'/>
|
||||
</http:request>
|
||||
return http:send-request($req, $url, $text)
|
||||
=>qform:check("qform:post-text")
|
||||
};
|
||||
|
||||
declare function qform:check($result as item()+, $code as xs:string)
|
||||
as item(){
|
||||
if($result[1]/@status eq "200")
|
||||
then $result[2]
|
||||
else error(xs:QName($code),$result[1]/@message)
|
||||
};
|
||||
31
scripts/rex.xq
Normal file
31
scripts/rex.xq
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import module namespace qform = 'urn:quodatum:http.form' at "postutil.xqm";
|
||||
declare variable $REX:="https://www.bottlecaps.de/rex/";
|
||||
|
||||
declare function local:resolve($path as xs:string)
|
||||
as xs:string{
|
||||
file:resolve-path($path,file:base-dir())
|
||||
};
|
||||
declare function local:rex($ebnf,$opts as map(*))
|
||||
{
|
||||
let $xq:= qform:post-form(map:put($opts,"@input",$ebnf),$REX)
|
||||
let $write:=if($xq instance of xs:base64Binary)
|
||||
then file:write-binary#2
|
||||
else file:write-text#2
|
||||
return $write($opts?dest,$xq)
|
||||
};
|
||||
|
||||
let $target:={
|
||||
"xquery": {
|
||||
"dest":local:resolve("../webapp/lsp/xq4.xqm"),
|
||||
"command": "-lalr 2 -tree -name quodatum.parser.xq4 -xquery"},
|
||||
|
||||
"basex" : {
|
||||
"dest": local:resolve("../bundles/grammar/xq4.java"),
|
||||
"command": "-lalr 2 -tree -name quodatum.parser.xq4 -java -basex"}
|
||||
|
||||
}
|
||||
|
||||
let $ebnf:=local:resolve("../bundles/grammar/XQuery-40.ebnf")
|
||||
|
||||
return local:rex($ebnf,$target("basex"))
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue