Skip to content
Snippets Groups Projects
whitespace-handling.xqm 1.24 KiB
Newer Older
  • Learn to ignore specific revisions
  • xquery version "3.0";
    
    module namespace whitespace="http://bdn.edition.de/intermediate_format/whitespace_handling";
    declare default element namespace "http://www.tei-c.org/ns/1.0";
    
    declare function whitespace:text
        ( $text as text()*, $escape-char as xs:string? ) as text()* {
        
        let $normalized := normalize-space($text)
        let $single-whitespace-between-nodes := $text
                                                [ self::node() = ' ']
                                                [preceding-sibling::node()[not(self::node() = text())]]
                                                [following-sibling::node()[not(self::node() = text())]]
        return
            if ( $normalized != "" or $single-whitespace-between-nodes) then (
                
                if ($escape-char) then (
                    whitespace:escape-text($text, $escape-char) 
                ) else ( whitespace:escape-text($text, " ") )
                
            ) 
            else ()
    };
    
    (:~ 
     : string:escape-whitespace
     : This function replaces whitespaces in a text() 
     : with one defined preservation character
     :
     : @version 1.0 (2017-09-14)
     : @author Uwe Sikora
     :)
    declare function whitespace:escape-text
        ($text, $escape as xs:string) as text()* {
    
        text {replace($text, '[\s]+', $escape)}
    };