Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * LabelElements.java
   *
   * Copyright 2008 Mark Logic Corporation.
   * Portions Copyright 2007 Sun Microsystems, Inc.
   * All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common
  * Development and Distribution License("CDDL") (collectively, the
  * "License"). You may not use this file except in compliance with the
  * License. You can obtain a copy of the License at
  * https://xproc.dev.java.net/public/CDDL+GPL.html or
  * docs/CDDL+GPL.txt in the distribution. See the License for the
  * specific language governing permissions and limitations under the
  * License. When distributing the software, include this License Header
  * Notice in each file and include the License file at docs/CDDL+GPL.txt.
  */
 
 package com.xmlcalabash.library;
 

Author(s):
ndw
 
 public class Template extends DefaultStep implements ProcessMatchingNodes {
     private ReadablePipe source = null;
     private ReadablePipe template = null;
     private WritablePipe result = null;
     private Hashtable<QName,RuntimeValueparams = new Hashtable<QNameRuntimeValue> ();
     private ProcessMatch matcher = null;
     private XdmNode context = null;
 
     private static final int START = 0;
     private static final int XPATHMODE = 1;
     private static final int SQUOTEMODE = 2;
     private static final int DQUOTEMODE = 3;
     private static final int END = 4;

    
Creates a new instance of LabelElements
 
     public Template(XProcRuntime runtimeXAtomicStep step) {
         super(runtime,step);
     }
 
     public void setInput(String portReadablePipe pipe) {
         if ("source".equals(port)) {
              = pipe;
         } else if ("template".equals(port)) {
              = pipe;
         } else {
             throw new UnsupportedOperationException("WTF?");
         }
     }
 
     public void setOutput(String portWritablePipe pipe) {
          = pipe;
     }
 
     public void setParameter(QName nameRuntimeValue value) {
         .put(namevalue);
     }
 
     public void reset() {
         .resetReader();
         .resetWriter();
         .resetReader();
     }
 
     public void run() throws SaxonApiException {
             .finer(this.getNode(), "The template step should be named p:template, the name p:document-template is deprecated.");
         }
 
         super.run();
 
        if (.documentCount() > 1) {
            throw XProcException.stepError(68);
        }
         = .read();
         = new ProcessMatch(this);
        .match(.read(), new RuntimeValue("node()".getNode()));
        .write(.getResult());
    }
    public boolean processStartDocument(XdmNode nodethrows SaxonApiException {
        .startDocument(node.getBaseURI());
        return true;
    }
    public void processEndDocument(XdmNode nodethrows SaxonApiException {
        .endDocument();
    }
    public boolean processStartElement(XdmNode nodethrows SaxonApiException {
        .addStartElement(node);
        XdmSequenceIterator iter = node.axisIterator(.);
        while (iter.hasNext()) {
            XdmNode attr = (XdmNodeiter.next();
            String value = attr.getStringValue();
            if (value.contains("{") || value.contains("}")) {
                Vector<XdmItemitems = parse(attrvalue);
                String newvalue = "";
                for (XdmItem item : items) {
                    newvalue += item.getStringValue();
                }
                .addAttribute(attrnewvalue);
            } else {
                .addAttribute(attr);
            }
        }
        return true;
    }
    public void processEndElement(XdmNode nodethrows SaxonApiException {
        .addEndElement();
    }
    public void processText(XdmNode nodethrows SaxonApiException {
        String value = node.getStringValue();
        if (value.contains("{") || value.contains("}")) {
            Vector<XdmItemitems = parse(nodevalue);
            for (XdmItem item : items) {
                if (item.isAtomicValue()) {
                    .addText(item.getStringValue());
                } else {
                    XdmNode nitem = (XdmNodeitem;
                    switch (nitem.getNodeKind()) {
                        case :
                            .addSubtree(nitem);
                            break;
                        case :
                            .addAttribute(nitem);
                            break;
                        case :
                            .addSubtree(nitem);
                            break;
                        case :
                            .addComment(nitem.getStringValue());
                            break;
                        default:
                            .addText(nitem.getStringValue());
                    }
                }
            }
        } else {
            .addText(value);
        }
    }
    private Vector<XdmItemparse(XdmNode nodeString value) {
        Vector<XdmItemitems = new Vector<XdmItem> ();
        int state = ;
        String ptext = "";
        String ch = "";
        Hashtable<String,Stringnsbindings = new Hashtable<String,String> ();
        // FIXME: Surely there's a better way to do this?
        XdmNode parent = node;
        while (parent != null
                && parent.getNodeKind() != .
                && parent.getNodeKind() != .) {
            parent = parent.getParent();
        }
        if (parent.getNodeKind() == .) {
            NodeInfo inode = parent.getUnderlyingNode();
            InscopeNamespaceResolver inscopeNS = new InscopeNamespaceResolver(inode);
            Iterator<Stringprefixes = inscopeNS.iteratePrefixes();
            while (prefixes.hasNext()) {
                String nspfx = prefixes.next();
                String nsuri = inscopeNS.getURIForPrefix(nspfxtrue);
                nsbindings.put(nspfx,nsuri);
            }
        }
        String peek = "";
        int pos = 0;
        while (pos < value.length()) {
            ch = value.substring(pos,pos+1);
            switch (state) {
                case :
                    if (pos+1 < value.length()) {
                        peek = value.substring(pos+1,pos+2);
                    } else {
                        peek = "";
                    }
                    if ("{".equals(ch)) {
                        if ("{".equals(peek)) {
                            ptext += "{";
                            pos++;
                        } else {
                            if (!"".equals(ptext)) {
                                items.add(new XdmAtomicValue(ptext));
                                ptext = "";
                            }
                            state = ;
                        }
                    } else if ("}".equals(ch)) {
                        if ("}".equals(peek)) {
                            ptext += "}";
                            pos++;
                        } else {
                            throw XProcException.stepError(67);
                        }
                    } else {
                        ptext += ch;
                    }
                    break;
                case :
                    if ("{".equals(ch)) {
                        throw XProcException.stepError(67);
                    } else if ("'".equals(ch)) {
                        ptext += "'";
                        state = ;
                    } else if ("\"".equals(ch)) {
                        ptext += "\"";
                        state = ;
                    } else if ("}".equals(ch)) {
                        items.addAll(evaluateXPath(nsbindingsptext));
                        ptext = "";
                        state = ;
                    } else {
                        ptext += ch;
                    }
                    break;
                case :
                    if ("'".equals(ch)) {
                        ptext += "'";
                        state = ;
                    } else {
                        ptext += ch;
                    }
                    break;
                case :
                    if (("\"").equals(ch)) {
                        ptext += "\"";
                        state = ;
                    } else {
                        ptext += ch;
                    }
                    break;
            }
            pos++;
        }
        if (state != ) {
            throw XProcException.stepError(67);
        }
        if (!"".equals(ptext)) {
            items.add(new XdmAtomicValue(ptext));
        }
        return items;
    }
    public void processComment(XdmNode nodethrows SaxonApiException {
        String value = node.getStringValue();
        if (value.contains("{") || value.contains("}")) {
            Vector<XdmItemitems = parse(nodevalue);
            String newvalue = "";
            for (XdmItem item : items) {
                newvalue += item.getStringValue();
            }
            .addComment(newvalue);
        } else {
            .addComment(value);
        }
    }
    public void processPI(XdmNode nodethrows SaxonApiException {
        String value = node.getStringValue();
        if (value.contains("{") || value.contains("}")) {
            Vector<XdmItemitems = parse(nodevalue);
            String newvalue = "";
            for (XdmItem item : items) {
                newvalue += item.getStringValue();
            }
            .addPI(node.getNodeName().getLocalName(), newvalue);
        } else {
            .addPI(node.getNodeName().getLocalName(), value);
        }
    }
    public void processAttribute(XdmNode nodethrows SaxonApiException {
        throw new UnsupportedOperationException("This can't happen.");
    }
New to GrepCode? Check out our FAQ X