Blame lib/TokenMessageArg.cxx

Packit 8a864e
// Copyright (c) 1994 James Clark
Packit 8a864e
// See the file COPYING for copying permission.
Packit 8a864e
Packit 8a864e
#ifdef __GNUG__
Packit 8a864e
#pragma implementation
Packit 8a864e
#endif
Packit 8a864e
#include "splib.h"
Packit 8a864e
#include "TokenMessageArg.h"
Packit 8a864e
#include "MessageBuilder.h"
Packit 8a864e
#include "token.h"
Packit 8a864e
#include "ParserMessages.h"
Packit 8a864e
#include "Mode.h"
Packit 8a864e
#include "ModeInfo.h"
Packit 8a864e
#include "macros.h"
Packit 8a864e
Packit 8a864e
#ifdef SP_NAMESPACE
Packit 8a864e
namespace SP_NAMESPACE {
Packit 8a864e
#endif
Packit 8a864e
Packit 8a864e
TokenMessageArg::TokenMessageArg(Token token, Mode mode,
Packit 8a864e
				 const ConstPtr<Syntax> &syntax,
Packit 8a864e
				 const ConstPtr<Sd> &sd)
Packit 8a864e
: token_(token), mode_(mode), syntax_(syntax), sd_(sd)
Packit 8a864e
{
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
MessageArg *TokenMessageArg::copy() const
Packit 8a864e
{
Packit 8a864e
  return new TokenMessageArg(*this);
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
void TokenMessageArg::append(MessageBuilder &builder) const
Packit 8a864e
{
Packit 8a864e
  // FIXME translate function characters in delimiters into
Packit 8a864e
  // &#NAME; form.
Packit 8a864e
  if (token_ >= tokenFirstShortref) {
Packit 8a864e
    builder.appendFragment(ParserMessages::shortrefDelim);
Packit 8a864e
    return;
Packit 8a864e
  }
Packit 8a864e
  if (token_ == tokenEe) {
Packit 8a864e
    builder.appendFragment(ParserMessages::entityEnd);
Packit 8a864e
    return;
Packit 8a864e
  }
Packit 8a864e
  ModeInfo iter(mode_, *sd_);
Packit 8a864e
  TokenInfo info;
Packit 8a864e
  const MessageFragment *fragment = 0;
Packit 8a864e
  while (iter.nextToken(&info))
Packit 8a864e
    if (info.token == token_) {
Packit 8a864e
      switch (info.type) {
Packit 8a864e
      case TokenInfo::delimType:
Packit 8a864e
      case TokenInfo::delimDelimType:
Packit 8a864e
      case TokenInfo::delimSetType:
Packit 8a864e
	{
Packit 8a864e
	  const StringC &delim = syntax_->delimGeneral(info.delim1);
Packit 8a864e
	  builder.appendFragment(ParserMessages::delimStart);
Packit 8a864e
	  builder.appendChars(delim.data(), delim.size());
Packit 8a864e
#if 0
Packit 8a864e
	  fragment = &ParserMessages::delimEnd;
Packit 8a864e
#endif
Packit 8a864e
	}
Packit 8a864e
	break;
Packit 8a864e
      case TokenInfo::setType:
Packit 8a864e
	switch (info.set) {
Packit 8a864e
	case Syntax::digit:
Packit 8a864e
	  fragment = &ParserMessages::digit;
Packit 8a864e
	  break;
Packit 8a864e
	case Syntax::nameStart:
Packit 8a864e
	  fragment = &ParserMessages::nameStartCharacter;
Packit 8a864e
	  break;
Packit 8a864e
	case Syntax::sepchar:
Packit 8a864e
	  fragment = &ParserMessages::sepchar;
Packit 8a864e
	  break;
Packit 8a864e
	case Syntax::s:
Packit 8a864e
	  fragment = &ParserMessages::separator;
Packit 8a864e
	  break;
Packit 8a864e
	case Syntax::nmchar:
Packit 8a864e
	  fragment = &ParserMessages::nameCharacter;
Packit 8a864e
	  break;
Packit 8a864e
	case Syntax::sgmlChar:
Packit 8a864e
	  fragment = &ParserMessages::dataCharacter;
Packit 8a864e
	  break;
Packit 8a864e
	case Syntax::minimumData:
Packit 8a864e
	  fragment = &ParserMessages::minimumDataCharacter;
Packit 8a864e
	  break;
Packit 8a864e
	case Syntax::significant:
Packit 8a864e
	  fragment = &ParserMessages::significantCharacter;
Packit 8a864e
	  break;
Packit 8a864e
	default:
Packit 8a864e
	  CANNOT_HAPPEN();
Packit 8a864e
	}
Packit 8a864e
	break;
Packit 8a864e
      case TokenInfo::functionType:
Packit 8a864e
	switch (info.function) {
Packit 8a864e
	case Syntax::fRE:
Packit 8a864e
	  fragment = &ParserMessages::recordEnd;
Packit 8a864e
	  break;
Packit 8a864e
	case Syntax::fRS:
Packit 8a864e
	  fragment = &ParserMessages::recordStart;
Packit 8a864e
	  break;
Packit 8a864e
	case Syntax::fSPACE:
Packit 8a864e
	  fragment = &ParserMessages::space;
Packit 8a864e
	  break;
Packit 8a864e
	}
Packit 8a864e
	break;
Packit 8a864e
      }
Packit 8a864e
      break;
Packit 8a864e
    }
Packit 8a864e
  if (fragment)
Packit 8a864e
    builder.appendFragment(*fragment);
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
#ifdef SP_NAMESPACE
Packit 8a864e
}
Packit 8a864e
#endif