@Override
   public void processCommand(Command command, int parameter, boolean hasParameter, boolean optional)
   {
      if (command.getCommandType() == CommandType.Encoding)
      {
         processEncoding(command, hasParameter, parameter);
      }
      else
      {
         boolean optionalFlag = false;

         IParserEvent lastEvent = handler.getLastEvent();
         if (lastEvent.getType() == ParserEventType.COMMAND_EVENT)
         {
            if (((CommandEvent) lastEvent).getCommand() == Command.optionalcommand)
            {
               handler.removeLastEvent();
               optionalFlag = true;
            }
         }

         switch (command)
         {
            case u:
            {
               processUnicode(parameter);
               break;
            }

            case uc:
            {
               processUnicodeAlternateSkipCount(parameter);
               break;
            }

            case upr:
            {
               processUpr(new CommandEvent(command, parameter, hasParameter, optionalFlag));
               break;
            }

            case emdash:
            {
               processCharacter('\u2014');
               break;
            }

            case endash:
            {
               processCharacter('\u2013');
               break;
            }

            case emspace:
            {
               processCharacter('\u2003');
               break;
            }

            case enspace:
            {
               processCharacter('\u2002');
               break;
            }

            case qmspace:
            {
               processCharacter('\u2005');
               break;
            }

            case bullet:
            {
               processCharacter('\u2022');
               break;
            }

            case lquote:
            {
               processCharacter('\u2018');
               break;
            }

            case rquote:
            {
               processCharacter('\u2019');
               break;
            }

            case ldblquote:
            {
               processCharacter('\u201c');
               break;
            }

            case rdblquote:
            {
               processCharacter('\u201d');
               break;
            }

            case backslash:
            {
               processCharacter('\\');
               break;
            }

            case opencurly:
            {
               processCharacter('{');
               break;
            }

            case closecurly:
            {
               processCharacter('}');
               break;
            }

            case f:
            {
               processFont(parameter);
               handleCommand(command, parameter, hasParameter, optionalFlag);
               break;
            }

            case fcharset:
            {
               processFontCharset(parameter);
               handleCommand(command, parameter, hasParameter, optionalFlag);
               break;
            }

            default:
            {
               handleCommand(command, parameter, hasParameter, optionalFlag);
               break;
            }
         }
      }
   }