Response:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # DOM level 1
  Object.defineProperty @::, 'entities', get: () ->
    nodes = {}
    nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
    new XMLNamedNodeMap nodes
  Object.defineProperty @::, 'notations', get: () ->
    nodes = {}
    nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
    new XMLNamedNodeMap nodes

  # DOM level 2
  Object.defineProperty @::, 'publicId', get: () -> @pubID
  Object.defineProperty @::, 'systemId', get: () -> @sysID
  Object.defineProperty @::, 'internalSubset', get: () -> throw new Error "This DOM method is not implemented." + @debugInfo()

  # Creates an element type declaration
  #


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # DOM level 1
  Object.defineProperty @::, 'entities', get: () ->
    nodes = {}
    nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
    new XMLNamedNodeMap nodes
  Object.defineProperty @::, 'notations', get: () ->
    nodes = {}
    nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
    new XMLNamedNodeMap nodes

  # DOM level 2
  Object.defineProperty @::, 'publicId', get: () -> @pubID
  Object.defineProperty @::, 'systemId', get: () -> @sysID
  Object.defineProperty @::, 'internalSubset', get: () -> throw new Error "This DOM method is not implemented." + @debugInfo()

  # Creates an element type declaration
  #
```

Response:
var XMLDocType;

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);
      }
    }

  };

  // 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);

// Creates an element type declaration


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
var XMLDocType;

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);
      }
    }

  };

  // 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);

// Creates an element type declaration
```

Response:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # DOM level 1
  Object.defineProperty @::, 'entities', get: () ->
    nodes = {}
    nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
    new XMLNamedNodeMap nodes
  Object.defineProperty @::, 'notations', get: () ->
    nodes = {}
    nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
    new XMLNamedNodeMap nodes

  # DOM level 2
  Object.defineProperty @::, 'publicId', get: () -> @pubID
  Object.defineProperty @::, 'systemId', get: () -> @sysID
  Object.defineProperty @::, 'internalSubset', get: () -> throw new Error "This DOM method is not implemented." + @debugInfo()

  # Creates an element type declaration
  #


Prompt:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

Response:
if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # DOM level 1
  Object.defineProperty @::, 'entities', get: () ->
    nodes = {}
    nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
    new XMLNamedNodeMap nodes
  Object.defineProperty @::, 'notations', get: () ->
    nodes = {}
    nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
    new XMLNamedNodeMap nodes

  # DOM level 2
  Object.defineProperty @::, 'publicId', get: () -> @pubID
  Object.defineProperty @::, 'systemId', get: () -> @sysID
  Object.defineProperty @::, 'internalSubset', get: () -> throw new Error "This DOM method is not implemented." + @debugInfo()

  # Creates an element type declaration
  #


Response:
# `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # Creates a NOTATION declaration
  #


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
# `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # Creates a NOTATION declaration
  #
```

Response:
// `name` element name
// `value` element content (defaults to #PCDATA)
({
  element: function(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: function(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: function(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: function(name, value) {
    var child;
    child = new XMLDTDEntity(this, true, name, value);
    this.children.push(child);
    return this;
  }
});

// Creates a NOTATION declaration


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
// `name` element name
// `value` element content (defaults to #PCDATA)
({
  element: function(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: function(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: function(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: function(name, value) {
    var child;
    child = new XMLDTDEntity(this, true, name, value);
    this.children.push(child);
    return this;
  }
});

// Creates a NOTATION declaration
```

Response:
# `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # Creates a NOTATION declaration
  #


Prompt:
# `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # Creates a general entity declaration
  #

Response:
# `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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # Creates a NOTATION declaration
  #


Response:
# `name` the name of the notation
  # `value` an object with external entity details
  # `value.pubID` public identifier
  # `value.sysID` system identifier
  notation: (name, value) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject

  isEqualNode: (node) ->
    if not super.isEqualNode(node) then return false
    if node.name isnt @name then return false
    if node.publicId isnt @publicId then return false
    if node.systemId isnt @systemId then return false
    return true


Prompt:
# `name` the name of the notation
  # `value` an object with external entity details
  # `value.pubID` public identifier
  # `value.sysID` system identifier
  notation: (name, value) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

Response:
# Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject

  isEqualNode: (node) ->
    if not super.isEqualNode(node) then return false
    if node.name isnt @name then return false
    if node.publicId isnt @publicId then return false
    if node.systemId isnt @systemId then return false
    return true


Response:
# `name` the name of the notation
  # `value` an object with external entity details
  # `value.pubID` public identifier
  # `value.sysID` system identifier
  notation: (name, value) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
# `name` the name of the notation
  # `value` an object with external entity details
  # `value.pubID` public identifier
  # `value.sysID` system identifier
  notation: (name, value) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject
```

Response:
// `name` the name of the notation
// `value` an object with external entity details
// `value.pubID` public identifier
// `value.sysID` system identifier
({
  notation: function(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: function(options) {
    return this.options.writer.docType(this, this.options.writer.filterOptions(options));
  },
  // Aliases
  ele: function(name, value) {
    return this.element(name, value);
  },
  att: function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
    return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
  },
  ent: function(name, value) {
    return this.entity(name, value);
  },
  pent: function(name, value) {
    return this.pEntity(name, value);
  },
  not: function(name, value) {
    return this.notation(name, value);
  },
  up: function() {
    return this.root() || this.documentObject;
  }
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
// `name` the name of the notation
// `value` an object with external entity details
// `value.pubID` public identifier
// `value.sysID` system identifier
({
  notation: function(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: function(options) {
    return this.options.writer.docType(this, this.options.writer.filterOptions(options));
  },
  // Aliases
  ele: function(name, value) {
    return this.element(name, value);
  },
  att: function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
    return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
  },
  ent: function(name, value) {
    return this.entity(name, value);
  },
  pent: function(name, value) {
    return this.pEntity(name, value);
  },
  not: function(name, value) {
    return this.notation(name, value);
  },
  up: function() {
    return this.root() || this.documentObject;
  }
});
```

Response:
# `name` the name of the notation
  # `value` an object with external entity details
  # `value.pubID` public identifier
  # `value.sysID` system identifier
  notation: (name, value) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject


Prompt:
# `name` the name of the notation
  # `value` an object with external entity details
  # `value.pubID` public identifier
  # `value.sysID` system identifier
  notation: (name, value) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # Converts to string
  #
  # `options.pretty` pretty prints the result
  # `options.indent` indentation for pretty print

Response:
# `options.offset` how many indentations to add to every line for pretty print
  # `options.newline` newline sequence for pretty print
  toString: (options) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject


Response:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

    # DOM level 1
    Object.defineProperty @, 'entities', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
      new XMLNamedNodeMap nodes
    Object.defineProperty @, 'notations', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
      new XMLNamedNodeMap nodes

    # DOM level 2
    Object.defineProperty @, 'publicId', get: () -> @pubID
    Object.defineProperty @, 'systemId', get: () -> @sysID
    Object.defineProperty @, 'internalSubset', get: () -> throw new Error "This DOM method is not implemented." + @debugInfo()

  # Creates an element type declaration
  #


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

    # DOM level 1
    Object.defineProperty @, 'entities', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
      new XMLNamedNodeMap nodes
    Object.defineProperty @, 'notations', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
      new XMLNamedNodeMap nodes

    # DOM level 2
    Object.defineProperty @, 'publicId', get: () -> @pubID
    Object.defineProperty @, 'systemId', get: () -> @sysID
    Object.defineProperty @, 'internalSubset', get: () -> throw new Error "This DOM method is not implemented." + @debugInfo()

  # Creates an element type declaration
  #
```

Response:
var XMLDocType;

module.exports = XMLDocType = 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);
    }
    // DOM level 1
    Object.defineProperty(this, 'entities', {
      get: function() {
        var j, len1, nodes, ref1;
        nodes = {};
        ref1 = this.children;
        for (j = 0, len1 = ref1.length; j < len1; j++) {
          child = ref1[j];
          if ((child.type === NodeType.EntityDeclaration) && !child.pe) {
            nodes[child.name] = child;
          }
        }
        return new XMLNamedNodeMap(nodes);
      }
    });
    Object.defineProperty(this, 'notations', {
      get: function() {
        var j, len1, nodes, ref1;
        nodes = {};
        ref1 = this.children;
        for (j = 0, len1 = ref1.length; j < len1; j++) {
          child = ref1[j];
          if (child.type === NodeType.NotationDeclaration) {
            nodes[child.name] = child;
          }
        }
        return new XMLNamedNodeMap(nodes);
      }
    });
    // DOM level 2
    Object.defineProperty(this, 'publicId', {
      get: function() {
        return this.pubID;
      }
    });
    Object.defineProperty(this, 'systemId', {
      get: function() {
        return this.sysID;
      }
    });
    Object.defineProperty(this, 'internalSubset', {
      get: function() {
        throw new Error("This DOM method is not implemented." + this.debugInfo());
      }
    });
  }

};

// Creates an element type declaration


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
var XMLDocType;

module.exports = XMLDocType = 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);
    }
    // DOM level 1
    Object.defineProperty(this, 'entities', {
      get: function() {
        var j, len1, nodes, ref1;
        nodes = {};
        ref1 = this.children;
        for (j = 0, len1 = ref1.length; j < len1; j++) {
          child = ref1[j];
          if ((child.type === NodeType.EntityDeclaration) && !child.pe) {
            nodes[child.name] = child;
          }
        }
        return new XMLNamedNodeMap(nodes);
      }
    });
    Object.defineProperty(this, 'notations', {
      get: function() {
        var j, len1, nodes, ref1;
        nodes = {};
        ref1 = this.children;
        for (j = 0, len1 = ref1.length; j < len1; j++) {
          child = ref1[j];
          if (child.type === NodeType.NotationDeclaration) {
            nodes[child.name] = child;
          }
        }
        return new XMLNamedNodeMap(nodes);
      }
    });
    // DOM level 2
    Object.defineProperty(this, 'publicId', {
      get: function() {
        return this.pubID;
      }
    });
    Object.defineProperty(this, 'systemId', {
      get: function() {
        return this.sysID;
      }
    });
    Object.defineProperty(this, 'internalSubset', {
      get: function() {
        throw new Error("This DOM method is not implemented." + this.debugInfo());
      }
    });
  }

};

// Creates an element type declaration
```

Response:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

    # DOM level 1
    Object.defineProperty @, 'entities', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
      new XMLNamedNodeMap nodes
    Object.defineProperty @, 'notations', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
      new XMLNamedNodeMap nodes

    # DOM level 2
    Object.defineProperty @, 'publicId', get: () -> @pubID
    Object.defineProperty @, 'systemId', get: () -> @sysID
    Object.defineProperty @, 'internalSubset', get: () -> throw new Error "This DOM method is not implemented." + @debugInfo()

  # Creates an element type declaration
  #


Prompt:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

Response:
if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

    # DOM level 1
    Object.defineProperty @, 'entities', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
      new XMLNamedNodeMap nodes
    Object.defineProperty @, 'notations', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
      new XMLNamedNodeMap nodes

    # DOM level 2
    Object.defineProperty @, 'publicId', get: () -> @pubID
    Object.defineProperty @, 'systemId', get: () -> @sysID
    Object.defineProperty @, 'internalSubset', get: () -> throw new Error "This DOM method is not implemented." + @debugInfo()

  # Creates an element type declaration
  #


Response:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

    # DOM level 1
    Object.defineProperty @, 'entities', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
      new XMLNamedNodeMap nodes
    Object.defineProperty @, 'notations', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
      new XMLNamedNodeMap nodes

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

    # DOM level 1
    Object.defineProperty @, 'entities', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
      new XMLNamedNodeMap nodes
    Object.defineProperty @, 'notations', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
      new XMLNamedNodeMap nodes

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
```

Response:
var XMLDocType;

module.exports = XMLDocType = 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);
    }
    // DOM level 1
    Object.defineProperty(this, 'entities', {
      get: function() {
        var j, len1, nodes, ref1;
        nodes = {};
        ref1 = this.children;
        for (j = 0, len1 = ref1.length; j < len1; j++) {
          child = ref1[j];
          if ((child.type === NodeType.EntityDeclaration) && !child.pe) {
            nodes[child.name] = child;
          }
        }
        return new XMLNamedNodeMap(nodes);
      }
    });
    Object.defineProperty(this, 'notations', {
      get: function() {
        var j, len1, nodes, ref1;
        nodes = {};
        ref1 = this.children;
        for (j = 0, len1 = ref1.length; j < len1; j++) {
          child = ref1[j];
          if (child.type === NodeType.NotationDeclaration) {
            nodes[child.name] = child;
          }
        }
        return new XMLNamedNodeMap(nodes);
      }
    });
  }

  // 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);
    return this.children.push(child);
  }

};


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
var XMLDocType;

module.exports = XMLDocType = 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);
    }
    // DOM level 1
    Object.defineProperty(this, 'entities', {
      get: function() {
        var j, len1, nodes, ref1;
        nodes = {};
        ref1 = this.children;
        for (j = 0, len1 = ref1.length; j < len1; j++) {
          child = ref1[j];
          if ((child.type === NodeType.EntityDeclaration) && !child.pe) {
            nodes[child.name] = child;
          }
        }
        return new XMLNamedNodeMap(nodes);
      }
    });
    Object.defineProperty(this, 'notations', {
      get: function() {
        var j, len1, nodes, ref1;
        nodes = {};
        ref1 = this.children;
        for (j = 0, len1 = ref1.length; j < len1; j++) {
          child = ref1[j];
          if (child.type === NodeType.NotationDeclaration) {
            nodes[child.name] = child;
          }
        }
        return new XMLNamedNodeMap(nodes);
      }
    });
  }

  // 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);
    return this.children.push(child);
  }

};
```

Response:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

    # DOM level 1
    Object.defineProperty @, 'entities', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
      new XMLNamedNodeMap nodes
    Object.defineProperty @, 'notations', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
      new XMLNamedNodeMap nodes

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child


Prompt:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

Response:
if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

    # DOM level 1
    Object.defineProperty @, 'entities', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when (child.type is NodeType.EntityDeclaration) and not child.pe
      new XMLNamedNodeMap nodes
    Object.defineProperty @, 'notations', get: () ->
      nodes = {}
      nodes[child.name] = child for child in @children when child.type is NodeType.NotationDeclaration
      new XMLNamedNodeMap nodes

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child


Response:
return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # 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) ->


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # 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) ->
```

Response:
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: function(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: function(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: function(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: function(name, value) {}
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
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: function(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: function(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: function(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: function(name, value) {}
});
```

Response:
return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # 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) ->


Prompt:
return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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

Response:
entity: (name, value) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # 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) ->


Response:
child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject


Prompt:
child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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

Response:
toString: (options) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject


Response:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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)


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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)
```

Response:
var XMLDocType;

module.exports = XMLDocType = 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)


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
var XMLDocType;

module.exports = XMLDocType = 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)
```

Response:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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)


Prompt:
module.exports = 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) ->
    super parent

    @type = NodeType.DocType
    # set DTD name to the name of the root node
    if parent.children
      for child in parent.children
        if child.type is NodeType.Element
          @name = child.name
          break

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

Response:
if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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)


Response:
# `defaultValue` default value of the attribute
  #                (only used for #FIXED or #DEFAULT)
  attList: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
# `defaultValue` default value of the attribute
  #                (only used for #FIXED or #DEFAULT)
  attList: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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
```

Response:
// `defaultValue` default value of the attribute
//                (only used for #FIXED or #DEFAULT)
({
  attList: function(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: function(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: function(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: function(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


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
// `defaultValue` default value of the attribute
//                (only used for #FIXED or #DEFAULT)
({
  attList: function(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: function(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: function(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: function(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
```

Response:
# `defaultValue` default value of the attribute
  #                (only used for #FIXED or #DEFAULT)
  attList: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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


Prompt:
# `defaultValue` default value of the attribute
  #                (only used for #FIXED or #DEFAULT)
  attList: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # Creates a parameter entity declaration
  #
  # `name` the name of the entity
  # `value` internal entity value or an object with external entity details

Response:
# `value.pubID` public identifier
  # `value.sysID` system identifier
  pEntity: (name, value) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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


Response:
# `options.newline` newline sequence for pretty print
  toString: (options) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
# `options.newline` newline sequence for pretty print
  toString: (options) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject
```

Response:
// `options.newline` newline sequence for pretty print
({
  toString: function(options) {
    return this.options.writer.docType(this, this.options.writer.filterOptions(options));
  },
  // Aliases
  ele: function(name, value) {
    return this.element(name, value);
  },
  att: function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
    return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
  },
  ent: function(name, value) {
    return this.entity(name, value);
  },
  pent: function(name, value) {
    return this.pEntity(name, value);
  },
  not: function(name, value) {
    return this.notation(name, value);
  },
  up: function() {
    return this.root() || this.documentObject;
  }
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
// `options.newline` newline sequence for pretty print
({
  toString: function(options) {
    return this.options.writer.docType(this, this.options.writer.filterOptions(options));
  },
  // Aliases
  ele: function(name, value) {
    return this.element(name, value);
  },
  att: function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
    return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
  },
  ent: function(name, value) {
    return this.entity(name, value);
  },
  pent: function(name, value) {
    return this.pEntity(name, value);
  },
  not: function(name, value) {
    return this.notation(name, value);
  },
  up: function() {
    return this.root() || this.documentObject;
  }
});
```

Response:
# `options.newline` newline sequence for pretty print
  toString: (options) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases
  ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject


Prompt:
# `options.newline` newline sequence for pretty print
  toString: (options) ->
    @options.writer.docType @, @options.writer.filterOptions(options)

  # Aliases

Response:
ele: (name, value) -> @element name, value
  att: (elementName, attributeName, attributeType, defaultValueType, defaultValue) ->
    @attList elementName, attributeName, attributeType, defaultValueType, defaultValue
  ent: (name, value) -> @entity name, value
  pent: (name, value) -> @pEntity name, value
  not: (name, value) -> @notation name, value
  up: () -> @root() or @documentObject


Response:
module.exports = 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) ->
    super parent

    @name = "!DOCTYPE"
    @type = NodeType.DocType

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
module.exports = 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) ->
    super parent

    @name = "!DOCTYPE"
    @type = NodeType.DocType

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child
```

Response:
var XMLDocType;

module.exports = XMLDocType = 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) {
    super(parent);
    this.name = "!DOCTYPE";
    this.type = NodeType.DocType;
    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);
    return this.children.push(child);
  }

};


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
var XMLDocType;

module.exports = XMLDocType = 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) {
    super(parent);
    this.name = "!DOCTYPE";
    this.type = NodeType.DocType;
    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);
    return this.children.push(child);
  }

};
```

Response:
module.exports = 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) ->
    super parent

    @name = "!DOCTYPE"
    @type = NodeType.DocType

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?
    @sysID = @stringify.dtdSysID sysID if sysID?

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child


Prompt:
module.exports = 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) ->
    super parent

    @name = "!DOCTYPE"
    @type = NodeType.DocType

    @documentObject = parent

    # arguments may also be passed as an object
    if isObject pubID
      { pubID, sysID } = pubID

    if not sysID?
      [sysID, pubID] = [pubID, sysID]

    @pubID = @stringify.dtdPubID pubID if pubID?

Response:
@sysID = @stringify.dtdSysID sysID if sysID?

  # Creates an element type declaration
  #
  # `name` element name
  # `value` element content (defaults to #PCDATA)
  element: (name, value) ->
    child = new XMLDTDElement @, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDAttList @, elementName, attributeName, attributeType, defaultValueType, defaultValue
    @children.push child


Response:
return @

  # 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) ->
    child = new XMLDTDEntity @, false, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDEntity @, true, name, value
    @children.push child
    return @

  # 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) ->
    child = new XMLDTDNotation @, name, value
    @children.push child
    return @

  # 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) ->
    @options.writer.docType @, @options.writer.filterOptions(options)