Skip to content
Snippets Groups Projects
whitespace-handling.xqm 2.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • xquery version "3.0";
    
    
    (:
     : Copyright (c) 2018 Uwe Sikora
     : Copyright (c) 2018–2019 Michelle Weidling
     : Copyright (c) 2020 Stefan Hynek
     :
     : This file is part of intermediate-format.
     :
     : intermediate-format is free software: you can redistribute it and/or modify
     : it under the terms of the GNU General Public License as published by
     : the Free Software Foundation, either version 3 of the License, or
     : (at your option) any later version.
     :
     : intermediate-format is distributed in the hope that it will be useful,
     : but WITHOUT ANY WARRANTY; without even the implied warranty of
     : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     : GNU General Public License for more details.
     :
     : You should have received a copy of the GNU General Public License
     : along with intermediate-format.  If not, see <https://www.gnu.org/licenses/>.
     :)
    
    
    uwe's avatar
    uwe committed
     : WHITESPACE Module ("whitespace", "http://bdn.edition.de/intermediate_format/whitespace_handling")
     : *******************************************************************************************
     : This module contains the functions to handle different whitespace operations on text
     :
     : @version 1.0 (2018-01-02)
     : @status working
     : @author Uwe Sikora
     :)
    
    module namespace whitespace="http://bdn-edition.de/intermediate_format/whitespace_handling";
    
    declare default element namespace "http://www.tei-c.org/ns/1.0";
    
    
    uwe's avatar
    uwe committed
    
    (:############################# Modules Functions #############################:)
    
    
    uwe's avatar
    uwe committed
     : whitespace:text()
     : This function handles whitespace in defined text() nodes
     :
     : @param $text the text-node to be converted
     : @param $escape-char a optional escape-character replacing all whitespace characters
     : @return text()* representing the escaped text()
     :
     : @version 2.0 (2018-01-30)
     : @status working
     : @author Uwe Sikora
     :)
    
    declare function whitespace:text
        ( $text as text()*, $escape-char as xs:string? ) as text()* {
    
        let $whitespace-node := $text[matches(., "[\n\r\t]") and normalize-space(.) = ""]
    
    
            if (not($whitespace-node)) then (
    
                if ($escape-char) then (
    
                    whitespace:escape-text($text, "@")
    
                ) else ( whitespace:escape-text($text, " ") )
    
    uwe's avatar
    uwe committed
     : whitespace:escape-text()
    
     : This function replaces whitespaces in a text()
    
    uwe's avatar
    uwe committed
     : with a defined preservation character
     :
     : @param $text the text-node to be converted
     : @param $escape the escape-character replacing all whitespace characters
     : @return text()* representing the escaped text()
    
    uwe's avatar
    uwe committed
     : @version 2.0 (2018-01-30)
     : @status working
    
     : @author Uwe Sikora
     :)
    declare function whitespace:escape-text
    
        ($text as text()*, $escape as xs:string) as text()* {
    
    
        text {replace($text, '[\s]+', $escape)}
    };