docs: @OverrideOnDemand
    @OverridingMethodsMustInvokeSuper
    protected void fillMicroElement (@Nonnull final IMicroElement aElement,
                                     @Nonnull final IHCConversionSettingsToNode aConversionSettings)
    {
      final boolean bHTML5 = aConversionSettings.getHTMLVersion ().isAtLeastHTML5 ();
  
      if (StringHelper.hasText (m_sID))
        aElement.setAttribute (CHTMLAttributes.ID, m_sID);
  
      if (StringHelper.hasText (m_sTitle))
        aElement.setAttribute (CHTMLAttributes.TITLE, m_sTitle);
  
      if (StringHelper.hasText (m_sLanguage))
      {
        // Both "xml:lang" and "lang"
        aElement.setAttribute (new MicroQName (XMLConstants.XML_NS_URI, CHTMLAttributes.LANG.getName ()), m_sLanguage);
        aElement.setAttribute (CHTMLAttributes.LANG, m_sLanguage);
      }
  
      if (m_eDirection != null)
        aElement.setAttribute (CHTMLAttributes.DIR, m_eDirection);
  
      aElement.setAttribute (CHTMLAttributes.CLASS, getAllClassesAsString ());
  
      aElement.setAttribute (CHTMLAttributes.STYLE, getAllStylesAsString (aConversionSettings.getCSSWriterSettings ()));
  
      // Emit all JS events
      if (m_aJSHandler != null)
      {
        final IJSWriterSettings aJSWriterSettings = aConversionSettings.getJSWriterSettings ();
  
        // Loop over all events in the defined order for consistent results
        for (final EJSEvent eEvent : EJSEvent.values ())
        {
          final CollectingJSCodeProvider aProvider = m_aJSHandler.getHandler (eEvent);
          if (aProvider != null)
          {
            final String sJSCode = aProvider.getJSCode (aJSWriterSettings);
            aElement.setAttribute (eEvent.getHTMLEventName (), CJS.JS_PREFIX + sJSCode);
          }
        }
      }
  
      // unfocusable is handled by the customizer as it is non-standard
  
      // Global attributes
      if (m_nTabIndex != DEFAULT_TABINDEX)
        aElement.setAttribute (CHTMLAttributes.TABINDEX, m_nTabIndex);
      if (StringHelper.hasText (m_sAccessKey))
        aElement.setAttribute (CHTMLAttributes.ACCESSKEY, m_sAccessKey);
  
      // Global HTML5 attributes
      if (bHTML5)
      {
        if (m_eTranslate.isDefined ())
          aElement.setAttribute (CHTMLAttributes.TRANSLATE,
                                 m_eTranslate.isTrue () ? CHTMLAttributeValues.YES : CHTMLAttributeValues.NO);
        if (m_eContentEditable != null)
          aElement.setAttribute (CHTMLAttributes.CONTENTEDITABLE, m_eContentEditable);
        if (StringHelper.hasText (m_sContextMenuID))
          aElement.setAttribute (CHTMLAttributes.CONTEXTMENU, m_sContextMenuID);
        if (m_eDraggable != null)
          aElement.setAttribute (CHTMLAttributes.DRAGGABLE, m_eDraggable);
        if (m_eDropZone != null)
          aElement.setAttribute (CHTMLAttributes.DROPZONE, m_eDropZone);
        if (m_bHidden)
          aElement.setAttribute (CHTMLAttributes.HIDDEN, CHTMLAttributeValues.HIDDEN);
        if (m_bSpellCheck)
          aElement.setAttribute (CHTMLAttributes.SPELLCHECK, CHTMLAttributeValues.SPELLCHECK);
      }
  
      if (m_eRole != null)
        aElement.setAttribute (CHTMLAttributes.ROLE, m_eRole.getID ());
  
      if (m_aCustomAttrs != null)
        for (final Map.Entry <IMicroQName, String> aEntry : m_aCustomAttrs.entrySet ())
          aElement.setAttribute (aEntry.getKey (), aEntry.getValue ());
    }