public void handleCommand(DOMBuilder builder, Element parentElement, CommandToken token)
            throws SnuggleParseException {
        /* Get the token to which the limit is being applied to, which is precisely the
         * first argument.
         */
        List<FlowToken> limitand = token.getArguments()[0].getContents(); /* Ha! */
        
        /* Decide whether we should do a munder/mover in preference to the more common
         * msub/msup. This decision is made on whether the "limitand" has been flagged
         * as having a certain Interpretation.
         */ 
        boolean isUnderOver = builder.getOutputContext()==OutputContext.MATHML_BLOCK
            && limitand.size()==1
            && limitand.get(0).hasInterpretationType(InterpretationType.MATH_BIG_LIMIT_OWNER);
        BuiltinCommand command = token.getCommand();
        String elementName;
        if (command.equals(CorePackageDefinitions.CMD_MSUB_OR_MUNDER)) {
            elementName = isUnderOver ? "munder" : "msub";
        }
        else if (command.equals(CorePackageDefinitions.CMD_MSUP_OR_MOVER)) {
            elementName = isUnderOver ? "mover" : "msup";
        }
        else if (command.equals(CorePackageDefinitions.CMD_MSUBSUP_OR_MUNDEROVER)) {
            elementName = isUnderOver ? "munderover" : "msubsup";
        }
        else {
            throw new SnuggleLogicException("Unexpected limit command " + command);
        }
        /* And we can now just build up the MathML quite trivially */
        Element result = builder.appendMathMLElement(parentElement, elementName);
        for (ArgumentContainerToken argument : token.getArguments()) {
            builder.handleMathTokensAsSingleElement(result, argument);
        }
    }