// Path: shared/src/main/java/org/kobjects/nativehtml/io/RequestHandler.java
// public interface RequestHandler {
//   void openLink(URI uri);
// 
// }
// 
// Path: shared/src/main/java/org/kobjects/nativehtml/layout/WebSettings.java
// public class WebSettings {
//   float scale = 1;
//   public float getScale() {
//     return scale;
//   }
//   public void setScale(float scale) {
//     this.scale = scale;
//   }
// }
// 
// Path: shared/src/main/java/org/kobjects/nativehtml/util/ElementImpl.java
// public class ElementImpl implements Element {
//   
//   public static String getTextContent(Element element) {
//     StringBuilder sb = new StringBuilder();
//     HtmlCollection children = element.getChildren();
//     for (int i = 0; i < children.getLength(); i++) {
//         sb.append(children.item(i).getTextContent());
//     }
//     return sb.toString();
//   }
// 
//   
// 	protected ElementType elementType;
//     protected Element parent;
//     protected String name;
//     protected Document document;
//     protected HashMap<String, String> attributes;
//     protected CssStyleDeclaration style;
//     protected CssStyleDeclaration computedStyle;
//     protected String textContent;
//     protected HtmlCollectionImpl children;
//     protected ContentType contentType;
//     
//     public ElementImpl(Document document, String name, ElementType elementType, ContentType contentType) {
//     	this.document = document;
//         this.elementType = elementType;
//         this.name = name;
//         this.contentType = contentType;
//     }
// 
//     @Override
//     public String getLocalName() {
//         return name;
//     }
// 
//     @Override
//     public HtmlCollection getChildren() {
//         return children == null ? HtmlCollection.EMPTY : children;
//     }
//     
//     @Override
//     public Element getParentElement() {
//         return parent;
//     }
// 
//     @Override
//     public void setParentElement(Element parent) {
//         this.parent = parent;
//     }
// 
// 
//     @Override
//     public CssStyleDeclaration getStyle() {
//         return style;
//     }
// 
//     @Override
//     public CssStyleDeclaration getComputedStyle() {
//         return computedStyle;
//     }
// 
//     @Override
//     public void setComputedStyle(CssStyleDeclaration computedStyle) {
//     	this.computedStyle = computedStyle;
//     }
// 
//     @Override
//     public void setAttribute(String name, String value) {
//         if (attributes == null) {
//             attributes = new HashMap<>();
//         }
//         attributes.put(name, value);
//         if (name.equals("style")) {
//         	style = CssStyleDeclaration.fromString(value);
//         }
//     }
// 
//     @Override
//     public String getAttribute(String name) {
//         return attributes == null ? null : attributes.get(name);
//     }
//     
// 	@Override
// 	public void setTextContent(String textContent) {
// 		this.textContent = textContent;
// 		this.children = null;
// 	}
// 
// 	@Override
// 	public void insertBefore(Element newChild, Element referenceChild) {
// 		int index;
// 		if (children == null) {
// 			children = new HtmlCollectionImpl();
// 			index = 0;
// 		} else if (referenceChild != null && children != null) {
// 			index = children.indexOf(referenceChild);
// 			if (index == -1) {
// 				index = children.getLength();
// 			}
// 		} else {
// 			index = children.getLength();
// 		}
// 		children.add(index, newChild);
// 		newChild.setParentElement(this);
// 	}
// 
// 	@Override
// 	public ElementType getElementType() {
// 		return elementType;
// 	}
// 
// 	@Override
// 	public String getTextContent() {
// 		if (textContent != null) {
// 			return textContent;
// 		}
// 		if (children == null || children.getLength() == 0) {
// 			return "";
// 		}
// 		return getTextContent(this);
// 	}
// 
// 	@Override
// 	public ContentType getElementContentType() {
// 		return contentType;
// 	}
// 
//   @Override
//   public Document getOwnerDocument() {
//     return document;
//   }
// 
// }


import java.net.URI;
import java.net.URISyntaxException;
import java.util.LinkedHashMap;
import org.kobjects.nativehtml.io.RequestHandler;
import org.kobjects.nativehtml.layout.WebSettings;
import org.kobjects.nativehtml.util.ElementImpl;
        add("meta", ElementType.DATA, ContentType.EMPTY);
        add("option", ElementType.DATA, ContentType.TEXT_ONLY);
        add("script", ElementType.DATA, ContentType.TEXT_ONLY);
        add("select", ElementType.COMPONENT, ContentType.DATA_ELEMENTS);
        add("small", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("span", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("strike", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("strong", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("style", ElementType.DATA, ContentType.TEXT_ONLY);
        add("sub", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("sup", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("tbody", ElementType.SKIP, ContentType.COMPONENTS);
        add("text-component", ElementType.COMPONENT, ContentType.FORMATTED_TEXT);
        add("thead", ElementType.SKIP, ContentType.COMPONENTS);
        add("title", ElementType.DATA, ContentType.TEXT_ONLY);
        add("tt", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("u", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
    }

    public static ElementType getElementType(String name) {
        ElementType result = ELEMENT_TYPES.get(name);
        return result == null ? ElementType.COMPONENT : result;
    }

    private static ContentType getContentType(String name) {
        ContentType result = CONTENT_TYPES.get(name);
        return result == null ? ContentType.COMPONENTS : result;
    }

	private final Platform platform;
// Path: shared/src/main/java/org/kobjects/nativehtml/io/RequestHandler.java
// public interface RequestHandler {
//   void openLink(URI uri);
// 
// }
// 
// Path: shared/src/main/java/org/kobjects/nativehtml/layout/WebSettings.java
// public class WebSettings {
//   float scale = 1;
//   public float getScale() {
//     return scale;
//   }
//   public void setScale(float scale) {
//     this.scale = scale;
//   }
// }
// 
// Path: shared/src/main/java/org/kobjects/nativehtml/util/ElementImpl.java
// public class ElementImpl implements Element {
//   
//   public static String getTextContent(Element element) {
//     StringBuilder sb = new StringBuilder();
//     HtmlCollection children = element.getChildren();
//     for (int i = 0; i < children.getLength(); i++) {
//         sb.append(children.item(i).getTextContent());
//     }
//     return sb.toString();
//   }
// 
//   
// 	protected ElementType elementType;
//     protected Element parent;
//     protected String name;
//     protected Document document;
//     protected HashMap<String, String> attributes;
//     protected CssStyleDeclaration style;
//     protected CssStyleDeclaration computedStyle;
//     protected String textContent;
//     protected HtmlCollectionImpl children;
//     protected ContentType contentType;
//     
//     public ElementImpl(Document document, String name, ElementType elementType, ContentType contentType) {
//     	this.document = document;
//         this.elementType = elementType;
//         this.name = name;
//         this.contentType = contentType;
//     }
// 
//     @Override
//     public String getLocalName() {
//         return name;
//     }
// 
//     @Override
//     public HtmlCollection getChildren() {
//         return children == null ? HtmlCollection.EMPTY : children;
//     }
//     
//     @Override
//     public Element getParentElement() {
//         return parent;
//     }
// 
//     @Override
//     public void setParentElement(Element parent) {
//         this.parent = parent;
//     }
// 
// 
//     @Override
//     public CssStyleDeclaration getStyle() {
//         return style;
//     }
// 
//     @Override
//     public CssStyleDeclaration getComputedStyle() {
//         return computedStyle;
//     }
// 
//     @Override
//     public void setComputedStyle(CssStyleDeclaration computedStyle) {
//     	this.computedStyle = computedStyle;
//     }
// 
//     @Override
//     public void setAttribute(String name, String value) {
//         if (attributes == null) {
//             attributes = new HashMap<>();
//         }
//         attributes.put(name, value);
//         if (name.equals("style")) {
//         	style = CssStyleDeclaration.fromString(value);
//         }
//     }
// 
//     @Override
//     public String getAttribute(String name) {
//         return attributes == null ? null : attributes.get(name);
//     }
//     
// 	@Override
// 	public void setTextContent(String textContent) {
// 		this.textContent = textContent;
// 		this.children = null;
// 	}
// 
// 	@Override
// 	public void insertBefore(Element newChild, Element referenceChild) {
// 		int index;
// 		if (children == null) {
// 			children = new HtmlCollectionImpl();
// 			index = 0;
// 		} else if (referenceChild != null && children != null) {
// 			index = children.indexOf(referenceChild);
// 			if (index == -1) {
// 				index = children.getLength();
// 			}
// 		} else {
// 			index = children.getLength();
// 		}
// 		children.add(index, newChild);
// 		newChild.setParentElement(this);
// 	}
// 
// 	@Override
// 	public ElementType getElementType() {
// 		return elementType;
// 	}
// 
// 	@Override
// 	public String getTextContent() {
// 		if (textContent != null) {
// 			return textContent;
// 		}
// 		if (children == null || children.getLength() == 0) {
// 			return "";
// 		}
// 		return getTextContent(this);
// 	}
// 
// 	@Override
// 	public ContentType getElementContentType() {
// 		return contentType;
// 	}
// 
//   @Override
//   public Document getOwnerDocument() {
//     return document;
//   }
// 
// }


// Path: shared/src/main/java/org/kobjects/nativehtml/dom/Document.java
import java.net.URI;
import java.net.URISyntaxException;
import java.util.LinkedHashMap;
import org.kobjects.nativehtml.io.RequestHandler;
import org.kobjects.nativehtml.layout.WebSettings;
import org.kobjects.nativehtml.util.ElementImpl;

        add("meta", ElementType.DATA, ContentType.EMPTY);
        add("option", ElementType.DATA, ContentType.TEXT_ONLY);
        add("script", ElementType.DATA, ContentType.TEXT_ONLY);
        add("select", ElementType.COMPONENT, ContentType.DATA_ELEMENTS);
        add("small", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("span", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("strike", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("strong", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("style", ElementType.DATA, ContentType.TEXT_ONLY);
        add("sub", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("sup", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("tbody", ElementType.SKIP, ContentType.COMPONENTS);
        add("text-component", ElementType.COMPONENT, ContentType.FORMATTED_TEXT);
        add("thead", ElementType.SKIP, ContentType.COMPONENTS);
        add("title", ElementType.DATA, ContentType.TEXT_ONLY);
        add("tt", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
        add("u", ElementType.FORMATTED_TEXT, ContentType.FORMATTED_TEXT);
    }

    public static ElementType getElementType(String name) {
        ElementType result = ELEMENT_TYPES.get(name);
        return result == null ? ElementType.COMPONENT : result;
    }

    private static ContentType getContentType(String name) {
        ContentType result = CONTENT_TYPES.get(name);
        return result == null ? ContentType.COMPONENTS : result;
    }

	private final Platform platform;
    private final WebSettings webSettings;