docs: public static void extractSpecialContent (@Nonnull final IHCNode aNode,
                                              @Nonnull final AbstractHCSpecialNodes <?> aSpecialNodes,
                                              @Nullable final IHCOnDocumentReadyProvider aOnDocumentReadyProvider)
    {
      ValueEnforcer.notNull (aNode, "Node");
      ValueEnforcer.notNull (aSpecialNodes, "SpecialNodes");
  
      // Extract all out of band nodes from the passed node
      ICommonsList <IHCNode> aExtractedOutOfBandNodes = new CommonsArrayList<> ();
      recursiveExtractAndRemoveOutOfBandNodes (aNode, aExtractedOutOfBandNodes);
  
      // Merge JS/CSS nodes - replace list content
      aExtractedOutOfBandNodes = getMergedInlineCSSAndJSNodes (aExtractedOutOfBandNodes, aOnDocumentReadyProvider);
  
      // Extract the special nodes into the provided object
      aExtractedOutOfBandNodes = extractSpecialNodes (aExtractedOutOfBandNodes, aSpecialNodes);
  
      // Now the aExtractedOutOfBandNodes list must be empty - otherwise we have
      // an internal inconsistency
      if (aExtractedOutOfBandNodes.isNotEmpty ())
        throw new IllegalStateException ("Out-of-band nodes are left after merging and extraction: " +
                                         aExtractedOutOfBandNodes);
    }