1 /* $XConsortium: TokenMessageArg.C /main/1 1996/07/29 17:06:18 cde-hp $ */
2 // Copyright (c) 1994 James Clark
3 // See the file COPYING for copying permission.
9 #include "TokenMessageArg.h"
10 #include "MessageBuilder.h"
12 #include "ParserMessages.h"
18 namespace SP_NAMESPACE {
21 TokenMessageArg::TokenMessageArg(Token token, Mode mode,
22 const ConstPtr<Syntax> &syntax,
23 const ConstPtr<Sd> &sd)
24 : token_(token), mode_(mode), syntax_(syntax), sd_(sd)
28 MessageArg *TokenMessageArg::copy() const
30 return new TokenMessageArg(*this);
33 void TokenMessageArg::append(MessageBuilder &builder) const
35 // FIXME translate function characters in delimiters into
37 if (token_ >= tokenFirstShortref) {
38 builder.appendFragment(ParserMessages::shortrefDelim);
41 if (token_ == tokenEe) {
42 builder.appendFragment(ParserMessages::entityEnd);
45 ModeInfo iter(mode_, *sd_);
47 const MessageFragment *fragment = 0;
48 while (iter.nextToken(&info))
49 if (info.token == token_) {
51 case TokenInfo::delimType:
52 case TokenInfo::delimDelimType:
53 case TokenInfo::delimSetType:
55 const StringC &delim = syntax_->delimGeneral(info.delim1);
56 builder.appendFragment(ParserMessages::delimStart);
57 builder.appendChars(delim.data(), delim.size());
58 fragment = &ParserMessages::delimEnd;
61 case TokenInfo::setType:
64 fragment = &ParserMessages::digit;
66 case Syntax::nameStart:
67 fragment = &ParserMessages::nameStartCharacter;
70 fragment = &ParserMessages::sepchar;
73 fragment = &ParserMessages::separator;
76 fragment = &ParserMessages::nameCharacter;
78 case Syntax::sgmlChar:
79 fragment = &ParserMessages::dataCharacter;
81 case Syntax::minimumData:
82 fragment = &ParserMessages::minimumDataCharacter;
84 case Syntax::significant:
85 fragment = &ParserMessages::significantCharacter;
91 case TokenInfo::functionType:
92 switch (info.function) {
94 fragment = &ParserMessages::recordEnd;
97 fragment = &ParserMessages::recordStart;
100 fragment = &ParserMessages::space;
108 builder.appendFragment(*fragment);