Mercurial > hg > mpdl-group
diff software/eXist/webapp/mpdl/_stuff/futureDev/insert.xql @ 9:1ec29fdd0db8
neue .lex Dateien f?r Normalisierung / externe Objekte update
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 22 Feb 2011 16:03:45 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/software/eXist/webapp/mpdl/_stuff/futureDev/insert.xql Tue Feb 22 16:03:45 2011 +0100 @@ -0,0 +1,67 @@ +xquery version "1.0"; + +module namespace mpdl-text = "http://www.mpiwg-berlin.mpg.de/ns/mpdl/text"; + +declare function mpdl-text:insert($fragment as element(), $externalObjects as element()*) { + let $firstObject := $externalObjects[1] + let $xmlNodeId := $firstObject/@xmlNodeId + let $posNode := $fragment//*[@xmlNodeId = $xmlNodeId] + let $before := $firstObject/@before + let $boolBefore := + if ($before = "true") + then true() + else false() + let $charPosStr := $firstObject/@charPos + let $charPos := + if($charPosStr != "" and not(empty($charPosStr))) + then number($charPosStr) + else -1 + let $newNode := $firstObject/content + let $size := count($externalObjects) + let $otherObjects := + if ($size > 1) + then subsequence($externalObjects, 2, $size) + else () + let $insertedFragment := mpdl-text:insert($fragment, $posNode, $boolBefore, $charPos, $newNode) + let $result := + if ($size >= 1) + then + mpdl-text:insert($insertedFragment, $otherObjects) + else + $fragment + return $result +}; + +declare function mpdl-text:insert($element as element(), $node, $before, $charPos, $newNode) { + if ($element = $node and $before and $charPos = -1) + then + ($newNode, + element {node-name($node)} + {$node/@*, + for $child in $node/node() + return if ($child instance of element()) + then mpdl-text:insert($child, $node, $before, $charPos, $newNode) + else $child + }) + else if ($element = $node and not($before) and $charPos = -1) + then + (element {node-name($node)} + {$node/@*, + for $child in $node/node() + return if ($child instance of element()) + then mpdl-text:insert($child, $node, $before, $charPos, $newNode) + else $child + }, $newNode) + else if ($element = $node and $charPos >= 0) + then + util:parse(mpdltext:insertAtCharPos(util:serialize($node, ()), util:serialize($newNode, ()), $charPos)) + else + element {node-name($element)} + {$element/@*, + for $child in $element/node() + return if ($child instance of element()) + then mpdl-text:insert($child, $node, $before, $charPos, $newNode) + else $child + } +}; +