xmlbuilder
Version:
An XML builder for node.js
236 lines (196 loc) • 6.94 kB
JavaScript
// Generated by CoffeeScript 2.4.1
(function() {
var NodeType, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLNamedNodeMap, XMLNode, isObject;
({isObject} = require('./Utility'));
XMLNode = require('./XMLNode');
NodeType = require('./NodeType');
XMLDTDAttList = require('./XMLDTDAttList');
XMLDTDEntity = require('./XMLDTDEntity');
XMLDTDElement = require('./XMLDTDElement');
XMLDTDNotation = require('./XMLDTDNotation');
XMLNamedNodeMap = require('./XMLNamedNodeMap');
// Represents doctype declaration
module.exports = XMLDocType = (function() {
class XMLDocType extends XMLNode {
// Initializes a new instance of `XMLDocType`
// `parent` the document object
// `pubID` public identifier of the external subset
// `sysID` system identifier of the external subset
constructor(parent, pubID, sysID) {
var child, i, len, ref;
super(parent);
this.type = NodeType.DocType;
// set DTD name to the name of the root node
if (parent.children) {
ref = parent.children;
for (i = 0, len = ref.length; i < len; i++) {
child = ref[i];
if (child.type === NodeType.Element) {
this.name = child.name;
break;
}
}
}
this.documentObject = parent;
// arguments may also be passed as an object
if (isObject(pubID)) {
({pubID, sysID} = pubID);
}
if (sysID == null) {
[sysID, pubID] = [pubID, sysID];
}
if (pubID != null) {
this.pubID = this.stringify.dtdPubID(pubID);
}
if (sysID != null) {
this.sysID = this.stringify.dtdSysID(sysID);
}
}
// Creates an element type declaration
// `name` element name
// `value` element content (defaults to #PCDATA)
element(name, value) {
var child;
child = new XMLDTDElement(this, name, value);
this.children.push(child);
return this;
}
// Creates an attribute declaration
// `elementName` the name of the element containing this attribute
// `attributeName` attribute name
// `attributeType` type of the attribute (defaults to CDATA)
// `defaultValueType` default value type (either #REQUIRED, #IMPLIED, #FIXED or
// #DEFAULT) (defaults to #IMPLIED)
// `defaultValue` default value of the attribute
// (only used for #FIXED or #DEFAULT)
attList(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
var child;
child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);
this.children.push(child);
return this;
}
// Creates a general entity declaration
// `name` the name of the entity
// `value` internal entity value or an object with external entity details
// `value.pubID` public identifier
// `value.sysID` system identifier
// `value.nData` notation declaration
entity(name, value) {
var child;
child = new XMLDTDEntity(this, false, name, value);
this.children.push(child);
return this;
}
// Creates a parameter entity declaration
// `name` the name of the entity
// `value` internal entity value or an object with external entity details
// `value.pubID` public identifier
// `value.sysID` system identifier
pEntity(name, value) {
var child;
child = new XMLDTDEntity(this, true, name, value);
this.children.push(child);
return this;
}
// Creates a NOTATION declaration
// `name` the name of the notation
// `value` an object with external entity details
// `value.pubID` public identifier
// `value.sysID` system identifier
notation(name, value) {
var child;
child = new XMLDTDNotation(this, name, value);
this.children.push(child);
return this;
}
// Converts to string
// `options.pretty` pretty prints the result
// `options.indent` indentation for pretty print
// `options.offset` how many indentations to add to every line for pretty print
// `options.newline` newline sequence for pretty print
toString(options) {
return this.options.writer.docType(this, this.options.writer.filterOptions(options));
}
// Aliases
ele(name, value) {
return this.element(name, value);
}
att(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
}
ent(name, value) {
return this.entity(name, value);
}
pent(name, value) {
return this.pEntity(name, value);
}
not(name, value) {
return this.notation(name, value);
}
up() {
return this.root() || this.documentObject;
}
isEqualNode(node) {
if (!super.isEqualNode(node)) {
return false;
}
if (node.name !== this.name) {
return false;
}
if (node.publicId !== this.publicId) {
return false;
}
if (node.systemId !== this.systemId) {
return false;
}
return true;
}
};
// DOM level 1
Object.defineProperty(XMLDocType.prototype, 'entities', {
get: function() {
var child, i, len, nodes, ref;
nodes = {};
ref = this.children;
for (i = 0, len = ref.length; i < len; i++) {
child = ref[i];
if ((child.type === NodeType.EntityDeclaration) && !child.pe) {
nodes[child.name] = child;
}
}
return new XMLNamedNodeMap(nodes);
}
});
Object.defineProperty(XMLDocType.prototype, 'notations', {
get: function() {
var child, i, len, nodes, ref;
nodes = {};
ref = this.children;
for (i = 0, len = ref.length; i < len; i++) {
child = ref[i];
if (child.type === NodeType.NotationDeclaration) {
nodes[child.name] = child;
}
}
return new XMLNamedNodeMap(nodes);
}
});
// DOM level 2
Object.defineProperty(XMLDocType.prototype, 'publicId', {
get: function() {
return this.pubID;
}
});
Object.defineProperty(XMLDocType.prototype, 'systemId', {
get: function() {
return this.sysID;
}
});
Object.defineProperty(XMLDocType.prototype, 'internalSubset', {
get: function() {
throw new Error("This DOM method is not implemented." + this.debugInfo());
}
});
return XMLDocType;
}).call(this);
}).call(this);