Skip to content

Commit

Permalink
Fix #323 by making cdata-section-elements actually work
Browse files Browse the repository at this point in the history
  • Loading branch information
ndw committed Jul 3, 2021
1 parent 2cffd19 commit e00e58c
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 33 deletions.
11 changes: 1 addition & 10 deletions src/main/java/com/xmlcalabash/core/XProcConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,6 @@
import static java.lang.String.format;
import static java.lang.System.getProperty;

/**
* Created by IntelliJ IDEA.
* User: ndw
* Date: Nov 11, 2008
* Time: 7:47:38 PM
* To change this template use File | Settings | File Templates.
*/
public class XProcConfiguration {
public static final QName _prefix = new QName("", "prefix");
public static final QName _uri = new QName("", "uri");
Expand Down Expand Up @@ -654,7 +647,7 @@ private void loadConfiguration() {
String[] boolSerNames = new String[] {"byte-order-mark", "escape-uri-attributes",
"include-content-type","indent", "omit-xml-declaration", "undeclare-prefixes"};
String[] strSerNames = new String[] {"doctype-public", "doctype-system", "encoding",
"media-type", "normalization-form", "version", "standalone"};
"media-type", "normalization-form", "version", "standalone", "cdata-section-elements"};

for (String name : boolSerNames) {
String s = System.getProperty("com.xmlcalabash.serial."+name);
Expand All @@ -670,8 +663,6 @@ private void loadConfiguration() {
}
}

// cdata-section-elements is ignored

String method = System.getProperty("com.xmlcalabash.serial.method");
if ("html".equals(method) || "xhtml".equals(method) || "text".equals(method) || "xml".equals(method)) {
serializationOptions.put(method, method);
Expand Down
7 changes: 3 additions & 4 deletions src/main/java/com/xmlcalabash/drivers/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -410,8 +410,7 @@ boolean run(UserArgs userArgs, XProcConfiguration config) throws SaxonApiExcepti
if ("omit-xml-declaration".equals(name)) serial.setOmitXMLDeclaration("true".equals(value));
if ("undeclare-prefixes".equals(name)) serial.setUndeclarePrefixes("true".equals(value));
if ("method".equals(name)) serial.setMethod(new QName("", value));

// FIXME: if ("cdata-section-elements".equals(name)) serial.setCdataSectionElements();
if ("cdata-section-elements".equals(name)) serial.setCdataSectionElements(value);
if ("doctype-public".equals(name)) serial.setDoctypePublic(value);
if ("doctype-system".equals(name)) serial.setDoctypeSystem(value);
if ("encoding".equals(name)) serial.setEncoding(value);
Expand All @@ -427,7 +426,7 @@ boolean run(UserArgs userArgs, XProcConfiguration config) throws SaxonApiExcepti
"byte-order-mark", "escape-uri-attributes", "include-content-type",
"indent", "omit-xml-declaration", "undeclare-prefixes", "method",
"doctype-public", "doctype-system", "encoding", "media-type",
"normalization-form", "standalone", "version" }) {
"normalization-form", "standalone", "version", "cdata-section-elements" }) {
String value = userArgs.getSerializationParameter(port, name);
if (value == null) {
value = userArgs.getSerializationParameter(name);
Expand All @@ -443,7 +442,7 @@ boolean run(UserArgs userArgs, XProcConfiguration config) throws SaxonApiExcepti
if ("omit-xml-declaration".equals(name)) serial.setOmitXMLDeclaration("true".equals(value));
if ("undeclare-prefixes".equals(name)) serial.setUndeclarePrefixes("true".equals(value));
if ("method".equals(name)) serial.setMethod(new QName("", value));
// N.B. cdata-section-elements isn't allowed
if ("cdata-section-elements".equals(name)) serial.setCdataSectionElements(value);
if ("doctype-public".equals(name)) serial.setDoctypePublic(value);
if ("doctype-system".equals(name)) serial.setDoctypeSystem(value);
if ("encoding".equals(name)) serial.setEncoding(value);
Expand Down
21 changes: 12 additions & 9 deletions src/main/java/com/xmlcalabash/io/WritableDocument.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,24 +19,23 @@

package com.xmlcalabash.io;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;

import com.xmlcalabash.util.MessageFormatter;
import net.sf.saxon.s9api.SaxonApiException;
import net.sf.saxon.s9api.Serializer;
import net.sf.saxon.s9api.XdmNode;

import com.xmlcalabash.core.XProcException;
import com.xmlcalabash.core.XProcRuntime;
import com.xmlcalabash.io.DataStore.DataWriter;
import com.xmlcalabash.model.Serialization;
import com.xmlcalabash.model.Step;
import com.xmlcalabash.util.MessageFormatter;
import com.xmlcalabash.util.S9apiUtils;
import net.sf.saxon.s9api.SaxonApiException;
import net.sf.saxon.s9api.Serializer;
import net.sf.saxon.s9api.XdmNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;

/**
*
* @author ndw
Expand Down Expand Up @@ -154,6 +153,10 @@ public void write(final XdmNode doc) {
serializer.setOutputProperty(Serializer.Property.VERSION, serial.getVersion());
}

if (serial.getCdataSectionElements() != null) {
serializer.setOutputProperty(Serializer.Property.CDATA_SECTION_ELEMENTS, serial.getCdataSectionElements());
}

if (ostream != null) {
serializer.setOutputStream(ostream);
S9apiUtils.serialize(runtime, doc, serializer);
Expand Down
8 changes: 7 additions & 1 deletion src/main/java/com/xmlcalabash/model/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -1048,7 +1048,13 @@ private Serialization readSerialization(XdmNode node) {

value = node.getAttributeValue(new QName("cdata-section-elements"));
if (value != null) {
throw new UnsupportedOperationException("cdata-section-elements not yet supported");
StringBuilder sb = new StringBuilder();
for (String qname : value.split("\\s+")) {
QName name = new QName(qname, node);
sb.append(name.getClarkName());
sb.append(" ");
}
serial.setCdataSectionElements(sb.toString());
}

value = node.getAttributeValue(new QName("doctype-public"));
Expand Down
16 changes: 7 additions & 9 deletions src/main/java/com/xmlcalabash/model/Serialization.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@

package com.xmlcalabash.model;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import net.sf.saxon.s9api.QName;
import net.sf.saxon.s9api.XdmNode;
Expand All @@ -34,7 +36,7 @@ public class Serialization extends SourceArtifact {
private XProcConfiguration config = null;

boolean byteOrderMark;
Vector<QName> cdataSectionElements;
String cdataSectionElements;
String doctypePublic;
String doctypeSystem;
String encoding;
Expand All @@ -56,7 +58,7 @@ public Serialization(XProcRuntime xproc, XdmNode node) {
config = xproc.getConfiguration();

byteOrderMark = defValue("byte-order-mark", false);
cdataSectionElements = null; // FIXME: support cdata-section-elements
cdataSectionElements = null;
doctypePublic = defValue("doctype-public", (String) null);
doctypeSystem = defValue("doctype-system", (String) null);
encoding = defValue("encoding", (String) null);
Expand All @@ -73,11 +75,7 @@ public Serialization(XProcRuntime xproc, XdmNode node) {
}

private String defValue(String name, String defVal) {
if (config.serializationOptions.containsKey(name))
return config.serializationOptions.get(name);
else {
return defVal;
}
return config.serializationOptions.getOrDefault(name, defVal);
}

private boolean defValue(String name, boolean defVal) {
Expand All @@ -104,11 +102,11 @@ public boolean getByteOrderMark() {
return byteOrderMark;
}

public void setCdataSectionElements(Vector<QName> cdataSectionElements) {
public void setCdataSectionElements(String cdataSectionElements) {
this.cdataSectionElements = cdataSectionElements;
}

public Vector<QName> getCdataSectionElements() {
public String getCdataSectionElements() {
return cdataSectionElements;
}

Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/xmlcalabash/util/UserArgs.java
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,7 @@ public void setSerializationParameter(String port, String param, String value) {
port = "*";
}
if (param.equals("byte-order-mark")
|| param.equals("cdata-section-elements")
|| param.equals("escape-uri-attributes")
|| param.equals("include-content-type")
|| param.equals("indent")
Expand Down

0 comments on commit e00e58c

Please sign in to comment.