"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 }