private boolean inlinable(final Element element) {
   // returns true if the specified element should be inlined
   final StartTagType startTagType = element.getStartTag().getStartTagType();
   if (startTagType == StartTagType.DOCTYPE_DECLARATION) return false;
   if (startTagType != StartTagType.NORMAL) return true;
   // element is a normal type
   final String elementName = element.getName();
   if (elementName == HTMLElementName.SCRIPT) return !indentScriptElements;
   if (removeLineBreaks && !HTMLElements.getElementNames().contains(elementName))
     return true; // inline non-HTML elements if removing line breaks
   if (!HTMLElements.getInlineLevelElementNames().contains(elementName)) return false;
   // element is inline type
   if (removeLineBreaks) return true;
   return containsOnlyInlineLevelChildElements(
       element); // only inline if it doesn't illegally contain non-inline elements
 }
 private boolean containsOnlyInlineLevelChildElements(final Element element) {
   // returns true if the element contains only inline-level elements except for SCRIPT elements.
   final Collection childElements = element.getChildElements();
   if (childElements.isEmpty()) return true;
   for (final Iterator i = childElements.iterator(); i.hasNext(); ) {
     final Element childElement = (Element) i.next();
     final String elementName = childElement.getName();
     if (elementName == HTMLElementName.SCRIPT
         || !HTMLElements.getInlineLevelElementNames().contains(elementName)) return false;
     if (!containsOnlyInlineLevelChildElements(childElement)) return false;
   }
   return true;
 }