(: A procedure to select the contents of the "textboard" :) declare boundary-space strip; import module namespace jj = "http://kumquat.emse.fr/utilitaires" at "jjutils.xq" ; { let $t := $arguments[1] let $d := doc($t)/trace/event for $e at $p in $d where $e[textboard] return { textboard , { $e/time }, { { { $t }, {jj:build-Path($e)} } }, {string($e/@user)}, {string($e/@room)}, { { let $prevelem := $e/preceding-sibling::event[textboard][1] let $pos := xs:integer($e/textboard/text/@caret) + 1 let $thisnumchar := fn:string-length($e/textboard/text) let $prevnumchar := fn:string-length($prevelem/textboard/text) let $diffnumchar := $thisnumchar - $prevnumchar let $contextsize := 3 let $before := fn:substring($e/textboard/text,1,$pos) let $split := fn:tokenize($before,"\s") let $context := fn:string-join($split[position() ge (last()-$contextsize)], " ") return if ($diffnumchar < 0) then (-$diffnumchar, "chars removed near ",$context) else ($diffnumchar, "chars added near ",$context) } }, {string($e/textboard/text)}, {string($e/textboard/text/@caret)} } }