'use strict';

var _commonjsHelpers = require('../../../_virtual/_commonjsHelpers.js');
var XMLDTDAttList = require('../../../_virtual/XMLDTDAttList.js');
var XMLNode = require('./XMLNode.js');
var NodeType = require('./NodeType.js');

var hasRequiredXMLDTDAttList;

function requireXMLDTDAttList () {
	if (hasRequiredXMLDTDAttList) return XMLDTDAttList.__module.exports;
	hasRequiredXMLDTDAttList = 1;
	// Generated by CoffeeScript 1.12.7
	(function() {
	  var NodeType$1, XMLNode$1,
	    extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
	    hasProp = {}.hasOwnProperty;

	  XMLNode$1 = XMLNode.__require();

	  NodeType$1 = NodeType.__require();

	  XMLDTDAttList.__module.exports = (function(superClass) {
	    extend(XMLDTDAttList, superClass);

	    function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {
	      XMLDTDAttList.__super__.constructor.call(this, parent);
	      if (elementName == null) {
	        throw new Error("Missing DTD element name. " + this.debugInfo());
	      }
	      if (attributeName == null) {
	        throw new Error("Missing DTD attribute name. " + this.debugInfo(elementName));
	      }
	      if (!attributeType) {
	        throw new Error("Missing DTD attribute type. " + this.debugInfo(elementName));
	      }
	      if (!defaultValueType) {
	        throw new Error("Missing DTD attribute default. " + this.debugInfo(elementName));
	      }
	      if (defaultValueType.indexOf('#') !== 0) {
	        defaultValueType = '#' + defaultValueType;
	      }
	      if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {
	        throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. " + this.debugInfo(elementName));
	      }
	      if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {
	        throw new Error("Default value only applies to #FIXED or #DEFAULT. " + this.debugInfo(elementName));
	      }
	      this.elementName = this.stringify.name(elementName);
	      this.type = NodeType$1.AttributeDeclaration;
	      this.attributeName = this.stringify.name(attributeName);
	      this.attributeType = this.stringify.dtdAttType(attributeType);
	      if (defaultValue) {
	        this.defaultValue = this.stringify.dtdAttDefault(defaultValue);
	      }
	      this.defaultValueType = defaultValueType;
	    }

	    XMLDTDAttList.prototype.toString = function(options) {
	      return this.options.writer.dtdAttList(this, this.options.writer.filterOptions(options));
	    };

	    return XMLDTDAttList;

	  })(XMLNode$1);

	}).call(_commonjsHelpers.commonjsGlobal);
	return XMLDTDAttList.__module.exports;
}

exports.__require = requireXMLDTDAttList;
