joerg 2004/03/10 15:36:13
Modified: src/blocks/xsp/samples/util view-source.xsp Log: *** keyword substitution change *** Revision Changes Path 1.2 +288 -288 cocoon-2.1/src/blocks/xsp/samples/util/view-source.xsp Index: view-source.xsp =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/xsp/samples/util/view-source.xsp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- view-source.xsp 10 Mar 2004 15:37:54 -0000 1.1 +++ view-source.xsp 10 Mar 2004 23:36:13 -0000 1.2 @@ -1,288 +1,288 @@ -<?xml version="1.0"?> -<!-- - Copyright 1999-2004 The Apache Software Foundation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<!-- Written by Ricardo Rocha <[EMAIL PROTECTED]> --> -<!-- Fixed for version 2.0 by Davanum Srinivas <[EMAIL PROTECTED]> --> - -<xsp:page language="java" xmlns:xsp="http://apache.org/xsp"> - - <xsp:structure> - <xsp:include>org.w3c.dom.*</xsp:include> - <xsp:include>org.apache.cocoon.components.source.SourceUtil</xsp:include> - <xsp:include>org.apache.cocoon.xml.dom.DOMStreamer</xsp:include> - <xsp:include>org.apache.excalibur.xml.dom.DOMParser</xsp:include> - <xsp:include>org.apache.excalibur.source.Source</xsp:include> - </xsp:structure> - - <xsp:logic><![CDATA[ - private static final String ATTR_NAME_COLOR = "darkblue"; - private static final String ATTR_VALUE_COLOR = "navy"; - private static final String COMMENT_COLOR = "gray"; - private static final String DELIMITER_COLOR = "blue"; - private static final String ELEMENT_COLOR = "navy"; - private static final String ENTITY_REF_COLOR = "navy"; - private static final String PI_COLOR = "darkred"; - private static final String TEXT_COLOR = "black"; - private static final String CUSTOM_ELEMENT_COLOR = "green"; - private static final String XSL_ELEMENT_COLOR = "purple"; - private static final String XSP_ELEMENT_COLOR = "green"; - private static final String XSP_TEXT_COLOR = "red"; - - protected void colorize(Node node, Document factory) throws SAXException { - Element element = factory.createElement("pre"); - DocumentFragment fragment = factory.createDocumentFragment(); - element.appendChild(doColorize(node, factory, 0, TEXT_COLOR)); - DOMStreamer ds = new DOMStreamer (this.contentHandler); - ds.stream (element); - } - - protected static DocumentFragment - doColorize(Node node, Document factory, int level, String textColor) - { - Element result = null; - DocumentFragment fragment = factory.createDocumentFragment(); - - switch (node.getNodeType()) { - case Node.CDATA_SECTION_NODE: - result = factory.createElement("font"); - result.setAttribute("color", DELIMITER_COLOR); - result.appendChild(factory.createTextNode("<![CDATA[")); - fragment.appendChild(result); - - result = factory.createElement("font"); - result.setAttribute("color", textColor); - result.appendChild(factory.createTextNode(node.getNodeValue())); - fragment.appendChild(result); - - result = factory.createElement("font"); - result.setAttribute("color", DELIMITER_COLOR); - // I know the thing below is ugly, but man, nested CDATA are a pain in the ass! - result.appendChild(factory.createTextNode("]]]]>><![CDATA[")); - fragment.appendChild(result); - - break; - case Node.ELEMENT_NODE: { - Element element = (Element) node; - - result = factory.createElement("font"); - result.setAttribute("color", DELIMITER_COLOR); - result.appendChild(factory.createTextNode("<")); - fragment.appendChild(result); - - String tagColor = ELEMENT_COLOR; - String tagName = element.getTagName(); - - if (tagName.startsWith("xsp:")) { - tagColor = XSP_ELEMENT_COLOR; - } else if (tagName.startsWith("xsl:")) { - tagColor = XSL_ELEMENT_COLOR; - } else if (tagName.indexOf(':') >= 0) { - tagColor = CUSTOM_ELEMENT_COLOR; - } - - result = factory.createElement("font"); - result.setAttribute("color", tagColor); - result.appendChild(factory.createTextNode(tagName)); - fragment.appendChild(result); - - NamedNodeMap attributes = element.getAttributes(); - int attributeCount = attributes.getLength(); - - for (int i = 0; i < attributeCount; i++) { - Attr attribute = (Attr) attributes.item(i); - - result = factory.createElement("font"); - result.setAttribute("color", ATTR_NAME_COLOR); - result.appendChild( - factory.createTextNode(" " + attribute.getName() + "=") - ); - fragment.appendChild(result); - - result = factory.createElement("font"); - result.setAttribute("color", ATTR_VALUE_COLOR); - result.appendChild( - factory.createTextNode("\"" + attribute.getValue() + "\"") - ); - fragment.appendChild(result); - } - - NodeList nodeList = element.getChildNodes(); - int childCount = nodeList.getLength(); - - result = factory.createElement("font"); - result.setAttribute("color", DELIMITER_COLOR); - result.appendChild( - factory.createTextNode((childCount == 0 ? "/" : "") + ">") - ); - fragment.appendChild(result); - - if (tagName.startsWith("xsp:")) { - textColor = XSP_TEXT_COLOR; - } else { - textColor = TEXT_COLOR; - } - - result = factory.createElement("font"); - result.setAttribute("color", textColor); - - for (int i = 0; i < childCount; i++) { - result.appendChild( - doColorize(nodeList.item(i), factory, level + 1, textColor) - ); - } - fragment.appendChild(result); - - if (childCount > 0) { - result = factory.createElement("font"); - result.setAttribute("color", DELIMITER_COLOR); - result.appendChild(factory.createTextNode("</")); - fragment.appendChild(result); - - result = factory.createElement("font"); - result.setAttribute("color", tagColor); - result.appendChild(factory.createTextNode(tagName)); - fragment.appendChild(result); - - result = factory.createElement("font"); - result.setAttribute("color", DELIMITER_COLOR); - result.appendChild(factory.createTextNode(">")); - fragment.appendChild(result); - } - - break; - } - case Node.DOCUMENT_NODE: - case Node.DOCUMENT_FRAGMENT_NODE: { - NodeList nodeList = node.getChildNodes(); - int childCount = nodeList.getLength(); - - for (int i = 0; i < childCount; i++) { - fragment.appendChild( - doColorize(nodeList.item(i), factory, level + 1, textColor) - ); - } - - break; - } - case Node.COMMENT_NODE: - result = factory.createElement("font"); - result.setAttribute("color", COMMENT_COLOR); - - result.appendChild( - factory.createTextNode( - "<!-- " + node.getNodeValue() + " -->" - ) - ); - - fragment.appendChild(result); - - break; - case Node.PROCESSING_INSTRUCTION_NODE: - ProcessingInstruction pi = (ProcessingInstruction) node; - - result = factory.createElement("font"); - result.setAttribute("color", DELIMITER_COLOR); - result.appendChild(factory.createTextNode("<?")); - fragment.appendChild(result); - - result = factory.createElement("font"); - result.setAttribute("color", PI_COLOR); - result.appendChild(factory.createTextNode(pi.getTarget() + " " + pi.getData())); - fragment.appendChild(result); - - result = factory.createElement("font"); - result.setAttribute("color", DELIMITER_COLOR); - result.appendChild(factory.createTextNode("?>\n")); - fragment.appendChild(result); - - break; - case Node.ENTITY_REFERENCE_NODE: - result = factory.createElement("font"); - result.setAttribute("color", ENTITY_REF_COLOR); - result.appendChild( - factory.createTextNode("<" + node.getNodeValue() + ";") - ); - fragment.appendChild(result); - - break; - case Node.TEXT_NODE: - fragment.appendChild(factory.createTextNode(node.getNodeValue())); - break; - default: - break; - } - - return fragment; - } - ]]></xsp:logic> - - <html> - <xsp:logic> - </xsp:logic> - <head> - <title>Source Code</title> - <link rel="stylesheet" type="text/css" href="style" title="Style"/> - </head> - - <body> - <xsp:logic> - String filename = request.getParameter("filename"); - if (filename != null) { - - <h3 style="color:navy; text-align: center"> - <xsp:expr>filename</xsp:expr> - </h3> - - DOMParser parser = null; - Source source = null; - - try { - parser = (DOMParser)manager.lookup(DOMParser.ROLE); - Document outputDocument = parser.createDocument(); - - source = super.resolver.resolveURI("context://" + filename); - - Document sourceDocument = parser.parseDocument(SourceUtil.getInputSource(source)); - - this.colorize(sourceDocument, outputDocument); - } catch (SAXException e){ - getLogger().debug("SAXException in colorize", e); - throw e; - } catch (org.w3c.dom.DOMException e){ - getLogger().debug("DOMException in colorize", e); - throw e; - } catch (Exception e) { - getLogger().error("Could not include page", e); - <p style="color: red; font-weight: bold;"> - Could not include page: - <xsp:expr>e</xsp:expr> - </p> - } finally { - this.manager.release((Component) parser); - if (source != null) { - super.resolver.release(source); - source = null; - } - } - } else { - <h3 style="color:navy; text-align: center"> - Need <em>filename</em> or <em>url</em> parameters to work - </h3> - } - </xsp:logic> - </body> - </html> -</xsp:page> +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- Written by Ricardo Rocha <[EMAIL PROTECTED]> --> +<!-- Fixed for version 2.0 by Davanum Srinivas <[EMAIL PROTECTED]> --> + +<xsp:page language="java" xmlns:xsp="http://apache.org/xsp"> + + <xsp:structure> + <xsp:include>org.w3c.dom.*</xsp:include> + <xsp:include>org.apache.cocoon.components.source.SourceUtil</xsp:include> + <xsp:include>org.apache.cocoon.xml.dom.DOMStreamer</xsp:include> + <xsp:include>org.apache.excalibur.xml.dom.DOMParser</xsp:include> + <xsp:include>org.apache.excalibur.source.Source</xsp:include> + </xsp:structure> + + <xsp:logic><![CDATA[ + private static final String ATTR_NAME_COLOR = "darkblue"; + private static final String ATTR_VALUE_COLOR = "navy"; + private static final String COMMENT_COLOR = "gray"; + private static final String DELIMITER_COLOR = "blue"; + private static final String ELEMENT_COLOR = "navy"; + private static final String ENTITY_REF_COLOR = "navy"; + private static final String PI_COLOR = "darkred"; + private static final String TEXT_COLOR = "black"; + private static final String CUSTOM_ELEMENT_COLOR = "green"; + private static final String XSL_ELEMENT_COLOR = "purple"; + private static final String XSP_ELEMENT_COLOR = "green"; + private static final String XSP_TEXT_COLOR = "red"; + + protected void colorize(Node node, Document factory) throws SAXException { + Element element = factory.createElement("pre"); + DocumentFragment fragment = factory.createDocumentFragment(); + element.appendChild(doColorize(node, factory, 0, TEXT_COLOR)); + DOMStreamer ds = new DOMStreamer (this.contentHandler); + ds.stream (element); + } + + protected static DocumentFragment + doColorize(Node node, Document factory, int level, String textColor) + { + Element result = null; + DocumentFragment fragment = factory.createDocumentFragment(); + + switch (node.getNodeType()) { + case Node.CDATA_SECTION_NODE: + result = factory.createElement("font"); + result.setAttribute("color", DELIMITER_COLOR); + result.appendChild(factory.createTextNode("<![CDATA[")); + fragment.appendChild(result); + + result = factory.createElement("font"); + result.setAttribute("color", textColor); + result.appendChild(factory.createTextNode(node.getNodeValue())); + fragment.appendChild(result); + + result = factory.createElement("font"); + result.setAttribute("color", DELIMITER_COLOR); + // I know the thing below is ugly, but man, nested CDATA are a pain in the ass! + result.appendChild(factory.createTextNode("]]]]>><![CDATA[")); + fragment.appendChild(result); + + break; + case Node.ELEMENT_NODE: { + Element element = (Element) node; + + result = factory.createElement("font"); + result.setAttribute("color", DELIMITER_COLOR); + result.appendChild(factory.createTextNode("<")); + fragment.appendChild(result); + + String tagColor = ELEMENT_COLOR; + String tagName = element.getTagName(); + + if (tagName.startsWith("xsp:")) { + tagColor = XSP_ELEMENT_COLOR; + } else if (tagName.startsWith("xsl:")) { + tagColor = XSL_ELEMENT_COLOR; + } else if (tagName.indexOf(':') >= 0) { + tagColor = CUSTOM_ELEMENT_COLOR; + } + + result = factory.createElement("font"); + result.setAttribute("color", tagColor); + result.appendChild(factory.createTextNode(tagName)); + fragment.appendChild(result); + + NamedNodeMap attributes = element.getAttributes(); + int attributeCount = attributes.getLength(); + + for (int i = 0; i < attributeCount; i++) { + Attr attribute = (Attr) attributes.item(i); + + result = factory.createElement("font"); + result.setAttribute("color", ATTR_NAME_COLOR); + result.appendChild( + factory.createTextNode(" " + attribute.getName() + "=") + ); + fragment.appendChild(result); + + result = factory.createElement("font"); + result.setAttribute("color", ATTR_VALUE_COLOR); + result.appendChild( + factory.createTextNode("\"" + attribute.getValue() + "\"") + ); + fragment.appendChild(result); + } + + NodeList nodeList = element.getChildNodes(); + int childCount = nodeList.getLength(); + + result = factory.createElement("font"); + result.setAttribute("color", DELIMITER_COLOR); + result.appendChild( + factory.createTextNode((childCount == 0 ? "/" : "") + ">") + ); + fragment.appendChild(result); + + if (tagName.startsWith("xsp:")) { + textColor = XSP_TEXT_COLOR; + } else { + textColor = TEXT_COLOR; + } + + result = factory.createElement("font"); + result.setAttribute("color", textColor); + + for (int i = 0; i < childCount; i++) { + result.appendChild( + doColorize(nodeList.item(i), factory, level + 1, textColor) + ); + } + fragment.appendChild(result); + + if (childCount > 0) { + result = factory.createElement("font"); + result.setAttribute("color", DELIMITER_COLOR); + result.appendChild(factory.createTextNode("</")); + fragment.appendChild(result); + + result = factory.createElement("font"); + result.setAttribute("color", tagColor); + result.appendChild(factory.createTextNode(tagName)); + fragment.appendChild(result); + + result = factory.createElement("font"); + result.setAttribute("color", DELIMITER_COLOR); + result.appendChild(factory.createTextNode(">")); + fragment.appendChild(result); + } + + break; + } + case Node.DOCUMENT_NODE: + case Node.DOCUMENT_FRAGMENT_NODE: { + NodeList nodeList = node.getChildNodes(); + int childCount = nodeList.getLength(); + + for (int i = 0; i < childCount; i++) { + fragment.appendChild( + doColorize(nodeList.item(i), factory, level + 1, textColor) + ); + } + + break; + } + case Node.COMMENT_NODE: + result = factory.createElement("font"); + result.setAttribute("color", COMMENT_COLOR); + + result.appendChild( + factory.createTextNode( + "<!-- " + node.getNodeValue() + " -->" + ) + ); + + fragment.appendChild(result); + + break; + case Node.PROCESSING_INSTRUCTION_NODE: + ProcessingInstruction pi = (ProcessingInstruction) node; + + result = factory.createElement("font"); + result.setAttribute("color", DELIMITER_COLOR); + result.appendChild(factory.createTextNode("<?")); + fragment.appendChild(result); + + result = factory.createElement("font"); + result.setAttribute("color", PI_COLOR); + result.appendChild(factory.createTextNode(pi.getTarget() + " " + pi.getData())); + fragment.appendChild(result); + + result = factory.createElement("font"); + result.setAttribute("color", DELIMITER_COLOR); + result.appendChild(factory.createTextNode("?>\n")); + fragment.appendChild(result); + + break; + case Node.ENTITY_REFERENCE_NODE: + result = factory.createElement("font"); + result.setAttribute("color", ENTITY_REF_COLOR); + result.appendChild( + factory.createTextNode("<" + node.getNodeValue() + ";") + ); + fragment.appendChild(result); + + break; + case Node.TEXT_NODE: + fragment.appendChild(factory.createTextNode(node.getNodeValue())); + break; + default: + break; + } + + return fragment; + } + ]]></xsp:logic> + + <html> + <xsp:logic> + </xsp:logic> + <head> + <title>Source Code</title> + <link rel="stylesheet" type="text/css" href="style" title="Style"/> + </head> + + <body> + <xsp:logic> + String filename = request.getParameter("filename"); + if (filename != null) { + + <h3 style="color:navy; text-align: center"> + <xsp:expr>filename</xsp:expr> + </h3> + + DOMParser parser = null; + Source source = null; + + try { + parser = (DOMParser)manager.lookup(DOMParser.ROLE); + Document outputDocument = parser.createDocument(); + + source = super.resolver.resolveURI("context://" + filename); + + Document sourceDocument = parser.parseDocument(SourceUtil.getInputSource(source)); + + this.colorize(sourceDocument, outputDocument); + } catch (SAXException e){ + getLogger().debug("SAXException in colorize", e); + throw e; + } catch (org.w3c.dom.DOMException e){ + getLogger().debug("DOMException in colorize", e); + throw e; + } catch (Exception e) { + getLogger().error("Could not include page", e); + <p style="color: red; font-weight: bold;"> + Could not include page: + <xsp:expr>e</xsp:expr> + </p> + } finally { + this.manager.release((Component) parser); + if (source != null) { + super.resolver.release(source); + source = null; + } + } + } else { + <h3 style="color:navy; text-align: center"> + Need <em>filename</em> or <em>url</em> parameters to work + </h3> + } + </xsp:logic> + </body> + </html> +</xsp:page>
