"Fossies" - the Fresh Open Source Software Archive

Member "groovy-4.0.12/subprojects/groovy-xml/src/main/groovy/groovy/xml/streamingmarkupsupport/AbstractStreamingBuilder.groovy" (31 Jan 1980, 3598 Bytes) of package /linux/misc/apache-groovy-src-4.0.12.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Java source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 /*
    2  *  Licensed to the Apache Software Foundation (ASF) under one
    3  *  or more contributor license agreements.  See the NOTICE file
    4  *  distributed with this work for additional information
    5  *  regarding copyright ownership.  The ASF licenses this file
    6  *  to you under the Apache License, Version 2.0 (the
    7  *  "License"); you may not use this file except in compliance
    8  *  with the License.  You may obtain a copy of the License at
    9  *
   10  *    http://www.apache.org/licenses/LICENSE-2.0
   11  *
   12  *  Unless required by applicable law or agreed to in writing,
   13  *  software distributed under the License is distributed on an
   14  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   15  *  KIND, either express or implied.  See the License for the
   16  *  specific language governing permissions and limitations
   17  *  under the License.
   18  */
   19 package groovy.xml.streamingmarkupsupport
   20 
   21 class AbstractStreamingBuilder {
   22     def badTagClosure = {tag, doc, pendingNamespaces, namespaces, namespaceSpecificTags, prefix, Object[] rest ->
   23         def uri = pendingNamespaces[prefix]
   24         if (uri == null) {
   25             uri = namespaces[prefix]
   26         }
   27         throw new GroovyRuntimeException("Tag ${tag} is not allowed in namespace ${uri}")
   28     }
   29     def namespaceSetupClosure = {doc, pendingNamespaces, namespaces, namespaceSpecificTags, prefix, attrs, Object[] rest ->
   30         attrs.each { key, value ->
   31             if ( key == "") {
   32                 key = ":"    // marker for default namespace
   33             }
   34             value = value.toString()     // in case it's not a string
   35             if (namespaces[key] != value) {
   36                 pendingNamespaces[key] = value
   37             }
   38             if (!namespaceSpecificTags.containsKey(value)) {
   39                 def baseEntry = namespaceSpecificTags[':']
   40                 namespaceSpecificTags[value] = [baseEntry[0], baseEntry[1], [:]].toArray()
   41             }
   42         }
   43     }
   44     def aliasSetupClosure = {doc, pendingNamespaces, namespaces, namespaceSpecificTags, prefix, attrs, Object[] rest ->
   45         attrs.each { key, value ->
   46             if (value instanceof Map) {
   47                 // key is a namespace prefix value is the mapping
   48                 def info = null
   49                 if (namespaces.containsKey(key)) {
   50                     info = namespaceSpecificTags[namespaces[key]]
   51                 } else if (pendingNamespaces.containsKey(key)) {
   52                     info = namespaceSpecificTags[pendingNamespaces[key]]
   53                 } else {
   54                     throw new GroovyRuntimeException("namespace prefix ${key} has not been declared")
   55                 }
   56                 value.each { to, from -> info[2][to] = info[1].curry(from) }
   57             } else {
   58                 def info = namespaceSpecificTags[':']
   59                 info[2][key] = info[1].curry(value)
   60             }
   61         }
   62     }
   63     def getNamespaceClosure = { doc, pendingNamespaces, namespaces, Object[] rest -> [namespaces, pendingNamespaces] }
   64 
   65     def toMapStringClosure = { Map instruction, checkDoubleQuotationMarks={ value -> !value.toString().contains('"') } ->
   66         def buf = new StringBuilder()
   67         instruction.each { name, value ->
   68             if (checkDoubleQuotationMarks(value)) {
   69                 buf.append(" $name=\"$value\"")
   70             } else {
   71                 buf.append(" $name='$value'")
   72             }
   73         }
   74         return buf.toString()
   75     }
   76 
   77     def specialTags = ['declareNamespace':namespaceSetupClosure,
   78                            'declareAlias':aliasSetupClosure,
   79                           'getNamespaces':getNamespaceClosure]
   80 
   81     def builder = null
   82 }