// Based on https://github.com/SATToSE/SoTeSoLa2012/blob/master/hackathon/modisco-eclipse/org.eclipse.gmt.modisco.tool.metricsvisualizationbuilder/Metamodels/HTML.ecore

@namespace(uri="HTML", prefix="HTML")
package HTML;
  
  class HTML {
    !ordered val HEAD[1]#html head;
    !ordered val BODY[1]#html body;
  }

  class HTMLElement {
    !unique !ordered attr EString[1] value;
    !ordered val HTMLElement[*] children;
  }

  class HEAD extends HTMLElement {
    !ordered val HEADElement[*]#head headElements;
    !ordered ref HTML[1]#head html;
  }

  abstract class HEADElement extends HTMLElement {
    !ordered ref HEAD[1]#headElements head;
  }

  class LINK extends HEADElement {
    !unique !ordered attr EString[1] rel;
    !unique !ordered attr EString[1] title;
    !unique !ordered attr EString[1] ahref;
    !unique !ordered attr EString[1] type;
  }

  class TITLE extends HEADElement {
  }

  class BODY extends HTMLElement {
    !unique !ordered attr EString[1] background;
    !unique !ordered attr EString[1] bgcolor;
    !unique !ordered attr EString[1] text;
    !unique !ordered attr EString[1] link;
    !unique !ordered attr EString[1] alink;
    !unique !ordered attr EString[1] vlink;
    !ordered val BODYElement[*] bodyElements;
    !ordered ref HTML[1]#body html;
  }

  abstract class BODYElement extends HTMLElement {
  }

  class H1 extends BODYElement {
  }

  class H2 extends BODYElement {
  }

  class H3 extends BODYElement {
  }

  class H4 extends BODYElement {
  }

  class EM extends BODYElement {
  }

  class STRONG extends BODYElement {
  }

  class B extends BODYElement {
  }

  class I extends BODYElement {
  }

  class TT extends BODYElement {
  }

  class PRE extends BODYElement {
  }

  class BIG extends BODYElement {
  }

  class SMALL extends BODYElement {
  }

  class SUB extends BODYElement {
  }

  class SUP extends BODYElement {
  }

  class STRIKE extends BODYElement {
  }

  class FONT extends BODYElement {
    !unique !ordered attr EString[1] color;
    !unique !ordered attr EString[1] face;
    !unique !ordered attr EString[1] size;
  }

  class IMG extends BODYElement {
    !unique !ordered attr EString[1] src;
    !unique !ordered attr EString[1] width;
    !unique !ordered attr EString[1] height;
    !unique !ordered attr EString[1] alt;
    !unique !ordered attr EString[1] align;
    !unique !ordered attr EString[1] vspace;
    !unique !ordered attr EString[1] hspace;
    !unique !ordered attr EString[1] ismap;
    !unique !ordered attr EString[1] usemap;
    !unique !ordered attr EString[1] border;
  }

  class BR extends BODYElement {
    !unique !ordered attr EString[1] clear;
  }

  class MAP extends BODYElement {
  }

  class AREA extends BODYElement {
    !unique !ordered attr EString[1] shape;
    !unique !ordered attr EString[1] coords;
    !unique !ordered attr EString[1] ahref;
  }

  class STYLE extends BODYElement {
  }

  class EMBED extends BODYElement {
    !unique !ordered attr EString[1] src;
    !unique !ordered attr EString[1] width;
    !unique !ordered attr EString[1] height;
    !unique !ordered attr EString[1] align;
    !unique !ordered attr EString[1] vspace;
    !unique !ordered attr EString[1] hspace;
    !unique !ordered attr EString[1] border;
  }

  class NOEMBED extends BODYElement {
  }

  class SPAN extends BODYElement {
    !unique !ordered attr EString[1] style;
  }

  class A extends BODYElement {
    !unique !ordered attr EString[1] ahref;
    !unique !ordered attr EString[1] name;
    !unique !ordered attr EString[1] ~id;
  }

  class DIV extends BODYElement {
    !unique !ordered attr EString[1] align;
  }

  class P extends BODYElement {
  }

  abstract class TABLEElement extends BODYElement {
    !unique !ordered attr EString[1] bgcolor;
    !unique !ordered attr EString[1] background;
  }

  class TABLE extends TABLEElement {
    !unique !ordered attr EString[1] border;
    !unique !ordered attr EString[1] width;
    !unique !ordered attr EString[1] cellspacing;
    !unique !ordered attr EString[1] cellpadding;
    !ordered val TR[*]#table trs;
  }

  class TR extends TABLEElement {
    !unique !ordered attr EString[1] valign;
    !unique !ordered attr EString[1] align;
    !ordered ref TABLE[1]#trs table;
    !ordered val TD[*]#tr tds;
  }

  class TD extends TABLEElement {
    !unique !ordered attr EString[1] colspan;
    !unique !ordered attr EString[1] rowspan;
    !unique !ordered attr EString[1] valign;
    !unique !ordered attr EString[1] align;
    !unique !ordered attr EString[1] width;
    !ordered ref TR[1]#tds tr;
  }

  class TH extends TD {
  }

  class FORM {
    !unique !ordered attr EString[1] action;
    !unique !ordered attr EString[1] method;
  }

  class INPUT {
    !unique !ordered attr EString[1] align;
    !unique !ordered attr EString[1] maxlength;
    !unique !ordered attr EString[1] size;
    !unique !ordered attr EString[1] checked;
    !unique !ordered attr EString[1] src;
    !unique !ordered attr EString[1] inputValue;
    !unique !ordered attr EString[1] name;
    !unique !ordered attr EString[1] type;
  }

  class TEXTAREA {
    !unique !ordered attr EString[1] name;
    !unique !ordered attr EString[1] rows;
    !unique !ordered attr EString[1] cols;
  }

  class SELECT {
    !unique !ordered attr EString[1] multiple;
    !unique !ordered attr EString[1] size;
    !unique !ordered attr EString[1] name;
  }

  class OPTION {
    !unique !ordered attr EString[1] selected;
    !unique !ordered attr EString[1] optionValue;
  }

  abstract class ListElement {
    !unique !ordered attr EString[1] type;
  }

  class OL extends ListElement {
    !unique !ordered attr EString[1] start;
  }

  class UL extends ListElement {
  }

  class LI extends ListElement {
    !unique !ordered attr EString[1] liValue;
  }

  class DL {
  }

  class DT {
  }

  class DD {
  }

  class APPLET {
    !unique !ordered attr EString[1] applet;
    !unique !ordered attr EString[1] ~class;
    !unique !ordered attr EString[1] src;
    !unique !ordered attr EString[1] align;
    !unique !ordered attr EString[1] width;
    !unique !ordered attr EString[1] height;
  }

  class PARAM {
    !unique !ordered attr EString[1] name;
    !unique !ordered attr EString[1] paramValue;
  }

  class OBJECT {
    !unique !ordered attr EString[1] classid;
    !unique !ordered attr EString[1] ~id;
    !unique !ordered attr EString[1] data;
    !unique !ordered attr EString[1] type;
    !unique !ordered attr EString[1] standby;
  }

  class FRAMESET {
    !unique !ordered attr EString[1] rows;
    !unique !ordered attr EString[1] cols;
    !unique !ordered attr EString[1] framespacing;
    !unique !ordered attr EString[1] frameborder;
    !unique !ordered attr EString[1] border;
  }

  class FRAME {
    !unique !ordered attr EString[1] src;
    !unique !ordered attr EString[1] name;
    !unique !ordered attr EString[1] marginwidth;
    !unique !ordered attr EString[1] marginheight;
    !unique !ordered attr EString[1] scrolling;
    !unique !ordered attr EString[1] noresize;
  }

  class NOFRAME {
  }

  class IFRAME extends FRAME {
  }

