public String processTag(int level, XMLNode tag) throws ProcessorException
    {
        try
        {
            return super.processTag(level, tag);
        }
        // A ProcessorException at this point can mean several things.
        catch (ProcessorException e0)
        {
            // It could be a deprecated tag.
            if (Globals.supportDeprecatedTags())
            {
                try
                {
                    return DeprecatedAIMLParser.processTag(level, userid, tag, this);
                }
                catch (UnknownDeprecatedAIMLException e1)
                {
                    // For now, do nothing (drop down to next).
                }
            }
            // It could also be a non-AIML tag.
            if (Globals.nonAIMLRequireNamespaceQualification())
            {
                // If namespace qualification is required, check for a colon.
                if (tag.XMLData.indexOf(COLON) == -1)
                {
                    throw new AIMLProcessorException("Unknown element \"" + tag.XMLData + "\"");
                }
            }
            // But if namespace qualification is not required, don't care.
            return formatTag(level, tag);
        }
        catch (StackOverflowError e)
        {
            Log.userinfo("Stack overflow error processing " + tag.XMLData + " tag.", Log.ERROR);
            return EMPTY_STRING;
        }
    }