1 // Copyright (c) 1994 James Clark
2 // See the file COPYING for copying permission.
3 #pragma ident "%Z%%M% %I% %E% SMI"
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
);